欢迎来到天天文库
浏览记录
ID:12128570
大小:631.00 KB
页数:12页
时间:2018-07-15
《顺序表的定义及基本操作》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、顺序表的定义及基本操作一、实验目的、意义(1)掌握线性表顺序存储结构的特点。(2)熟练掌握顺序表的基本运算,理解用它们表示时插入与删除操作的算法。(3)加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能力二、实验内容及要求说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。具体要求:建立顺序表,完成顺序表的基本操作:初始化、插入、删除、输出(遍历
2、)、销毁,置空表、求表长、查找元素、判线性表是否为空等。(参见教材19页)实验提示:(1)定义顺序表:SqList,完成顺序表的基本操作,生成头文件SqList.h。参考运行界面:三、实验所涉及的知识点数据结构、C语言语法函数、指针、数组、循环语句等。四、实验结果及分析(所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图方式给出。)121212五、总结与体会(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。)调试程序时,出现了许多错误。如:头结点的建立出错、
3、忽略了创建释放节点,另外还有一些语法上的错误。单单排查错误就用满了实验课的时间,课上未完成。后来经过查阅教材,浏览网页等方式,才完成试验。这次试验出现错误最重要的原因就是对课本知识点理解不深刻以及编写代码时的粗心。以后要都去练习、实践,完善自己的不足之处。六、程序清单(包含注释)#include#include#includeinttemptag=0;typedefintElemType;typedefstructLNode//定义单链表结点
4、类型{ElemTypedata;structLNode*next;}LinkList;voidInitList(LinkList*&L)//初始化链表{L=(LinkList*)malloc(sizeof(LinkList));//创建头结点L->next=NULL;printf("初始化链表成功!");}voidDestroyList(LinkList*&L)//销毁链表,也就是释放内存{LinkList*p=L,*q=p->next;while(q!=NULL){free(p);p=q;q=
5、p->next;}free(p);12}intListLength(LinkList*L)//输出链表的长度{LinkList*p=L;inti=0;while(p->next!=NULL){i++;p=p->next;}return(i);}voidDispList(LinkList*L)//显示链表的数据{printf("链表中的数据如下:");LinkList*p=L->next;while(p!=NULL){printf("%d",p->data);p=p->next;}printf("
6、");}intGetElem(LinkList*L,inti,ElemType&e)//获取链表中的任意位置的元素。但是不能越界{intj=1;LinkList*p=L->next;while(jnext;}if(p==NULL)return0;else{e=p->data;return1;}}intListInsert(LinkList*&L,inti,ElemTypee)//插入新的节点12{intj=0;LinkList*p=L,*s;while
7、(jnext;}if(p==NULL)//未找到第i-1个结点{printf("未找到第%d个节点!",(i-1));return0;}else//找到第i-1个结点*p{s=(LinkList*)malloc(sizeof(LinkList));//创建新结点*ss->data=e;s->next=p->next;//将*s插入到*p之后p->next=s;return1;}}intListDelete(LinkList*&L,inti)//删除
8、相应位置的节点{intj=0;LinkList*p=L,*q;while(jnext;}if(p==NULL)//未找到第i-1个结点return0;else//找到第i-1个结点*p{q=p->next;//q指向要删除的结点if(q==NULL)return0;//e=q->data;p->next=q->next;//从单链表中删除*q结点free(q);//释放*q结点return1;}}voidjiangxu(
此文档下载收益归作者所有