2022年2022年静态链表 .pdf
《2022年2022年静态链表 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年静态链表 .pdf(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第页,共14 页1 兰州城市学院实验报告院、系:信息工程学院姓名白丽丽学号20070801050101 专业、班级计算机科学与技术071 本课程名称数据结构及算法实验室名称微机实验室实验名称静态链表存储结构及其实现日期、时间2009 年 12 月 10 日同组者无天气晴气压室(气)温实验报告内容:1实验目的本次实验的主要目的是: ( 1)理解静态链表的概念; (2)掌握静态链表存储结构的特点和数据结构的定义; (3)熟练掌握静态链表的基本操作的实现;(4)通过静态链表实际应用,提高学生分析和解决实际问题的能力。2实验内容( 1)掌握静态链表存储结构的初始化(InitList ) 、清空( Cl
2、earList ) 、判空( ListEmpty ) 、求长度(ListLength ) 、 查询(LocateElem ) 、 插入( ListInsert ) 、 删除(ListDelete) 、 前驱(PriorElem ) 、后继( NextElem) 、输出( ListTraverse )等基本操作。( 2)主控程序设计;3实验要求( 1)各基本操作设计要求如下:void InitList(SLinkList L) 功能:产生空的静态链表L。Status ListEmpty(SLinkList L) 功能:若L 为空表,则返回OK,否则返回ERROR int ListLength(D
3、uLinkList L)功能:返回L 中数据结点个数。Status ListInsert(SLinkList L,int i,ElemType e) 功能:在L 中第 i 个元素之前插入新的数据元素e。Status GetElem(SLinkList L,int i,ElemType &e) 功能:用e返回 L 中第 i 个元素的值。Status PriorElem(SLinkList L,ElemType cur_e,ElemType &pre_e) 功能:若cur_e 是 L 的数据结点,且不是第一个,则用pre_e 返回它的前驱,否则操作失败, pre_e 无定义。Status Next
4、Elem(SLinkList L,ElemType cur_e,ElemType &next_e) 功能: 若 cur_e 是 L 的数据元素, 且不是最后一个,则用 next_e 返回它的后继, 否则操作失败, next_e 无定义。Status ListTraverse(SLinkList L,void(*vi)(ElemType) 功能:依次对L 的每个数据元素调用函数vi()。一旦 vi() 失败,则操作失败。Status ListTraverseBack(SLinkList L,void(*vi)(ElemType) 功能:逆序对L 的每个数据元素调用函数vi()。一旦 vi() 失
5、败,则操作失败。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - 第页,共14 页2 Status ListDelete(SLinkList L,int i,ElemType &e) 功能:删除在L 中第 i 个数据元素e,并返回其值int LocateElem(SLinkList L,ElemType e) 功能:在静态单链线性表L 中查找第 1 个值为 e 的元素。若找到,则返回它在L 中的位序,否则返回0。Status C
6、learList(SLinkList L) 功能:将L 重置为空表。4实验程序清单#include #include #include #include #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemT ype; #define MAXSIZE 100 / 链表的最大长度typedef struct ElemType data; int cur; component,SLinkListMAXSIZE;void InitList(SLinkList L) int i; LMAXSIZE-1.cur=0; for(
7、i=0;iMAXSIZE-2;i+) Li.cur=i+1; LMAXSIZE-2.cur=0; int Malloc(SLinkList space) / 若备用链表非空,则返回分配的结点下标(备用链表的第一个结点),否则返回0 int i=space0.cur; if(i) / 备用链表非空space0.cur=spacei.cur; / 备用链表的头结点指向原备用链表的第二个结点return i; / 返回新开辟结点的坐标 void Free(SLinkList space,int k) / 将下标为k 的空闲结点回收到备用链表(成为备用链表的第一个结点) spacek.cur=spac
8、e0.cur; / 回收结点的游标指向备用链表的第一个结点space0.cur=k; / 备用链表的头结点指向新回收的结点 Status ClearList(SLinkList L) / 初始条件:线性表L 已存在。操作结果:将L 重置为空表名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 14 页 - - - - - - - - - 第页,共14 页3 int i,j,k; i=LMAXSIZE-1.cur; / 链表第一个结点的位置LMAXSIZE-1.cur=0; /
9、 链表空k=L0.cur; / 备用链表第一个结点的位置L0.cur=i; / 把链表的结点连到备用链表的表头while(i) / 没到链表尾 j=i; i=Li.cur; / 指向下一个元素 Lj.cur=k; / 备用链表的第一个结点接到链表的尾部return OK; Status ListEmpty(SLinkList L) / 若 L 是空表,返回TRUE;否则返回FALSE if(LMAXSIZE-1.cur=0) / 空表return OK; else return ERROR; int ListLength(SLinkList L) / 返回 L 中数据元素个数int j=0,i
10、=LMAXSIZE-1.cur; / i指向第一个元素while(i) / 没到静态链表尾 i=Li.cur; / 指向下一个元素j+; return j; Status GetElem(SLinkList L,int i,ElemType &e) / 用 e 返回 L 中第 i个元素的值int l,k=MAXSIZE-1; / k指向表头序号if(iListLength(L) return ERROR; for(l=1;l=i;l+) / 移动到第i个元素处k=Lk.cur; e=Lk.data; return OK; int LocateElem(SLinkList L,ElemT ype
11、 e) / / 在静态单链线性表L 中查找第 1 个值为 e 的元素。若找到,则返回它在L 中的/ 位序,否则返回0。 (与其它LocateElem()的定义不同 ) int i=LMAXSIZE-1.cur; / i指示表中第一个结点名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 14 页 - - - - - - - - - 第页,共14 页4 while(i&Li.data!=e) / 在表中顺链查找(e不能是字符串) i=Li.cur; return i; Stat
12、us PriorElem(SLinkList L,ElemType cur_e,ElemT ype &pre_e) / 初始条件:线性表L 已存在/ 操作结果:若cur_e 是 L 的数据元素,且不是第一个,则用pre_e返回它的前驱,/ 否则操作失败,pre_e 无定义int j,i=LMAXSIZE-1.cur; / i指示链表第一个结点的位置do / 向后移动结点j=i; i=Li.cur; while(i&cur_e!=Li.data); if(i) / 找到该元素 pre_e=Lj.data; return OK; return ERROR; Status NextElem(SLin
13、kList L,ElemT ype cur_e,ElemType &next_e) / 初始条件:线性表L 已存在/ 操作结果:若cur_e 是 L 的数据元素,且不是最后一个,则用next_e返回它的后继,/ 否则操作失败,next_e 无定义int j,i=LocateElem(L,cur_e); / 在 L 中查找第一个值为cur_e的元素的位置if(i) / L 中存在元素cur_e j=Li.cur; / cur_e的后继的位置if(j) / cur_e 有后继 next_e=Lj.data; return OK; / cur_e元素有后继 return ERROR; / L不存在c
14、ur_e元素 ,cur_e 元素无后继 Status ListInsert(SLinkList L,int i,ElemType e) / 在 L 中第 i 个元素之前插入新的数据元素e int l,j,k=MAXSIZE-1; / k指向表头if(iListLength(L)+1) return ERROR; j=Malloc(L); / 申请新单元if(j) / 申请成功名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 14 页 - - - - - - - - - 第页
15、,共14 页5 Lj.data=e; / 赋值给新单元for(l=1;li;l+) / 移动 i-1 个元素k=Lk.cur; Lj.cur=Lk.cur; Lk.cur=j; return OK; return ERROR; Status ListDelete(SLinkList L,int i,ElemT ype &e) / 删除在 L 中第 i 个数据元素e,并返回其值int j,k=MAXSIZE-1; / k指向表头if(iListLength(L) return ERROR; for(j=1;j=1;i-) vi(Li.data); return OK; void visit(El
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年静态链表 2022 静态
限制150内