//初始化
int InitList(LinkList L)
//求表长
int Length(LinkList L)
//尾插法创建单链表
LinkList CreateList(LinkList L)
//按值查找
int LocateElem(LinkList L,ElemType e)
//按位查找
LNode *GetElem(LinkList L,int i)
//插入
int ListInsert(LinkList L,int i,ElemType e)
//删除
ElemType ListDelete(LinkList L,int i,ElemType *e)
//输出
void PrintList(LinkList L)
//判空
int Empty(LinkList L)
//置空
LinkList ClearList(LinkList L)
//销毁
void DestroyList(LinkList L)
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//初始化
int InitList(LinkList L){
int ret=0;
L=(LNode*)malloc(sizeof(LNode));
if(L==NULL)
ret=0;
else{
L->next=NULL;
ret=1;
}
return ret;
}
//求表长
int Length(LinkList L){
int j=0;
LNode *p=L;
while(p){
p=p->next;
j++;
}
return j-1;
}
//尾插法创建单链表
LinkList CreateList(LinkList L){
ElemType x=0;
L=(LinkList)malloc(sizeof (LNode));
L->data=0;
LNode *s,*r=L;
scanf("%d",&x);
//输入9999结束
while(x!=9999){
s=(LNode*) malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
printf("添加元素%d成功。\n",x);
scanf("%d",&x);
}
r->next=NULL;
return L;
}
//按值查找
int LocateElem(LinkList L,ElemType e){
int j=1;
int ret=0;
LNode *p=L->next;
while(p){
if(p->data==e){
printf("%d在第%d位。\n",e,j);
ret=1;
}
p=p->next;
j++;
}
return ret;
}
//按位查找
LNode *GetElem(LinkList L,int i){
int j=1;
LNode *p=L->next;
if(i==0)
return L;
if(i<1)
return NULL;
while(p&&j<i){
p=p->next;
j++;
}
return p;
}
//插入
int ListInsert(LinkList L,int i,ElemType e){
int ret=0;
LNode *s,*p;
p= GetElem(L,i-1);
if(i<1)
ret=0;
else{
s=(LNode*) malloc(sizeof (LNode));
s->next=p->next;
p->next=s;
s->data=e;
ret=1;
}
return ret;
}
//删除
ElemType ListDelete(LinkList L,int i,ElemType *e){
LNode *p,*s;
int ret;
if(i<1)
ret=0;
else{
p= GetElem(L,i-1);
*e=p->next->data;
s=p->next;
p->next=s->next;
free(s);
ret=1;
}
return ret;
}
//输出
void PrintList(LinkList L){
LNode *p=L->next;
while(p){
printf("%d\n",p->data);
p=p->next;
}
}
//判空
int Empty(LinkList L){
int ret;
if(L->next)
ret=1;
else
ret=0;
return ret;
}
//置空
LinkList ClearList(LinkList L){
if(L->next)
L->next=NULL;
printf("Clear Success.\n");
return L;
}
//销毁
void DestroyList(LinkList L){
LinkList p=L;
LNode *q=NULL;
while(p){
q=p;
p=p->next;
free(q);
}
printf("Destroy Success.\n");
}
int main() {
LinkList L=NULL;
LNode *p;
ElemType e;
int ret=0;
int i=0,j=0,k=0;
i=InitList(L);
if(i!=0)
printf("Initialization Success.\n");
else
printf("Initialization Error!\n");
printf("Create LinkList\n");
L=CreateList(L);
printf("请输入需要插入值的个数:");
scanf("%d",&j);
for(k=0;k<j;k++){
printf("请输入插入值的大小及其位置:");
scanf("%d %d",&e,&i);
ret=ListInsert(L,i,e);
if(ret!=0)
printf("Insert Success.\n");
else
printf("Insert Error!\n");
}
printf("请输入需要删除值的个数:");
scanf("%d",&j);
for(k=0;k<j;k++){
printf("请输入需要删除值的位置:");
scanf("%d",&i);
ret= ListDelete(L,i,&e);
if(ret!=0)
printf("在第%d位上的%d已删除。\n",i,e);
else
printf("Delete Error!");
}
printf("链表的长度为%d\n",Length(L));
printf("请输入需要查找的值:");
scanf("%d",&e);
ret= LocateElem(L,e);
if(ret!=0)
printf("Find Success.\n");
else
printf("Find Error!\n");
printf("请输入需要查找值的位置:");
scanf("%d",&i);
p=GetElem(L,i);
if(p)
printf("第%d位的值为%d\n",i,p->data);
else
printf("Find Error!\n");
printf("输出链表\n");
PrintList(L);
ret=Empty(L);
if(ret!=0)
printf("表不为空\n");
else
printf("该表为空\n");
printf("置空链表输入1,销毁链表输入2:");
scanf("%d",&ret);
if(ret==1){
L= ClearList(L);
}
else if(ret==2){
DestroyList(L);
}
ret=Empty(L);
if(ret!=0)
printf("表不为空\n");
else
printf("该表为空\n");
return 0;
}