![[工学]数据结构试验.doc_第1页](http://file.renrendoc.com/FileRoot1/2019-1/8/07e7d220-fc86-401b-b553-671187af7531/07e7d220-fc86-401b-b553-671187af75311.gif)
![[工学]数据结构试验.doc_第2页](http://file.renrendoc.com/FileRoot1/2019-1/8/07e7d220-fc86-401b-b553-671187af7531/07e7d220-fc86-401b-b553-671187af75312.gif)
![[工学]数据结构试验.doc_第3页](http://file.renrendoc.com/FileRoot1/2019-1/8/07e7d220-fc86-401b-b553-671187af7531/07e7d220-fc86-401b-b553-671187af75313.gif)
![[工学]数据结构试验.doc_第4页](http://file.renrendoc.com/FileRoot1/2019-1/8/07e7d220-fc86-401b-b553-671187af7531/07e7d220-fc86-401b-b553-671187af75314.gif)
![[工学]数据结构试验.doc_第5页](http://file.renrendoc.com/FileRoot1/2019-1/8/07e7d220-fc86-401b-b553-671187af7531/07e7d220-fc86-401b-b553-671187af75315.gif)
已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.1验证性实验实验一 单链表操作验证题目:单链表操作验证1实验目的(1)掌握线性表的链接存储结构;(2)验证单链表及其基本操作的实现;(3)进一步掌握数据结构及算法的程序实现的基本方法。2实验内容(1)用头插法(或尾插法)建立带头结点的单链表;(2)对已建立的单链表实现插人、删除、查找等基本操作。3实现提示首先,将单链表中的结点定义为如下结构类型: template struct Node T data; Node *next; ;其次,定义单链表的数据类型单链表类LinkList,包括题目要求的插人、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出单链表的元素。 templateclass T class LinkList public: LinkList(T a ,int n); /建立有n个元素的单链表 LinkList( ); /析构函数 void Insert(int i,T x); /在单链表中第i个位置插入元素值为x的结点 T Delete(int i); /在单链表中删除第i个结点 int Locate(T x); /求单链表中值为x的元素序号 void PrintList(); /遍历单链表,按序号依次输出各元素 private: NodeT*first; /单链表的头指针 ;再次,设计单链表类LinkList的构造函数和析构函数。用头插法或尾插法建立单链表。头插法建立单链表的算法如下: 头插法建立单链表temlate LinkList:LinkList(T a,int n) first=new Node; first-next=NULL; /初始化一个空链表 for(i=0;in;i+) s=new Node; s-data=ai; /为每个数组元素建立一个结点 s-next=first-next;/插入到头结点之后 first-next=s;析构函数用于释放单链表中所有结点,算法如下:单链表的析构函数算法LinkListtemplate : LinkList() p=first; /工作指针P初始化 while(p) /释放单链表的每一个结点的存储空间 q=p; /暂存被释放结点p=p-next; /工作指针P指向被释放结点,使单链表不断开delete q;最后,对所建立的单链表设计插人、删除、查找等基本操作的算法。(l)插人算法 单链表插人算法Insert template void LinkList:Insert(int i,T x) p=first;j=0; /工作指针P初始化 while (p & jnext; /工作指针P后移 j+;if (! p) throw“位置”;else s=new Node; s-data=x; /向内存申请一个结点s,其数据域为x s-next=p-next;/将节点s插入到结点p之后 p-next=s;(2)删除算法单链表的删除算法DeleteTemplateT LinkList:Delete(int i) p=first ;j=0;/工作指针p初始化 While (p & jnext; j+; if ( ! p | | ! p-next) throw“位置”; /结点p不存在或结点p的后继结点不存在 else q=p-next; x=q-data; /暂存被删结点 p-next=q-next; /摘链 delete q; return x; (3)查找算法单链表查找算法Locatetemplate int LinkList:Locate(T x) p=first-next; j=1; while(p & p-data!=x) p=p-next; /工作指针p后移 j+; if (p) return j; else return 0;4.实验程序/以下为头函数,文件名为LinkList.hifdef LinkList_Hdefine LinkList_Htemplateclass Tstruct NodeT data;Node *next; /此处也可以省略;template class LinkListPublic:LinkList(T a,int n); /建立有n个元素的单链表LinkList(); /析构函数void Insert(int i, T x); /在单链表中第i个位置播入元素为x的结点T Delete(int i); /在单链表中删除第i个结点int Locate(T x); /求单链表中值为x的元素序号void PrintList(); / 遍历单链表,按序号依次输出各元素private:Node *first; /单链表的头指针;endif/以下为头函数LinkList.h中LinkList类的成员函数按规定定义,文件名为LinkList.cppincludeLinkListhtemplate LinkList:LinkList(T a,int n) Node * first; firstnew Node; first-nextNULL; /初始化一个空链表 for(int i0;in; i) Node *s;s=new Node; s-data=ai; /为每个数组元素建立一个结点s-next=first-next; /插入到头结点之后 first-nexts; template LinkList:LinkList() Nodenext; /工作指针P指向被释放结点的下一个结点,/使单链表不断开delete q;template void LinkList:Insert(int i,T x) Node *p; int j; pfirst;j=0; /工作指针p初始化while(P & jnext; /工作指针P后移 j; if(!p) throw”位置”, else Node *s; snew Node; s-data = x; /向内存申请一个结点:,其数据域为x s-nextp-next; /结点s插人到结点p之后 P-next=s; template T LinkList:Delete(int i) Node *p;int j; P=first;j0; /工作指针P初始化 while (p“jnext; j; if(!P|!P-next) throw“位置”;/结点P不存在或结点P的后继结点不存在else Node *q;int x; qp-next; x=q- data; /暂存被删结点 p- next=q-next; /摘链 delete q; return x; template int LinkList:Locate(T x) Node,p;int j; p=first-next;j=1; while(p & p-data!=x) p=p-next; j+; if(p) return j; else return 0;template void LinkList:PrintList() Node *p; p=first-next; while (p) coutdatanext; /以下为主函数include /引用输入输出流库函数的头文件using namespace std;include”LinkList.cpp” /引用单链表类的声明和定义void main() int r=1,2,3,4,5; LinkList a(r,5); cout ”执行插人操作前数据为:” endl; a. PrintList(); /显示链表中所有元素 try a.Insert(2,5); catch(char *s) coutsendl; cout”执行插人操作后数据为:”endl; a. PrintList(); /显示链表中所有元素 cout”值为5的元素位置为:”; cout a.Locate(5)endl; /查找元素5,并返回在单链表中位置 cout”执行删除操作前数据为:”endl; a.PrintList(); /显示链表中所有元素 try a.Delete(1); /删除元素4 catch(char *s) coutsendl; cout ”执行删除操作后数据为:” endl; a.PrintList(); /显示链表中所有元素 思考题:为单链表的结点设计一个结点类,重新实现单链表基本操作的验证。实验二 二叉树操作验证题目:二叉树操作验证1.实验目的(1)掌握二叉树的逻辑结构(2)掌握二叉树的二叉链表存储结构;(3)掌握基于二叉链表存储的二叉树的遍历操作的实现。2.实验内容(1) 建立一棵含有n个结点的二叉树,采用二叉链表存储;(2) 前序(或中序、后序)遍历该二叉树。3.实现提示二叉链表的结点结构如图所示。lchilddatarchild图 二叉树的结点结构二叉链表的结点用C+中的结构类型描述为: template struct BiNode T data; BiNode * lchild,*rchild; ; 设计实验用二叉链表类BiTree,类中包含遍历操作。 template class BiTree public: BiTree(BiNode *root);/有参构造函数,初始化一棵二叉树,/其前序序列由键盘输入 BiTree(); /析构函数,释放二叉链表中各结点的存储空间 void PreOrder(BiNode *root);/前序遍历二叉树 void InOrder(BiNode *root);/中序遍历二叉树 void PostOrder(BiNode T *root); /后序遍历二叉树 private: BiNodeT *root; /指向根结点的头指针 void Creat(BiNode *root); /有参构造函数调用 void Release(BiNode*root); /析构函数调用 ;设计构造函数,建立一棵二叉树的二叉链表存储。将二叉树中每个结点的空指针引出一个虚结点,其值为一特定值如,以标识其为空,把这样处理后的二叉树称为原二叉树的扩展二叉树。扩展二叉树的一个遍历序列就能惟一确定一棵二叉树。假设扩展二叉树的前序遍历序列由键盘输人,root为指向根结点的指针,二叉链表的建立过程是:首先输人根结点,若输人的是一个字符,则表明该二叉树为空树,即root =NULL;否则输人的字符应该赋予root -data,之后依次递归建立它的左子树和右子树。建立二叉链表的递归算法如下:二叉树的构造函数算法BiTreetemplateBiTree
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电视台主持人口试指南预测试题及答案解读
- 电仪安全基础知识培训
- 2025年仓库安全员必-备知识面试模拟题及答案
- 赫初可颜眼部护理误区
- 制作风筝教学课件
- 信息化交流教学课件
- 田径安全知识培训内容课件
- 单词教学主题课件下载
- 贵州省毕节市2024-2025学年高二下学期期末考试化学试题(含答案)
- 新解读《GB-T 18916.37 - 2018取水定额 第37部分:湿法磷酸》
- 年产2000吨电子级超高纯石英晶体材料制造项目环评报告表
- 2025重庆对外建设集团招聘41人笔试参考题库附带答案详解(10套)
- 2025年秋季开学第一次全体教师大会上校长讲话-:想为、敢为、勤为、善为
- 面点摆盘造型技术
- 2025年e答网护士三基考试试题及答案
- 《无人机飞行控制技术》全套教学课件
- 2025年教育管理领导力案例分析试题及答案
- 信息平台造价管理办法
- DG-TJ08-2202-2024 建筑信息模型技术应用标准(城市轨道交通)
- 2025年度学校国际交流合作计划
- 2025年注册土木工程师专业基础考试题(附答案)
评论
0/150
提交评论