您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 线性表的链式存储结构和操作
//作者:zhoucanji//线性表的链式存储结构和操作//单链表//C语言版#includestdio.h#includestdlib.h#defineMAX100typedefintElemType;typedefstructLNode{ElemTypedata;structLNode*next;}ListNode;//初始化线性表voidInitList(ListNode**L){(*L)=(ListNode*)malloc(sizeof(ListNode));(*L)-next=NULL;}//遍历线性表voidDispList(ListNode*L){ListNode*p=L-next;while(p!=NULL){printf(%d,p-data);p=p-next;}printf(\n);}//创建线性表voidCreateListR(ListNode*L,ElemTypea[],intn){ListNode*s,*r;inti;r=L;for(i=0;in;i++){s=(ListNode*)malloc(sizeof(ListNode));s-data=a[i];r-next=s;r=s;r-next=NULL;}}voidInitArray(int*a,intn){inti;for(i=0;in;i++){a[i]=i+1;}}voidDispalyArray(int*a,intn){inti;for(i=0;in;i++){printf(%d,a[i]);}printf(\n以上是数组a[MAX]的遍历\n);}//求线性表的长度intListLength(ListNode*L){ListNode*p=L;inti=0;while(p-next!=NULL){p=p-next;i++;}returni;}//判断线性表是否为空intListEmpty(ListNode*L){return(L-next!=NULL);}//销毁线性表intDestroyList(ListNode*L){ListNode*p,*q;p=L;q=L-next;while(q!=NULL){free(p);p=q;q=p-next;}free(p);return(q==NULL);}//求线性表中某个数据元素的值intGetElem(ListNode*L,inti,ElemType*e){intj=0;ListNode*p=L;while(ji&&p!=NULL){j++;p=p-next;}if(p==NULL)return0;else{*e=p-data;return1;}}//求线性表中是否存在某个元素!intLocateElem(ListNode*L,inte){intj=0;ListNode*p=L;while(p!=NULL&&p-data!=e){p=p-next;j++;}if(p==NULL)return-1;elsereturnj;}//在线性表中插入某个元素intListInsert(ListNode*L,intw,inte){intj=0;ListNode*p,*s;p=L;while(jw-1&&p!=NULL){j++;p=p-next;}if(p==NULL)return0;else{s=(ListNode*)malloc(sizeof(ListNode));s-data=e;s-next=p-next;p-next=s;return1;}}//在线性表中删除某个元素的节点intListDelete(ListNode*L,intw){ListNode*p,*s;intj=0;p=L;while(jw-1&&p!=NULL){j++;p=p-next;}if(p==NULL)return0;else{s=p-next;if(s==NULL)return0;p-next=s-next;free(s);return1;}}intmain(){inta[MAX];intlength;intempty;intnumber;intposition;intelement;intresult;InitArray(a,MAX);DispalyArray(a,MAX);ListNode*head,*p;InitList(&head);p=head;CreateListR(p,a,MAX);DispList(head);while(1){printf(\n);printf(请输入对应的数字,选择相应的功能!\n);printf(按其它键,退出程序!\n);printf(输入1,求线性表中某个数据元素的值!\n);printf(输入2,求线性表的长度!\n);printf(输入3,判断线性表是否为空!\n);printf(输入4,销毁线性表!\n);printf(输入5,遍历线性表!\n);printf(输入6,求线性表中是否存在某个元素!\n);printf(输入7,在线性表中插入某个元素!\n);printf(输入8,在线性表中删除某个元素的节点!\n);printf(----------------------------------------------------------\n);scanf(%d,&number);switch(number){case1://求线性表中某个数据元素的值printf(请输入节点的位置?\n);scanf(%d,&position);result=GetElem(head,position,&element);if(result)printf(在线性表中位置为%d的元素为%d\n,position,element);elseprintf(在线性表中不存在%d的位置\n,position);break;case2://求线性表的长度length=ListLength(head);printf(线性表的长度为:%d\n,length);break;case3://判断线性表是否为空empty=ListEmpty(head);if(empty==0)printf(线性表为空\n);elseprintf(线性表不为空\n);break;case4://销毁线性表result=DestroyList(head);if(result)printf(线性表销毁成功!\n);elseprintf(线性表销毁失败!\n);break;case5://遍历线性表DispList(head);break;case6://求线性表中是否存在某个元素!printf(请输入元素的值?\n);scanf(%d,&element);result=LocateElem(head,element);if(result)printf(存在,元素%d位于线性表中第%d个节点!\n,element,result);elseprintf(线性表不存在,元素%d!\n,element);break;case7://在线性表中插入某个元素printf(请输入元素的值?\n);scanf(%d,&element);printf(请输入元素的位置?\n);scanf(%d,&position);result=ListInsert(head,position,element);if(result)printf(插入成功,元素%d位于线性表中第%d个节点!\n,position,result);elseprintf(插入失败.);break;case8://在线性表中删除某个元素的节点printf(请输入元素的位置?\n);scanf(%d,&position);result=ListDelete(head,position);if(result)printf(删除成功,线性表中第%d个节点已删除!\n,position);elseprintf(删除失败.);break;break;default://退出程序exit(1);}}return0;}
本文标题:线性表的链式存储结构和操作
链接地址:https://www.777doc.com/doc-4879766 .html