数据结构实验报告三线性表的链式存储.docx
《数据结构实验报告三线性表的链式存储.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告三线性表的链式存储.docx(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验报告三 线性表的链式存储班级: 2010XXX 姓名: HoogLe 学号: 2010XXXX 专业: XXXX 一、 实验目的:(1) 掌握单链表的基本操作的实现方法。(2) 掌握循环单链表的基本操作实现。(3) 掌握两有序链表的归并操作算法。二、 实验内容:(请采用模板类及模板函数实现)1、线性表链式存储结构及基本操作算法实现实现提示 (同时可参见教材p64-p73页的ADT描述及算法实现及ppt)函数、类名称等可自定义,部分变量请加上学号后3位。也可自行对类中所定义的操作进行扩展。所加载的库函数或常量定义:#include using namespace std;(1)单链表存储结构
2、类的定义:templateclass LinkListpublic:LinkList(); /初始化带头结点空单链表构造函数实现LinkList(T a,int n);/利用数组初始化带头结点的单链表构造函数实现LinkList();int length(); /求单链表表长算法T get(int i); /获得单链表中第i个结点的值算法int locate(T temp);void insert(int i,T temp); /在带头结点单链表的第i个位置前插入元素e算法T Delete(int i); /在带头结点单链表中删除第i个元素算法void print(); /遍历单链表元素算法b
3、ool isEmpty(); /判单链表表空算法void deleleAll(); /删除链表中所有结点算法(这里不是析构函数,但功能相同)private:Node *head;(2)初始化带头结点空单链表构造函数实现输入:无前置条件:无动作:初始化一个带头结点的空链表输出:无后置条件:头指针指向头结点。/初始化带头结点空单链表构造函数实现templateLinkList:LinkList()head = new Node;head-next = NULL;()利用数组初始化带头结点的单链表构造函数实现输入:已存储数据的数组及数组中元素的个数前置条件:无动作:利用头插或尾插法创建带头结点的单链
4、表输出:无后置条件:头指针指向头结点,且数组中的元素为链表中各结点的数据成员。/利用数组初始化带头结点的单链表构造函数实现templateLinkList:LinkList(T a,int n) head=new Node; head-next=NULL; for (int i=0; in; i+) Node *s=new Node; s-data=ai; s-next=head-next; head-next=s;()在带头结点单链表的第i个位置前插入元素e算法输入:插入位置i,待插入元素e前置条件:i的值要合法动作:在带头结点的单链表中第i个位置之前插入元素e输出:无后置条件:单链表中增加
5、了一个结点 /在带头结点单链表的第i个位置前插入元素e算法templatevoid LinkList:insert(int i,T temp)Node *p = head;int count = 0;while (p&countnext;count+;if (p=NULL) couti不合法,越界!;elseNode *s = new Node;s-data = temp;s-next = p-next;p-next = s;()在带头结点单链表中删除第i个元素算法输入:删除第i个结点,待存放删除结点值变量e前置条件:单链表不空,i的值要合法动作:在带头结点的单链表中删除第i个结点,并返回该结
6、点的值(由e传出)。输出:无后置条件:单链表中减少了一个结点 /在带头结点单链表中删除第i个元素算法templateT LinkList:Delete(int i)Node *p = head;int count = 0;while(p&countnext;count+;if (p=NULL) couti不合法,越界!;elseNode *s = p-next;T x= s-data;p-next = s-next;return x;()遍历单链表元素算法输入:无前置条件:单链表不空动作:遍历输出单链表中的各元素。输出:无后置条件:无/遍历单链表元素算法templatevoid LinkLis
7、t:print()Node *p = head-next;while(p)coutdatanext;coutendl;()求单链表表长算法。输入:无前置条件:无动作:求单链表中元素个数。输出:返回元素个数后置条件:无/求单链表表长算法templateint LinkList:length()Node *p = head;int count = 0;while(p)p=p-next;count+;return -count;()判单链表表空算法输入:无前置条件:无动作:判表是否为空。输出:为空时返回,不为空时返回0后置条件:无/判断非空templatebool LinkList:isEmpty(
8、) Node *p = head-next; if (p) return true; else return false;()获得单链表中第i个结点的值算法输入:无前置条件:i不空,i合法动作:找到第i个结点。输出:返回第i个结点的元素值。后置条件:无/获得单链表中第i个结点的值算法templateT LinkList:get(int i)Node *p = head;int count = 0;while(p&countnext;count+;if (p=NULL) coutdata;(10)删除链表中所有结点算法(这里不是析构函数,但功能相同)输入:无前置条件:单链表存在动作:清除单链表中
9、所有的结点。输出:无后置条件:头指针指向空/删除所有元素templatevoid LinkList:deleleAll()Node *p = head;while (p)Node *t=p;p=p-next;t-next=NULL; (11)上机实现以上基本操作,写出main()程序:参考p72void main()int a10=1,2,3,4,5,6,7,8,9,0;/测试带参数的构造函数(前端插入!)LinkList list1(a,10);/测试插入if (list1.isEmpty() cout链表不为空!endl;else cout链表为空!endl; list1.print();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 线性 链式 存储
限制150内