《数据结构与算法(C语言版)》实验指导书(合集).docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《《数据结构与算法(C语言版)》实验指导书(合集).docx》由会员分享,可在线阅读,更多相关《《数据结构与算法(C语言版)》实验指导书(合集).docx(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、上机实验1多项式的数组表示及运算【实验目的】(1)学会用简单数据类型描述复合数据类型。(2)学会用数组来表示多项式。(3)学会建立新的数据结构。【实验内容】用数组来表示多项式,多项式表示为:Pn(X)= piXel + p2Xe2 + pmXemo其中,Pi是指数为ei的项的非零系数,且满足OW eie2 em= no为了方便计算 机实现多项式的存取,有多项式:F(x)=9x9+x8-7x6+4x3-25x+2将F(x)存入数组中,并在控制台显示。【实验步骤】(1)建立多项式项的数据结构,使用结构体来表示多项式的每一项。(2)定义多项式的数组,完成多项式的输入与输出。(3)代码实现。【参考源代
2、码】项的表示系数指数项的表示系数指数typedef struct int coef; int expn; polynomial;#include#define MAX 100多项式输入函数的声明多项式输出函数的声明void InputPolyO;void OutputPoIy(polynomial aPoly);polynomial aPolyMAX;void main()(InputPolyO;OutputPoly(aPoly);)void InputPolyO上机实验4二叉树的遍历【实验目的】(1)掌握指针变量的含义及使用方法。(2)熟悉二叉树结点的结构。(3)掌握二叉树每一种操作具体实现
3、的方法。(4)学会利用递归的方法实现二叉树的遍历算法。【实验内容】实现对二叉树的如下操作:(1)创立二叉树。(2)先序遍历二叉树。(3)中序遍历二叉树。(4)后序遍历二叉树。(5)按层遍历二叉树。要求能够从键盘上输入建树的结点内容,并且将遍历的结果输出在屏幕上。【实验步骤】(1)在Microsoft Visual C+中创立应用程序L4。(2)在程序中创立二叉树的存储结构BiTNode,以链表作为存储结构。(3)创立CreateBiTree()函数,实现创立二叉树的操作,能够按先序次序从键盘输入结 点内容,空格表示空树。(4)创立PreOrderTraverse。函数,用递归的方法实现先序遍历
4、二叉树的操作。(5)创立InOrdeiTraverse。函数,用递归的方法实现中序遍历二叉树的操作。(6)创立PostOrdeiTraverse()函数,用递归的方法实现后序遍历二叉树的操作。(7)创立LevelOrderTraverse。函数,实现按层遍历二叉树的操作。(8)创立主函数,用switch语句实现从键盘上输入字符,选择要执行的操作。(9)编译连接程序,执行并观察程序的运行效果。【参考源代码】#include stdlib.h#include nstdio.hntypedef struct BiTNodechar data;struct BiTNode *lchild,*rchil
5、d;BiTNode,* BiTree;void CreateB iTree(B iTree &T)/按先序次序输入,构造二叉链表表示的二叉树T,空格表示空树char ch;scanf(H%cn,&ch);if(ch=p T=NULL;elseif (!(T=(BiTNode*)malloc(sizeof(BiTNode) exit(-l);T-data=ch;CreateBiTree(T-lchild);CreateBiTree(T-rchild);)/CreateBiTreevoid PreOrderTraverse(B iTree T) 先序遍历if(T)printfC%c n,T-dat
6、a);PreOrderTraverse(T-lchild);PreOrderTraverse(T-rchild);)/PreOrderTra versevoid InOrderTraverse(BiTree T) 中序遍历if(T)InOrderTraverse(T-lchild);printf(u%c n,T-data);InOrderTraverse(T-rchild);) /InOrderTraversevoid PostOrderTraverse(BiTree T) 后序遍历if(T)PostOrderTraverse(T-lchild);PostOrderTraverse(T-rch
7、ild);printf(n%c n,T-data);) /PostOrderTraversevoid LevelOrderTraverse(B iTree T) 按层遍历const int MaxLength=100;BiTree QMaxLength|;QO=T;int front=0,rear=l; while(frontdata); Q rear+=Q front -lchild; Q rear+=Q front -rchild; front+4-;) else front+;) /Level OrderTraversevoid main()(BiTree T=NULL;char sel
8、ect;while(l)printf(请选择要执行的操作:nn);printf(l .创立二叉树 n)printf(“2.二叉树的递归遍历算法(前、中、后)n”);printf(3.二叉树的层序遍历算法n);printf(0 .退出 n); fflush(stdin);scanf(n%cn,&select);fflush(stdin); switch(select) (case *0*:return;case T:printf(”请按先序次序输入各结点的值,以空格表示空树(输入时可连续输入):nn);CreateBiTree(T);printf(nnM);break;case 2:printf
9、(先序遍历PreOrderTraverse(T);printf(n 中序遍历:);InOrderTraverse(T);printf(n 后序遍历PostOrderTraverse(T);printf(HnnH);break;case 3:printf(层序遍历LevelOrderTraverse(T);printf(Hnnn);break;default:printf(请确认选择项八nn);/end switch/end while/end main【实验结果】运行例如:构建如下二叉树,并且将其遍历的结果输出在屏幕上。步骤1:输入1,按Enter键,等待创立二叉树。步骤2:按先序方式构建二叉
10、树,输入:abd(空两格)e(空两格)c(空两格),按Enter键确认 输入。步骤3:输入2,按Enter键,观察显示结果。步骤4:输入3,按Enter键,观察显示结果。步骤5:输入0,退出循环程序。运行结果如附图4所示。要执行的操作二叉2愧序遍历:a b d e c 中任遍历:d b e a c 后序遍历:d e b c a精选岑 k .创缸 卡.二叉机的递归遍历 5 .二叉树的层序遍历1(刖、礼后)中、后)cr C:INDOSsyste-32cd. exe附图4上机实验4运行结果作 操 的一tW层 执见的的 要二M g叉叉出 选创二二退 f - - - L 二12303后中一层 执叉的的
11、要二作 操 的g叉叉出 选创二二退 请1.B.3.S;历历 遍遍 归序常选接要执丘的操作:k创硅二叉树,,二叉狗的襦归遍历篡花(前、中、后)藤叉树的层序遍历算法按先序次序输入各结点的值,以空格表示空树输入时可连续输入): abd e c(前、历历 遍遍【实验总结】在创立二叉树时应注意程序的编写,在参考程序中,使用空格来表示空树、所以在创立 时,如果结点的子树为空时,一定要输入空格,方能成功创立二叉树。当然,也可用其他的 字符(如“肥)代替空格表示空树,但是一定要在程序中进行相应的编写与说明。参考程序中,在主程序中先创立了一个空树T,然后调用CreateBiTree()创立二叉树,由 于T需要在
12、后面进行遍历,它的内容要求是可以返回的,所以必须使用引用调用,在创立 CreateBiTree。时应注意形参的设置。编程时尤其应注意scanf()函数的c “格式带来的缓冲区的问题,因为使用 c “格式接收 的是字符,空格和转义字符都为有效字符。而创立二叉树时,完成输入后有一个回车操作表 示结束输入、创立完成,这个时候一定不要忘了使用“fflush(stdin); ”语句来清空缓冲区,否 那么会将回车符作为一个字符接收,这样可能会造成后续程序出问题。建议使用scanf()函数的 “c”格式接收一个字符时,要在其后加上“fflush(stdin); ”语句,这样能防止问题的出现。但 在参考程序中
13、,CreateBiTree。函数中的scanf()后并没有“fflush(stdin); ,这样做是为了能连 续从键盘获取字符,并且把空格也作为字符接收,但是在完成创立后,后面的scanf()函数在 接收字符前必须使用“fflush(stdin); ”完成缓冲区的清空操作。上机实验6哈夫曼编码【实验目的】(1)熟悉哈夫曼树的存储结构。(2)掌握哈夫曼树构建的算法。(3)掌握哈夫曼树的遍历方法。(4)掌握哈夫曼编码算法。【实验内容】实现哈夫曼编码算法:根据给定的权值数组,构建带权路径长度最小的哈夫曼树,然后 输出对应的哈夫曼编码。【实验步骤】(1)在Microsoft Visual C+中创立应
14、用程序L6。(2)在程序中定义哈夫曼树的存储结构tnodepointer。(3)编写函数select。,实现在给定的n个元素的结点数组中,找出权值最小的两个元素, 返回其下标。(4)编写huffmancoding。,实现构建哈夫曼树,并返回哈夫曼编码。(5)编写哈夫曼编码的输出函数output。(6)编写主函数,初始化结点的权值数组,调用huffmancoding()函数,输出哈夫曼编码。(7)编译连接程序,执行并观察程序的运行效果。【参考源代码】#include #include #include typedef struct哈夫曼树结点的类型int weight,parent,lchild
15、,rchild; tnode,tnodepointer;void select(tnodepointer HT,int n,int &sl,int &s2)在数组HT的前n个parents的元素中,找出权最小的两个元素并将其下标分别赋给si、 s2int i;sl=0;for(i=0;in&HTi.parent !=0;i+)略过已经加入树的结点sl=i+l;for(i=0;in;i+)用s 1保存权最小的元素的下标if(HTi. weightHTs 1. weight&HTi .parent=0)sl=i;s2=0;for(i=0;in&(s2=sl |HTi,parent !=0);i+)
16、 s2 = i+1;for(i=0;in;i+)用s2保存权次小的元素的下标if(HTi.weightweight =*w;TEMP-parent = 0;TEMP-lchild = 0;TEMP-rchild = 0; ) for(intm=2*n-l;TEMPparent =0;for(int i=n;i2*n-l;i+)/设置各个结点的值,构建哈夫曼树( int sl,s2; select(HT,i,sl,s2); /在数组HT的前n个parent=0的元素中,找出权最小的两个 元素并将其下标分别赋给si、s2HTsl.parent =i;HTs2.parent =i;HTi.lchil
17、d =sl;HTi.rchild =s2;HTi.weight =HTsl.weight +HTs2.weight;)char *str=(char *)malloc(n*sizeof(char);/str用于临时存放哈夫曼编码char *huffmancode=(char *)maUoc(n*sizeof(char *);for(int i=0;in;i+)构建哈夫曼编码int start=n-1;strstart=,O,;int c=i,temp=HTc.parent;t em p=0表示该结点为根结点t em p=0表示该结点为根结点while(temp!=O)if(HTtemp.lch
18、ild =c)str-start=O;elsestr-start-T;c=temp;temp=HTc.parent;huffmancodei=(char*)malloc(n-start)*sizeof(char); strcpy(huffmancodei,&strstart);)free (HT);free(str);return huffmancode;void output(char *p,int n)void output(char *p,int n)输出数组p中各元素指向的字符串for(int i=0;in;i+)printf(n%s n,pi);printf(nnn);void ma
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构与算法C语言版 数据结构 算法 语言版 实验 指导书
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内