欢迎来到天天文库
浏览记录
ID:22677059
大小:120.79 KB
页数:8页
时间:2018-10-30
《数据结构(实验报告)实验一》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、《数据结构》广类猞板告J专业:计算机科学与技术指导教师:班级学号:实验1、题目:设计一个循环单链表,并设计一个主函数进行测试。2、问题描述:设计循环单链表,使它包含5个基本操作及一个输出函数,并设计主函数进行测试。3、基本要求:(1)循环单链表的操作,包括初始化,求数据元素个数,插入、删除、取数据元素。(2)设计一个输出函数,将数据元素依次输出。(3)设计一个主函数实际运行验证所设计循环单链表的正确性。4、测试数据:向循环单链表中插入14(1-14)个数据元素,调用输出函数依次输出循环单链表中的数据元素,删除循环单链表中
2、第6个元素,依次输出循环单链表中的数据元素,最后撤销循环单链表。5、算法思想:初始化:初始化操作前,头指针参数head没有具体的地址值,在初始化操作后,头指针参数head才得到了具体的地址值,而这个地址值要返回给调用函数,所以,此时头指针参数head要设计成指针类型的指针。求当前数据元素个数:循环前,指针变量p指向头结点,计数变量size等于0;循环的结束条件为p-〉next!=head,循环中头指针p每次指向它的后继点时size加1;循环结束后返回数值size。插入数据元素:使指针p指向第i_l个结点,动态申请一个结点
3、存储空间并由指针q指示,把数据元素x的值赋予新结点的数据元素域,最后修改新结点的next域指向i个结点,并修改i_l结点的指针域使之指向新结点P;循环条件由条件逻辑与组成,其中子条件p-〉next!=head保证指针所指向结点存在,子条件j〈i-l保证最终让指针P指向第i-1个结点。删除数据元素:使指针p指向第i-1个结点,然后让指针s指向i结点,并把数据元素的值赋予X,最后把第i个结点脱链,并动态释放结点的存储空间;循环条件有三个子条件逻辑与组成,其中子条件p->next!=head保证第i-1个结点存在,子条件p-〉
4、next—〉!=head保证第i个结点存在,子条件j5、^include〈stdlib.h>#includetypedefintDataType;typedefstructNode{DataTypedata;structNode*next;}SLNode;voidListlnitiate(SLNode林head)/*初始化*/{/*如果有内存空间,申请头结点空间并使头指针head指向头结点*/if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);(*head)->next=*he6、ad;/*置链尾标记NULL*/intListLength(SLNode*head){/*p指向首元结点*//*size初始为0*//*循环计数*/SLNode*p=head;intsize=0;while(p->next!=head){p=p->next;size++;}returnsize;intListlnsert(SLNode*head,inti,DataTypex)/*在带头结点的单链表head的数据元素ai(0彡i彡size)结点前*//*插入一个存放数据元素x的结点*/{SLNode*p,*q;intj;p7、=head;/*p指向首元结点*/j=-1;/*j初始为-I*/while(p->next!=head&&jnext;j++;if(j!=i-1)printf(n插入位置参数错!”);return0;/*生成新结点由指针q指不*/if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);q-〉data=x;q->next=p->next;/*给才旨专fq->next赋值木/p->next=q;/*给指针p-〉8、next重新赋值*/return1;intListDelete(SLNode*head,inti,DataType*x)/*删除带头结点的单链表head的数据元素ai(0isize-1)结点*//*删除结点的数据元素域值由x带回。删除成功时返回1;失败返回0*/{SLNode*p,*s;intj;p二head;/*p
5、^include〈stdlib.h>#includetypedefintDataType;typedefstructNode{DataTypedata;structNode*next;}SLNode;voidListlnitiate(SLNode林head)/*初始化*/{/*如果有内存空间,申请头结点空间并使头指针head指向头结点*/if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);(*head)->next=*he
6、ad;/*置链尾标记NULL*/intListLength(SLNode*head){/*p指向首元结点*//*size初始为0*//*循环计数*/SLNode*p=head;intsize=0;while(p->next!=head){p=p->next;size++;}returnsize;intListlnsert(SLNode*head,inti,DataTypex)/*在带头结点的单链表head的数据元素ai(0彡i彡size)结点前*//*插入一个存放数据元素x的结点*/{SLNode*p,*q;intj;p
7、=head;/*p指向首元结点*/j=-1;/*j初始为-I*/while(p->next!=head&&jnext;j++;if(j!=i-1)printf(n插入位置参数错!”);return0;/*生成新结点由指针q指不*/if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);q-〉data=x;q->next=p->next;/*给才旨专fq->next赋值木/p->next=q;/*给指针p-〉
8、next重新赋值*/return1;intListDelete(SLNode*head,inti,DataType*x)/*删除带头结点的单链表head的数据元素ai(0isize-1)结点*//*删除结点的数据元素域值由x带回。删除成功时返回1;失败返回0*/{SLNode*p,*s;intj;p二head;/*p
此文档下载收益归作者所有