资源描述:
《单链表的实现(原创)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、初始化,插入,删除,查找,求表长、排序、删除相同的元素、显示表。#include#include//exit()#include#includetypedefintElemType;typedefstructLNode{intdata;//数据structLNode*next;//指针}LNode,*SLink;SLinkInitList_L();//创建一个带头结点的空链表,L为指向头结点的指针SLinkCreateList_L();//逆位序输入n个元素的值,建立带头结点的单链表Lvo
2、idReverse_L(SLinkL);//就地逆置voidGetElemList_L(SLinkL,ElemTypee);//查找,当第i个元素存在时,其值赋给evoidInsertList_L(SLinkL,inti,ElemTypee);//在指针指向第i个元素前插入新的元素eintDeleteList_L(SLink&L,inti,ElemType&e);//删除第i个元素voidArrangeList_L(SLink&L);//排序voidpurgeList_L(SLinkL);//删除表中相同的数intLengthList_L(SLinkL);//求表长
3、voidTraverseList_L(SLinkL);//显示表intmenu_select();//菜单函数voidmain(){SLinkL;inti,m;//定义常量ElemTypee;//定义常量for(;;){switch(menu_select()){case1:L=InitList_L();//创建空表break;case2:L=CreateList_L();//创建表Reverse_L(L);break;case3:printf("请输入要查找的元素:");//查找scanf("%d",&e);GetElemList_L(L,e);break;cas
4、e4:printf("请输入要插入的元素的位置:");//在指针指向第i个元素前插入新的元素escanf("%d",&i);printf("请输入插入的元素:");scanf("%d",&e);InsertList_L(L,i,e);break;case5:printf("请输入要删除元素的位序:");//删除第i个元素scanf("%d",&i);m=DeleteList_L(L,i,e);if(m){printf("删除的第%d个元素是%d:",i,m);printf("");}elseprintf("删除的位置不合法!");break;case6:Ar
5、rangeList_L(L);break;case7:purgeList_L(L);//删除表中相同元素Reverse_L(L);break;case8:i=LengthList_L(L);//求表长if(i)printf("表长为:%d",i);elseprintf("表为空!");break;case9:TraverseList_L(L);//显示表break;case10://退出exit(1);}}}//构造一个空的线性表LSLinkInitList_L()//创建一个带头结点的空链表,L为指向头结点的指针{SLinkL;L=newLNode;//为
6、表L分配空间if(!L)exit(1);//存储空间分配失败L->next=NULL;returnL;}/////////////////////////////////////////////////////创建链表SLinkCreateList_L()//输入n个元素的值,建立带头结点的单链表L{inti,n,t;SLinkp,L;printf("输入数据长度");scanf("%d",&n);//扫描长度L=newLNode;//为单链表分配空间L->next=NULL;//先建立一个带头结点的单链表printf("请输入元素:");for(i=n;i>0;-
7、-i){p=newLNode;//生成新结点scanf("%d",&t);//扫描元素值p->data=t;p->next=L->next;L->next=p;}returnL;}//就地逆置voidReverse_L(SLinkL)//链表的就地逆置{SLinkp,q,s;//定义指针p=L->next;q=p->next;s=q->next;p->next=NULL;//指针指向链表头和链表尾while(s->next){q->next=p;p=q;//交换q=s;s=s->next;//把L的元素逐个插入新表表头}q->next=p;s->next=q;L