桂电数据结构实验指导书.doc





《桂电数据结构实验指导书.doc》由会员分享,可在线阅读,更多相关《桂电数据结构实验指导书.doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、给大家的实验文档中分为一下几部分1.实验准备:请好好复习C语言,有时间也复习一下C+。2.c语言实验教案中是一些c语言的基础知识,包括VC环境的使用和程序的调试,希望对c语言已经忘记的同学好好看看复习一下。(程序的编写调试是长年累月的过程,需要不断的积累,写得多了,程序调试的多了,自然就熟练了)3.文件夹中还有一个名为“CodeBlocks使用简略教程.pdf”的文件,虽然大家对VC6比较熟悉,但是VC6毕竟比较老了,比起别的编译环境没有那么好用了,所以,还请大家学习一下CodeBlocks的使用。当然,实验时候的编译环境由大家自由选择,不强迫大家使用某种编译环境,只是希望大家能学习使用Cod
2、eBlocks而已,哈。4.对应的flash课件:其中是一些实验的flash课件演示,给大家做一下参考5.实验指导书和实验教案大家在做每个实验前都需要看看。阅读的时候,老版本word可以使用【视图】|【文档结构图】,可以比较自由跳到相应位置。如果是新点的word,通过“视图”选项卡,然后勾选“导航窗格”就可以了。6. 总体实验难度比较大,时间紧,单靠实验课上的几个学时,作为初学者是无法完成的,需要大家在课前课后尽自己最大的努力。7.每个实验的代码编写可以用c也可以用c+8. 文件夹中还有“数据结构实验报告模板v1.0”的文档,实验前做好预习,需要填写好该文档的部分内容,如果有代码,也请贴在其上
3、。实验结束后需要将该文档中的内容补充完整,并打印,于下次实验前交给班长,班长按照学号排好顺序后,下次实验交给实验老师。实验安排1、多项式加减法,2学时2、栈和队列的应用,2学时3、迷宫,4学时4、二叉树的建立和遍历,4学时5、排序,2学时6、图,2学时实验一 多项式加减法一、实验目的通过实现多项式的加减法,对链表有更深入的了解二、实验内容问题描述:设计一个一元稀疏多项式简单的加减法计算器实现要求:一元稀疏多项式简单计算器的基本功能是:(1)输入并建立多项式:;(2)输出多项式(3)多项式A和B相加,建立多项式CAB,并输出相加的结果多项式C(4)选作:多项式A和B相减,建立多项式CAB,并输出
4、相加的结果多项式D方法说明:(1)多项式的输入与存储用带表头结点的单链表存储多项式,链表中的每个节点分别存储多项式各项的系数和指数,即每从键盘输入多项式的一对数(系数,指数),可对应建立链表的一个结点。每个节点的结构为:Coef exp next建立两个链表,其中pa和pb分别为它们的头指针:9 8 3 17 0 4 -1Pa-9 2 8 13 -1pb结果链表Pa(或者是Pc)9 8 -9 211 17 0 7 -1Pc(2)多项式数据类型的定义struct tagNodefloat coef;int exp;struct tagNode *next;typedef struct tagNo
5、de Node;typedef struct tagNode* pNode;(3)主要算法创建两个链表,分别存放多项式1和多项式2,这两个链表中的节点是按指数降序或者升序排列的多项式相加或相减,下面给出多项式相加的部分实现/*下面的函数实现两个多项式的相加,要相加的链表分别由pa和pb指向(其中,pa,pb都是分配了空间的头结点)。相加的结果直接由pa指向的链表保存,即是在pa链表中添加或删除(当系数因为相加为0的情况下)一些结点,构成结果。这里要相加的链表中指数都是按从小到大的顺序排列好了的,是升序链表。*/void add_poly(Node *pa,Node *pb)Node *p=pa
6、-pNext;/链表1,将来的结果也放在此Node *q=pb-pNext;/链表2Node *pre=pa;Node *u;/临时用float x;while (p!=NULL & q!=NULL)/当两个链表都不为空if (p-expexp)/比较链表1跟链表2当前节点的指数大小,链表1也是存放结果的地方pre=p;p=p-pNext;/p指向要比较的下一个结点。pre指向的是结果链表的最后一个结点。else if (p-exp=q-exp)/假如链表1和链表2的指数相等,就要系数相加x=p-coef+q-coef;if (x!=0)/相加后的系数不为0,有必要保留一个结点就可以了p-co
7、ef=x;pre=p;else/如果相加后,系数不是0,不需要保留任何一个结点,在这里删除链表1的结点,下面删除链表2的结点pre-pNext=p-pNext;/保持链表1的连续性free(p);p=pre-pNext;/p指向要比较的下一个结点/下面的代码是进行链表2结点的删除工作,因为指数相等,仅仅需要保留一个结点就可以了/而结果直接保存在链表1中,所以,删除链表2的结点。u=q;q=q-pNext;free(u);else/如果链表2的当前节点指数小,那么要把链表2的当前节点加入到结果链表中(即是链表1)/相当于把结点插入到链表1中,用u作为临时变量,保存链表2的下一个当前节点的位置。u
8、=q-pNext;q-pNext=p;pre-pNext=q;pre=q;q=u;if (q)/如果链表2比链表1长,那么需要把链表2多余的部分加入结果链表中。链表1比链表2长,则什么都不用做。pre-pNext=q;free(pb);输出结果多项式实验二 栈和队列的应用一、实验目的1、掌握栈的编写和应用2、掌握队列的编写和应用二、实验内容1、分别使用STL中的栈和自己编写的栈类,实现序列的反转(1)简单修改下面代码,实现使用STL中的栈进行序列的反转,编译运行#include int main( )/* Pre: The user supplies an integer n and n de
9、cimal numbers.Post: The numbers are printed in reverse order.Uses: The STL class stack and its methods */int n;double item;stack numbers; / declares and initializes a stack of numberscout Type in an integer n followed by n decimal numbers. endl The numbers will be printed in reverse order. n;for (in
10、t i = 0; i item;numbers.push(item);cout endl endl;while (!numbers.empty( ) cout numbers.top( ) ;numbers.pop( );cout endl;提示:(1)由于程序是用了STL(标准模板库,可以简单的看成是一个函数库,在其中有各种有用的类、函数和算法),栈在其中有实现。栈在STL中的实现用到了类模板,也就是说其栈是独立于类型的,模板提供参数化类型,也就是能将类型名作为参数传递给接收方来建立类或函数。比如stack numbers;中就是声明了一个栈,这个栈中存放的数据类型为double。(2)要使
11、用c+的输入输出需要加上几行语句如下,因为cout和cin是在命名空间std中的:#include using namespace std;(2)自己编写程序实现栈该栈可以用链表实现,也可以用数组实现。C语言或者c+描述都可以。该实现的栈要求至少具有(1)压栈(2)出栈(3)判断栈是否空(4)取栈顶元素值等功能。如果用数组实现该栈,则该栈还需要具有下面函数(5)判断栈是否满(3)使用自己编写的栈,进行序列的反转2、自己编写程序,实现队列,并自己编写主程序测试该队列(选作)该队列可以使用链表实现,也可以使用数组实现,C语言或者c+描述都可以。实现队列后,再编写一个简单的主函数,测试自己编写的队列
12、的各个功能。要求:自己实现的队列至少需要有如下功能:(1)进队(2)出队(3)取队首元素(4)判断队列是否为空。如果是用数组实现的队列,至少还需要具有下面的函数(5)判断队列是否满附录:STL中栈的使用#pragma warning(disable:4786)#include #include using namespace std ;typedef stack STACK_INT;int main() STACK_INT stack1; cout stack1.empty() returned (stack1.empty()? true: false) endl; / Function 3
13、cout stack1.push(2) endl; stack1.push(2); if (!stack1.empty() / Function 3 cout stack1.top() returned stack1.top() endl; / Function 1 cout stack1.push(5) endl; stack1.push(5); if (!stack1.empty() / Function 3 cout stack1.top() returned stack1.top() endl; / Function 1 cout stack1.push(11) endl; stack
14、1.push(11); if (!stack1.empty() / Function 3 cout stack1.top() returned stack1.top() endl; / Function 1 / Modify the top item. Set it to 6. if (!stack1.empty() / Function 3 cout stack1.top()=6; endl; stack1.top()=6; / Function 1 / Repeat until stack is empty while (!stack1.empty() / Function 3 const
15、 int& t=stack1.top(); / Function 2 cout stack1.top() returned t endl; cout stack1.pop() 0 1 1 1 0 0 0 0 0 00 0 0 1 0 0 0 1 0 00 1 0 1 1 0 0 1 0 00 1 0 0 1 0 1 1 0 00 1 0 0 1 0 1 1 0 01 1 1 0 1 0 1 0 0 00 0 1 0 0 0 1 0 1 10 0 1 0 0 0 1 0 1 10 1 1 0 1 0 1 0 0 00 0 0 0 1 0 1 1 0 0 - EXIT下面是可能的路径(注意:从入口
16、到出口可能有多条路径,优先选择的方向不同,路径可能也不一样!) Path: ( maze00, maze10, maze11, maze12, maze22, maze32, maze33, maze43, maze53, maze63, maze64, maze65, maze55, maze45, maze35, maze25, maze26, maze16, maze06, maze07, maze08, maze18, maze28, maze38, maze48, maze58, maze57, maze67, maze77, maze87, maze88, maze89, maze
17、99)Enter- X 1 1 1 0 0 X-X-X 0X-X-X 1 0 0 X 1 X 00 1 X 1 1 X-X 1 X 00 1 X-X 1 X 1 1 X 00 1 0 X 1 X 1 1 X 01 1 1 X 1 X 1 X-X 00 0 1 X-X-X 1 X 1 10 0 1 0 0 0 1 X 1 10 1 1 0 1 0 1 X- X- X0 0 0 0 1 0 1 1 0 X - EXIT1、提示:(1)数据结构: 用二维数组MAZEm+2n+2表示迷宫的结构,数组中的值为1表示是墙,为0表示可以走通。(用MAZEm+2n+2而不用MAZEmn的原因在于想表示和编写代
18、码的时候简单些,而且让迷宫周围都是墙,防止错误的走出去) 用二维数组MARKm+2n+2表示迷宫是否被走过,主要是为了回溯时已经证明走不通的路线就不要再去走了。(用MARKm+2n+2而不用MARKmn的原因在于想表示和编写代码的时候简单些) 二维数据MOVE82是为了更方便的移动到下一步,改变坐标。这个二维数组是为了更好的转换坐标(八个方向,从0到7),而且也能避免重复走路 用栈保存走过的路径(2)输出: 迷宫布局,用0表示可以走通的地方,用1表示墙 如果能走通,则输出路径和路径的长度;若不能走通,则输出提示不能走通 带有路径的迷宫布局2、伪代码注意:下面的仅仅是伪代码!不能直接做代码使用的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 指导书

限制150内