#include#include #define ERROR 0#define OK 1#define OVERFLOW -2typedef struct Lnode{ int data; struct Lnode *next;}LNode,*LinkList;//初始化一个空指针int InitList_L(LinkList &L){ L=(LNode *)malloc(sizeof(struct Lnode));// L->data=info; L->next=NULL; return OK;}//查找元素int Yin(LinkList L,int &r){ LinkList p;int x=0;int j=1;int i; printf("请选择:1.继续查询\n2.结束查询\n"); printf("请输入选择:"); scanf("%d",&x); if(x==1){ printf("\n请选择查询元素位置:"); scanf("%d",&i); p=L->next; while(p&&j next; ++j; } if(!p||j>i){ printf("\n查询位置不在列表内!!\n\n"); //return ERROR; Yin(L,r); }else{ return ERROR;} //return OK; }// printf("******"); return OK;}int GetElem_L(LinkList L,int i,int &e){ LinkList p;int x=0;int j=1;int r,h; printf("\n请选择查询元素位置:"); scanf("%d",&i); p=L->next; while(p&&j next; ++j; } if(!p||j>i){ printf("\n查询位置不在列表内!!\n\n"); h=Yin(L,r); if(h==0){ return ERROR; }else{ e=p->data; printf("\n查找的%d位置的元素为:%d\n\n",i,e); return OK; } } return OK;}//插入元素ListInser_L(LinkList &L,int i,int e){ LinkList p,s;int j=0; p=L; printf("\n请选择插入位置:"); scanf("%d",&i); printf("\n请选择插入元素:"); scanf("%d",&e); while(p&&j next; ++j; } if(!p||j>i-1) { printf("\n插入位置不在链表长度内!!\n\n"); return ERROR; } s=(LNode*)malloc(sizeof(struct Lnode)); s->data=e; s->next=p->next; p->next=s; return OK;}// 删除元素int ListDelete_L(LinkList &L,int i,int e){ LinkList p,q;int j=0; p=L; printf("\n请输入要删除的位置:"); scanf("%d",&i); while(p->next&&j next; ++j; } if(!(p->next)||j>i-1) { printf("\n删除的位置不在链表长度内!!\n\n"); return ERROR; } q=p->next; p->next=q->next; e=q->data; free(q); return OK; }//创建链表int creatlist(LinkList &L){ int i; LinkList p,q; if(L==NULL) InitList_L(L); q=L; printf("\n请输入链表长度:"); scanf("%d",&i); while(i<=0){ printf("\n输入链表长度不合法,请重新输入表长:"); scanf("%d",&i); } printf("\n请输入%d个数:",i); for(i;i>0;i--){ p=(LNode*)malloc(sizeof(struct Lnode)); p->next=NULL; scanf("%d",&p->data); q->next=p; q=p; } printf("\n输入成功!!\n\n"); return OK;}//打印链表中的元素int pr(LinkList L){ LinkList q; q=L->next; printf("\n表中存储元素为:\n"); while(q!=NULL){ printf("%d\n",q->data); q=q->next; } return OK;}//清空链表,只保留头结点void ClearList(LinkList &L){ LinkList p; while(L->next){ p=L->next; L->next=p->next; free(p); } printf("清空链表成功!!\n\n"); creatlist(L);}void OperateMenu(){ //操作菜单 printf("--------------请选择元素处理方式---------\n\n"); printf("0> 退出\n\n"); printf("1>: 查找给定位置的数据\n\n"); printf("2>: 插入元素\n\n"); printf("3>: 删除元素\n\n"); printf("4>: 打印元素\n\n"); printf("5>: 释放原链表,重新创建新链表\n\n"); printf("请选择对元素的处理:"); }void main(){ LinkList L; int w=0,k,i=1,e=0,boo; L=NULL; printf("注:此测试过程输入值应全为数字\n\n"); printf("请用户选择存入数据或退出程序:\n\n"); printf("存入数据请输入:'1'\n\n"); printf("退出请选择'0'或 其它!!\n\n"); printf("请选择:"); scanf("%d",&w); if(w==1){ InitList_L(L); creatlist(L); OperateMenu(); scanf("%d",&k); while(k){ switch(k){ case 0:break; case 1:boo=GetElem_L(L,i,e); if(boo) printf("查询成功!!\n\n"); else printf("查询失败!!\n\n"); break; case 2:boo=ListInser_L(L,i,e); if(boo) printf("\n插入成功!!\n\n"); else printf("插入失败!!\n\n"); break; case 3:boo=ListDelete_L(L,i,e); if(boo) printf("\n删除成功!!\n\n"); else printf("删除失败!!\n\n"); break; case 4:pr(L);break; case 5:ClearList(L);break; } OperateMenu(); scanf("%d",&k); } }else{ exit(OVERFLOW); }}