




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录实验1 顺序表的应用2实验2 链表的应用5实验3 栈的应用6实验4 队列的应用7实验5 树的应用8实验6 图的应用9实验7 图的应用10实验8 查找与排序11实验1 顺序表的应用实验目的1 熟悉C语言的上机环境,掌握C语言的基本结构。2 会定义线性表的顺序存储结构。3 熟悉对顺序表的一些基本操作和具体的函数定义。4 掌握在线性表的顺序存储结构上的一些其它操作。实验要求1 独立完成;2 程序调试正确,有执行结果。实验内容1、基础题:编写应用程序(填空),实现可以在顺序表中插入任意给定数据类型(定义为抽象数据类型)数据的功能。要求在主函数中定义顺序表并对该顺序表插入若干个整数类型的数据(正整数),对它们求和并输出。请使用动态内存分配的方式申请数组空间,并把主函数设计为一个文件SeqList.cpp,其余函数设计为另一个文件SeqList.h。请填空完成以下给出的源代码并调试通过。(1) 文件SeqList.h:typedef struct List ElemType *list; int size; int MaxSize; SeqList;void InitList(SeqList &L) /初始化线性表 void ClearList(SeqList &L) /清除线性表 int LengthList(SeqList L) /求线性表长度.bool InsertList(SeqList &L, ElemType item, int pos) /按给定条件pos向线性表插入一个元素 .ElemType GetList(SeqList L, int pos) /在线性表L中求序号为pos的元素,该元素作为函数值返回. (2)文件SeqList.cpp:#include #include typedef ElemType;#define MAXSize 10#include SeqList.hvoid main(void)SeqList myList;int i=1, x, sum=0, n;InitList ( );scanf(“%d”, &x);while ( x!= -1 ) if ( InsertList (myList, , i )=0) printf(错误!n);return ; i+; scanf(“%d”, &x);n = LengthList (myList);for (i=1; i=n; i+)x=GetList(myList, i);sum = + x;printf(%dn , sum); ClearList(myList); 2、提高部分:编写函数bool DeleteElem(SeqList &L, int min, int max) 实现从顺序表中删除其值在给定值min和max之间(min 0) )按顺时针方向围坐一圈,每人持有一个正整数密码。开始时任意给出两个值:一个为首先报数的人的编号i (0i=n),另一个为起始报数上限值m。接着从编号为i的人开始按顺时针方向自1起顺序报数,报到m时停止报数,且报到m的人出列,并将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新自1报数,如此下去,直到所有人全部出列为止。要求设计一个程序模拟此过程,给出出列人的编号序列。基本要求:人数n、每人的正整数密码、首次报数人编号i、初始报数上限值m均由键盘输入。实验3 栈的应用实验目的1 会定义顺序栈和链栈的结点类型。2 掌握栈的插入和删除结点在操作上的特点。3 熟悉对栈的一些基本操作和具体的函数定义。实验要求1 独立完成;2 程序调试正确,有执行结果。实验内容1、 基础题:设栈采用顺序存储结构(用动态数组),请编写栈的各种基本操作的实现函数,并存放在头文件stack.h中。同时建立一个验证操作实现的主函数文件stack.cpp,编译并调试程序,直到正确运行。 提示: 栈的动态数组顺序存储结构可定义如下: struct Stack ElemType *stack ;/ 存栈元素 int top; / 栈顶指示器 int MaxSize; / 栈的最大长度 ; 栈的基本操作可包括: void InitStack (Stack &S); /构造一个空栈 S int EmptyStack (Stack S); /若栈S为空栈返回1,否则返回0 void Push(Stack &S, ElemType item); /元素 item进栈 ElemType Pop(Stack &S); /栈S的栈顶元素出栈并返回 ElemType Peek(Stack S); /取栈S的当前栈顶元素并返回 void ClearStack (Stack &S); /清除栈s,使成为空栈2、 应用题:写一函数,判断给定的字符串是否中心对称。如字符串“abcba”、“abccba”均为中心对称,字符串“abcdba”不中心对称。要求利用stack.h中已实现的有关栈的基本操作函数来实现。请把该函数添加到文件stack.cpp中的主函数前,并在主函数中添加相应语句进行测试。函数原型如下: int IsReverse(char *s) /判断字符串S是否中心对称,是返回1,否则返回0实验4 队列的应用实验目的1 掌握队列的存储结构及基本操作。2 掌握循环队列的设置及循环队列的各种基本操作的实现。3 通过具体的应用实例,进一步熟悉和掌握队列的实际应用。实验要求1 独立完成;2 程序调试正确,有执行结果。实验内容1、 基础题:建立头文件queue.h,定义顺序存储的循环队列存储结构,并编写循环队列的各种基本操作实现函数。同时建立一个验证操作实现的主函数文件queue.cpp,编译并调试程序,直到正确运行。 说明:队列的基本操作可包括: void InitQueue (Queue &Q); /构造一个空队列 Q int EmptyQueue (Queue Q); /判断队列Q是否为空,若空返回1,否则返回0 void EnQueue (Queue &Q, ElemType item); /元素 item 进队列Q ElemType OutQueue (Queue &Q); /队头元素出队列Q,并返回其值 ElemType PeekQueue (Queue Q); /返回队头元素值 void ClearQueue (Queue &Q); /清空队列2、 应用(选做部分):编写程序,实现舞伴问题:假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队,跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴,若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求设计一个函数void partner(),模拟上述舞伴配对问题。基本要求:1) 由键盘输入数据,每对数据包括姓名和性别;2) 输出结果包括配成舞伴的女士和男士的姓名,以及未配对者的队伍名称和队头者的姓名; 3) 要求利用queue.h中已实现的顺序循环队列的基本操作函数来实现。函数void partner() 添加到文件queue.cpp中,在主函数中进行调用测试。实验5 树的应用实验目的1 熟悉二叉树结点的结构和对二叉树的基本操作。2 掌握对二叉树每一种操作的具体实现。3 学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法。4 在二叉树基本操作的基础上掌握对二叉树的一些其它操作的具体实现方法。5 掌握构造哈夫曼树以及哈夫曼编码的方法。实验要求1 独立完成;2 程序调试正确,有执行结果。实验内容1、 基础题:建立头文件tree.h,在该文件中定义二叉树的链式存储结构,并编写二叉树的各种基本操作实现函数。同时建立一个验证操作实现的主函数文件tree.cpp,编译并调试程序,直到正确运行。注意,需要用到栈和队列的有关操作,可使用已编制过的栈和队列的基本操作文件stack.h、queue.h来实现。说明:二叉树的基本操作可包括:(1) void InitBTree( BTreeNode *&BT ) /初始化二叉树BT (2) void CreateBTree( BTreeNode *&BT, char *a ) /根据字符串a所给出的广义表表示的二叉树建立二叉链表存储结构 (3) int EmptyBTree( BTreeNode *BT) /检查二叉树BT是否为空,空返回1,否则返回0 (4) int DepthBTree( BTreeNode *BT) /求二叉树BT的深度并返回该值 (5) int FindBTree( BTreeNode *BT, ElemType x) /查找二叉树BT中值为x的结点,若查找成功返回1,否则返回0 2、提高部分:(6) void PreOrder( BTreeNode *BT) /先序遍历二叉树BT(7) void InOrder( BTreeNode *BT) /中序遍历二叉树BT(8) void PostOrder( BTreeNode *BT) /后序遍历二叉树BT(9) void LevelOrder( BTreeNode *BT ) /按层次遍历二叉树BT (10) void PrintBTree( BTreeNode *BT ) /输出二叉树BT (11) void ClearBTree( BTreeNode *&BT ) /清除二叉树BT实验6 图的应用实验目的1 掌握图的各种存储结构,特别要熟练掌握邻接矩阵和邻接表存储结构。2 遍历是图各种应用的算法的基础,要熟练掌握图的深度优先遍历和广度优先遍历算法,复习栈和队列的应用。实验要求1 独立完成;2 程序调试正确,有执行结果。实验内容(2选1)1、 图的邻接矩阵定义及实现:建立头文件AdjM.h,在该文件中定义图的邻接矩阵存储结构,并编写图的初始化、建立图、输出图、输出图的每个顶点的度等基本操作实现函数。同时建立一个验证操作实现的主函数文件AdjM.cpp(以下图为例),编译并调试程序,直到正确运行。01246532、图的邻接表的定义及实现:建立头文件AdjL.h,在该文件中定义图的邻接表存储结构,并编写图的初始化、建立图、输出图、输出图的每个顶点的度等基本操作实现函数。同时在主函数文件AdjL.cpp中调用这些函数进行验证(以下图为例)。001122334实验7 图的应用实验目的1.掌握以邻接矩阵作为存储结构的生成图的最小生成树的普里姆算法。2.掌握以邻接矩阵作为存储结构的生成图的最小生成树的克鲁斯卡尔算法。实验要求1 独立完成;2 程序调试正确,有执行结果。实验内容1、 编写用邻接矩阵表示无向带权图时图的基本操作的实现函数,主要包括:初始化邻接矩阵表示的无向带权图 void InitMatrix(adjmatrix G); 建立邻接矩阵表示的无向带权图 void CreateMatrix(adjmatrix G, int n) (即通过输入图的每条边建立图的邻接矩阵); 输出邻接矩阵表示的无向带权图void PrintMatrix(adjmatrix G, int n) (即输出图的每条边)。把邻接矩阵的结构定义以及这些基本操作实现函数存放在头文件Graph1.h中。2、 编写生成最小生成树的Prim算法函数 void Prim(adjmatrix G, edgset CT, int n) 以及输出边集数组的函数 void PrintEdge(edgeset CT, int n)。3、 编写测试程序(即主函数),通过调用上述函数首先建立并输出无向带权图,然后生成最小生成树并输出(即输出边集)。 要求:把边集数组的结构定义、Prim算法函数、输出边集数组的函数PrintEdge以及主函数存放在文件Gragh1.cpp中。测试数据如下:01235458123107629615实验8 查找与排序实验目的1 熟悉并掌握各种查找算法2 掌握排序的基本概念。3 熟
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度财务决算审计合同样本
- 广告租赁合同解除6篇
- 2025年营养师基础知识考核试卷:食品营养学知识试题
- 2025建筑工程施工专业分包合同示范文本
- 农田租赁合同标准范本下载
- 2025企业采购协议范本
- 公司预留股份协议6篇
- 2025年江西省房屋租赁合同范本
- 上海市高三物理力学综合测试题库
- 售后服务合同管理与风险防范
- 核桃肽粉生产技术规程(征求意见稿)编制说明
- 《储能技术》课件-3.各种类型的蓄能技术
- (2025)企业首席质量官培训考核试题(附含答案)
- 农业现代化种植技术培训课件
- 中城汽车(山东)有限公司审计报告
- 锂电池pack工厂安全培训课件
- 大学博士竞赛试题及答案
- 钢结构彩钢瓦施工工艺与技术交底
- 2025版煤矿安全规程宣贯培训课件
- 梁启超家教家风课件
- 第5课 我们说方言教学设计-2025-2026学年小学地方、校本课程浙教版(2024)人·自然·社会
评论
0/150
提交评论