欢迎来到天天文库
浏览记录
ID:22039649
大小:67.50 KB
页数:10页
时间:2018-10-26
《单链表的定义及基本操作》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、单链表的定义及基本操作一、实验目的、意义(1)理解线性表中带头结点单链表的定义和逻辑图表示方法。(2)熟练掌握单链表的插入,删除和查询算法的设计与实现。(3)根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关算法。二、实验内容及要求说明1:本次实验中的链表结构均为带头结点的单链表。说明2:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。具体要求:建立单链表,完成链表(带
2、表头结点)的基本操作:建立链表、插入、删除、查找、输出;其它基本操作还有销毁链表、将链表置为空表、求链表的长度、获取某位置结点的内容、搜索结点。三、实验所涉及的知识点数据结构、C语言语法函数、结构体类型指针、单链表(建表、初始化链表、求表长、插入、删除、查询算法)等。四、实验结果及分析(所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图方式给出。)10五、总结与体会(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。)调试程序时,出现了许多错误。如:结构体类型指针出错,忽略了释放存储
3、空间,对头插法建表、尾插法建表不熟悉等。另外还有一些语法上的错误。由于对所学知识点概念模糊,试验课上未能完成此次上机作业。后来经过查阅教材,浏览网页等方式,才完成试验。这次试验出现错误最重要的原因就是对课本知识点理解不深刻以及编写代码时的粗心。以后要都去练习、实践,以完善自己的不足。六、程序清单(包含注释)//单链表10#include#include#defineOK1#defineERROR0typedefcharElemType;typedefintStatus;//线性表的单链
4、表的存储结构typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;//LinkList为结构体类型的指针,可以直接定义变量,比如LinkListp;//建表(头插法)voidCreatListF(LinkList&L,ElemTypea[],intn){//初始化线性表L=(LinkList)malloc(sizeof(LNode));//分配内存空间L->next=NULL;//在表中插入元素LinkListS;inti;//头插法for(i=
5、0;idata=a[i];//数据域S->next=L->next;L->next=S;}}10//建表(尾插法)voidCreatListR(LinkList&L,ElemTypea[],intn){L=(LinkList)malloc(sizeof(LNode));L->next=NULL;LinkListp;p=L;LinkListS;inti;//尾插法for(i=0;i6、alloc(sizeof(LNode));S->data=a[i];p->next=S;p=S;}p->next=NULL;}//初始化线性表voidInitList(LinkList&L){L=(LinkList)malloc(sizeof(LNode));L->next=NULL;}//获得链表元素StatusGetElem(LinkListL,inti,ElemType&e){//L为带头结点的单链表的头指针LinkListp;intj;10//初始化,p指向第一个结点p=L->next;//j为计数器j=1;//顺7、指针往后查找,直到p指向第i个元素或p为空while(p&&jnext;j++;}//第i个元素不存在if(!p8、9、j>i)returnERROR;//取第i个元素e=p->data;returnOK;}//插入StatusListInsert(LinkList&L,inti,ElemTypee){intj=0;LinkListp;p=L;while(p!=NULL&&jnext;j++;}if(!p10、11、j>i-1)returnERROR;LinkListS;1012、S=(LinkList)malloc(sizeof(LNode));//生成新结点S->data=e;S->next=p->next;p->next=S;returnOK;}//删除StatusListDelete(LinkList&L,inti,ElemType&e){LinkListp;LinkLi
6、alloc(sizeof(LNode));S->data=a[i];p->next=S;p=S;}p->next=NULL;}//初始化线性表voidInitList(LinkList&L){L=(LinkList)malloc(sizeof(LNode));L->next=NULL;}//获得链表元素StatusGetElem(LinkListL,inti,ElemType&e){//L为带头结点的单链表的头指针LinkListp;intj;10//初始化,p指向第一个结点p=L->next;//j为计数器j=1;//顺
7、指针往后查找,直到p指向第i个元素或p为空while(p&&jnext;j++;}//第i个元素不存在if(!p
8、
9、j>i)returnERROR;//取第i个元素e=p->data;returnOK;}//插入StatusListInsert(LinkList&L,inti,ElemTypee){intj=0;LinkListp;p=L;while(p!=NULL&&jnext;j++;}if(!p
10、
11、j>i-1)returnERROR;LinkListS;10
12、S=(LinkList)malloc(sizeof(LNode));//生成新结点S->data=e;S->next=p->next;p->next=S;returnOK;}//删除StatusListDelete(LinkList&L,inti,ElemType&e){LinkListp;LinkLi
此文档下载收益归作者所有