1、为单申请头结点空间,将单链表设置为空;创建: (1)头部插入法:(a)初始化空表;(b)申请新结点并赋值;(c)插入新结点;(d)插入第i个元素。(2)尾部插入法:(a)建空表(b)申请结点并赋值;(c)插入第一个结点;(d) r-next-s,r-s;长:从表头开始,将指针依次指向各个结点,一直到 p-next-NULL为止,用j来计数。查找:(1)按值查找:表中查找第 i个结点,找到就返回该结点的存储位置,用 j来存储扫描过的结点数(j的初值为0),但j-i时,结束。(2)按序号查找:从表中第一个结点开始,当 key等于查找到的元素的数据时停止查找。插入:在单链表中第i-1个结点并由指针指
2、示,申请结点空间 q,将数据域置为x,更新指针。删除:从头结点开始,删除第 i个结点并释放空间;输出:当表不为空时,依次输出表中元素;合并:与顺序表一样,只需为新的结点申请一个空间。典型测试数据输入:输入数据个数:4 数据:1, 2, 3, 41 , 2, 3, 4预期结果:基本实现了单链表的基本 各种操作。程序及运行结果正误判断: 口非常好 口/ 正确,切改进 口基本正确,还需改进 口还有错误不足之处或设计经验小结:(1) L是单钏的头指针的指针,用来接收头指针变量的地址, *L待初始化的单链表为头指针变量;(2) 节省了空间,访问结点时,只需知道头指针,就可以找到其他的元素;(3)头插法建
3、表得到的链表中的结点的次序和输入的顺序相反,尾插法则一致;(4) 求灯时,算法的时间复杂度为 O (n)。任课教师评语:教师签字:注:每学期至少有一次设计性实验。每学期结束请任课教师按时按量统一交到教学秘书处。源程序文件名及组件: #include,#includeconio.hwindows.h算法设计思想算法描述#includenext=NULL;LinkList create(int n)LinkList h,r,p;int x,i;h=(Node*)malloc(sizeof(Node);r=h;printf(请输入数据:n);for(i=1;idata=x;r-next=p;r=p;
4、return h;/*头部插入*/int CreatfromH(LinkList head)LinkList p;ElemType x;puts(输入数据,输入-100。结束输入!while(1)if(x!=-1000)(next=head-next;head-else break;return 1;return 0;/*尾部插入*/LinkList CreatfromT(LinkList head)LinkList p,q,t;q=head;t=head;puts(”输入数据,输入-1000结束输入!t-t=p;return q;int Inslist(LinkList *head,int
5、i,ElemType x)LinkList p,q;p=(*head);int j=0;while(p&jj+;if(!p|j插入位置不合法!q=(Node*)malloc(sizeof(Node);q-next=p-next=q;/输出void Output(LinkList head)*/*定义节点指针类型,并指向首元结点p=head-while(p!=NULL)n%d”,p-data);/*求表长*/int LengthList(LinkList head)int i;i=0;i+;return i;/*查找*/int Locate1(LinkList head,ElemType x)i
6、nt i=1;=NULL&data!=x)if(p=NULL) return 0;int Locate2(LinkList head,int i)int j;p=head;j=0;if(ii)return NULL;while(p-next!=0&i)return p-data;/*删除*/int Del(LinkList *head,int i)j=j+;if(p=NULL&j删除位置不合理!q=p-next-free(q);/*合并两个单链表*/LinkList merge(LinkList La,LinkList Lb)LinkList Lc;LinkList q,p,r;p=La-q=
7、Lb-Lc=La;Lc-r=Lc;q!if(p-datadata)elser=q;q=q-if(p)free(Lb);return(Lc);void main()LinkList head,La,Lb;char zdg,y;while(zdg!=0)getch();system(CLS* 功能选择 * 0-退出 1-创建 2-插入 * 3-输出 4-表长 5-查找 * 6-删除 7-合并 *请选择功能:%c”,&zdg);switch(zdg)case0puts(l*l* 0-般创建 1-头部插入法 2-尾部插入法 *请选择:y);y=getch();if(y=)输入数字的个数:%d,&i);head=create(i);1CreatfromH(head);printf(-新的单链表为:Output(head);2Output(CreatfromT(head);break;请输入要插入的位置:请输入要插入的数据:if(Inslist(&head,i,x)!插入成功!3输入的数据为:4长度为:,LengthList(head);5*);*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1