




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一 实验名称:一元多项式相加(报告中浅蓝色的为修改或补充功能的代码)实验目的:练习并掌握如何使用c语言实现链表的说明、创建以及结点的插入和删除等操作。实验要求:能实现一元多项式的输入、输出,以及两个一元多项式相加及结果显示。实验内容:首先定义一个一元多项式的链表结构体,然后创建初始化链表函数initlink()、创建一个非空链表函数creatlink()、求链表长度函数length()、显示链表函数display()、比较指数函数cmpexpn()和两个一元多项式相加函数addployn()留待在主函数中调用。在主函数中,首先定义需要的整数和整数数组、浮点数和浮点数数组和三个链表(本实验程
2、序实现的就是c=a+b),初始化这三个链表,然后分别输入这两个一元多项式的项数、每项的系数和指数,利用creatlink()函数将这两个一元多项式的项数和每项的系数、指数分别装进链表a和b,然后将链表a和b存储的链式结构数据显示出来,最后调用addployn()函数将两个链表中的数相加得到相加后的一元多项式,并显示出来。实验程序代码及运行结果:实验程序代码:#include#include#includestdafx.h#include #define null 0/*定义一元多项式的链表结构体*/typedef struct lnode float num; int expn; struct
3、 lnode *next;*linklist,lnode;/*创建一个空链表*/linklist initlink() linklist p; p=(lnode*)malloc(sizeof(lnode); p-next=null; return p;/*创建一个非空链表*/linklist creatlink(linklist p,float a,int b,int n) linklist r,s; int i; r=p; for(i=0;inum=ai; s-expn=bi; r-next=s; r=s; r-next=null; return p;/*求链表的长度*/int length
4、(linklist p) int n=0; linklist q=p-next; while(q!=null) n+; q=q-next ; return n;/*显示链表*/void display(linklist p) int n=length(p),i; linklist q=p-next; if(n=0) printf(the polymial is nulln); else if(n=1) printf(%3.1f%3d,q-num,q-expn); else for(i=1;i,q-num,q-expn); q=q-next; printf(%3.1f%3d,q-num,q-ex
5、pn); printf(n);/*比较指数*/int cmpexpn(int expn1,int expn2) if(expn1expn2) return -1; else if(expn1=expn2) return 0; else return 1;/*两个一元多项式相加*/linklist addpolyn(linklist ha,linklist hb,linklist hc) linklist la,lb,lc,r; float sum; la=ha-next; lb=hb-next; lc=hc; while(la & lb) switch (cmpexpn(la-expn,lb-
6、expn) case -1: r=(lnode*)malloc(sizeof(lnode); r-num=lb-num; r-expn=lb-expn; lc-next=r; lc=r; r-next=null; lb=lb-next; break; case 0: sum=la-num+lb-num; if(sum!=0) r=(lnode*)malloc(sizeof(lnode); r-num=sum; r-expn=la-expn; lc-next=r; lc=r; r-next=null; la=la-next; lb=lb-next; else la=la-next; lb=lb-
7、next; break; case 1: r=(lnode*)malloc(sizeof(lnode); r-num=la-num; r-expn=la-expn; lc-next=r; lc=r; r-next=null; la=la-next; break; while(la) r=(lnode*)malloc(sizeof(lnode); r-num=la-num; r-expn=la-expn; lc-next=r; lc=r; r-next=null; la=la-next; while(lb) r=(lnode*)malloc(sizeof(lnode); r-num=lb-num
8、; r-expn=lb-expn; lc-next=r; lc=r; r-next=null; lb=lb-next; return lc;/*对链表进行排序*/linklist sortpolyn(linklist l) /此函数支持对乱序输入的多项式进行排序并且可以将同一个多项式中相同指数的项合并,实验结果请看最后一个截图 linklist p,q,r; for(p=l-next;p!=null;p=p-next) for(q=p-next;q!=null;q=q-next) if(p-expnq-expn) r=(lnode*)malloc(sizeof(lnode); r-num=p-
9、num; r-expn=p-expn; p-num=q-num; p-expn=q-expn; q-num=r-num; q-expn=r-expn; r-next=null; if(p-expn=q-expn)sum=p-num+q-num; if(sum!=0) p-num=sum; q-num=null; return l;/*主函数*/void main() int len1,len2; int i,n,a2100,b2100; float m,a1100,b1100; linklist a,b,c; a=initlink(); b=initlink(); c=initlink();
10、printf(please input polynomial as length:n); scanf(%d,&len1); printf(please input polynomial as num and expn:n); for(i=0;ilen1;i+) scanf(%f,&m); scanf(%d,&n); a1i=m; a2i=n; printf(please input polynomial bs length:n); scanf(%d,&len2); printf(please input polynomial bs num and expn:n); for(i=0;ilen2;
11、i+) scanf(%f,&m); scanf(%d,&n); b1i=m; b2i=n; creatlink(a,a1,a2,len1);creatlink(b,b1,b2,len2);sortpolyn(a);sortpolyn(b); printf(the polynomial a is;n); display(a); printf(the polynomial b is;n); display(b); addpolyn(a,b,c); printf(the polynomials result is;n); display(c);运行结果如下三个图所示:实验二实验名称:栈的基本操作(报
12、告中浅蓝色的为修改或补充功能的代码)实验目的:掌握栈的结构特点并熟悉栈的基本操作。实验要求:编程实现顺序栈的各种基本运算,并在此基础上设计一个主程序完成如下功能(两个选一个):1、 采用链式存储实现栈的初始化、判空、入栈、出栈操作。2、 采用顺序存储实现栈的初始化、判空、入栈、出栈、求栈的长度操作。实验内容:首先定义一个栈结构,然后定义判断输入的数据非法问题的函数judgedata()、初始化栈函数initstack()、入栈函数push()、出栈函数pop()、显示栈顶函数peek()、显示栈中所有元素函数displaystack()、判断栈空函数emptystack()、清空栈函数clea
13、rstack()留待在主函数中调用。在主函数中,首先定义一个栈并且初始化栈,然后输入5个入栈元素,显示这5个入栈的元素,然后再输入一个入栈的元素,显示这个元素入栈后的栈顶,接着弹出栈中的两个元素,最后在显示栈中剩下的元素后清空栈。实验程序代码及运行结果:实验程序代码:#include stdafx.h#include#includeusing namespace std;typedef int elemtype;/*定义一个栈结构*/struct stackelemtype *stack;int top;int maxsize;/*判断输入的数据是否非法*/int judgedata()cha
14、r c100;judge:cinc; if(c0=-|c0=0&c0=9)for(int i=1;ci!=0;i+)if(ci9)cout您输入的数据非法!endl;cout请重新输入合法类型数据:;goto judge;return atoi(c);elsecout您输入的数据非法!”endl;cout请重新输入合法类型数据:;goto judge;/*栈的初始化*/void initstack(stack &s)s.maxsize=10;s.stack=new elemtypes.maxsize;if(!s.stack)cerr动态存储分配失败!endl;exit(1);elsecout栈
15、初始化成功!endl;s.top=-1;/*入栈操作*/void push(stack &s,elemtype item)if(s.top=s.maxsize-1)int k=sizeof(elemtype);s.stack=(elemtype *)realloc(s.stack,2*s.maxsize*k);s.maxsize=2*s.maxsize;s.top+;s.stacks.top=item;coutitem 入栈成功endl;/*出栈操作*/elemtype pop(stack &s)if(s.top=-1)cerrstack is empty!endl;exit(1);s.top
16、-;return(s.stacks.top+1);/*显示栈顶元素*/void peek(stack &s)if(s.top=-1)cerrstack is empty!endl;exit(1);cout栈顶元素为:s.stacks.topendl;/*显示栈中的所有元素*/void displaystack(stack s)if(s.top=-1)cout栈为空!endl;exit(1);else cout栈中所有元素为:endl;while(s.top!=-1)coutpop(s) ;coutendl;/*判断栈空*/void emptystack(stack &s)if(s.top=-1
17、)cout栈已为空!endl;elsecout栈不为空!endl;/*清空栈*/void clearstack(stack &s)if(s.stack)delete s.stack;s.stack=null;s.top=-1;s.maxsize=0;cout清空栈成功!endl;/*主函数*/int main(int argc, _tchar* argv) /修改后的主函数能够支持操作者选择要进行的操作,实验结果请看倒数两个截图int n,select;stack s;initstack(s);cout select:1-初始化栈;2-入栈操作;3-出栈操作;4-显示所有元素;5-显示栈顶元素
18、;6-清空栈endl;while(1)cout请输入下面要进行的操作,对应地选择1-6的一个值: select;switch(select)case 1:initstack(s);break;case 2:cout请依次输入入栈的个数n:n;cout请依次输入入栈的n个元素:endl; for(int i=0;in;i+) push(s,(elemtype)judgedata();break;case 3:cout栈顶元素 pop(s) 出栈成功! endl;break;case 4:displaystack(s);break;case 5:peek(s);break;case 6:clear
19、stack(s);break;default:return 0;break;return 0;运行结果如下三个图所示:实验三 实验名称:排序、查找的应用实验目的:学会如何应用排序算法和查找算法实现排序、查找。实验要求:先从键盘上输入26个字母生成无序数组,对数组进行排序,再从键盘输入一个字符进行查找。实验内容:跟前面程序一样,首先需要定义在主函数中需要调用的函数:结构体sequelist、冒泡排序函数bubblesort()、折半查找函数binsearch()和打印输出元素函数printlink();在主函数中,首先定义需要用到的整数、字符和顺序表l,然后输入26个字符(注意在编写输入字符的个
20、数时加上空格号,实际上输入了27个字符,所以for语句的结束句应该是i27),然后调用冒泡排序函数并显示排序后的字符,接着输入一个字符,调用折半查找函数找到这个字符在这组字符中的位置,如果这组字符中没有这个字符,给出提示。实验程序代码及运行结果:实验程序代码:#include stdafx.h#include#include#define max 50typedef char datatype;typedef struct /定义结构体sequelistdatatype datamax;int length;sequelist;sequelist *initist(sequelist *l)
21、/顺序表的初始化l=(sequelist *)malloc(sizeof(sequelist);l-length=-1;return l;sequelist *bubblesort(sequelist *l) /冒泡排序int i,j;datatype temp;for(i=0;ilength;i+)for(j=i+1;jlength;j+)if(l-datail-dataj)temp=l-datai;l-datai=l-dataj;l-dataj=temp;return l;int binsearch(sequelist *l,datatype k) /折半查找int low=0,high=
22、l-length-1,mid;while(lowdatamid=k)return mid;else if(l-datamidk)high=mid-1;elselow=mid+1;return -1;void printlist(sequelist *l) /打印输出元素int i;for(i=0;ilength;i+)printf(%c ,l-datai);printf(n);int main() int i,t=0; datatype cc;sequelist *l;l=(sequelist *)malloc(sizeof(sequelist); l=initist(l);l-length=
23、26;printf(请输入26个字符:n);for(i=0;idatai);l=bubblesort(l);printf(此组字符排完序后为:n); printlist(l);printf(请输入要查找的字符:n); scanf(%c,&cc); t=binsearch(l,cc)+1;if(t=0) printf(此顺序表中没有该字符!n);else printf(此字符在顺序表中的第%d个位置n,t);return 0;运行结果如下三个图所示:实验四 实验名称:huffman 编码实验目的:了解前缀编码的概念,理解数据压缩的基本方法; 掌握huffman编码的设计思想并能熟练应用。实验要求
24、:对有字符集a,b,c,d,各字符在电文中出现的次数集为1,3,4,7;要求编程实现huffman树的构造,并在此基础上编程实现huffman编码。实验内容:本实验的程序依然跟前面的程序一样,定义调用的函数,然后再主函数中调用。而本实验中是先定义主函数然后再定义调用函数,这两者顺序颠倒没有影响。首先说一下,定义的调用函数有生成哈夫曼树函数creathuffmantree()、哈夫曼编码函数huffmancoding()、printhuffmancode()和选择权值最小的两个结点的函数select()。然后再主函数中,先定义哈夫曼树ht、哈弗曼编码表hc、叶子节点数和存放叶子节点权值;然后给出
25、一个使用说明(这里使用有字符集a,b,c,d,各字符在电文中出现的次数集为1,3,4,7为例来引导读者怎样使用本程序来实现哈夫曼编码);接着输入需要进行编码的字符个数和每个字符的权值,然后调用定义好的函数来实现输入字符的哈夫曼编码并显示出来。实验程序代码及运行结果:实验程序代码:#include stdafx.h#include #include #include #include #include #include#includeusing namespace std;typedef struct /定义哈夫曼树 int weight; /结点权值 int parent,lchild,rch
26、ild; /结点的父指针,左右孩子指针htnode,*huffmantree;typedef char *huffmancode; /数组存储哈弗曼编码表void createhuffmantree(huffmantree &,unsigned int*,int ); /生成哈夫曼树void huffmancoding(huffmantree,huffmancode &,int ); /哈夫曼树编码void printhuffmancode(huffmancode,unsigned int*,int); /显示编码结果void select(huffmantree,int,int&,int&)
27、; /在数组中寻找权值最小的两个结点void main()huffmantree ht; /哈夫曼树hthuffmancode hc; /哈弗曼编码表hcint n,i; /n是哈夫曼树叶子节点数unsigned int *w; /w存放叶子结点权值couthuffman编码使用说明endl ; /使1用?说明cout例如:输入需要进行编码的字符个数:4endl;cout然后输入每个字符的权值(整数):endl;cout例如:1 3 4 7 endl;cout则构造一棵哈夫曼书,哈弗曼编码如下endl;cout1-110endl 3-111endl4-10endl7-0endl;printf(
28、请输入需要进行编码的字符个数:);scanf(%d,&n); w=(unsigned int*)malloc(n*sizeof(unsigned int);printf(输入每个字符的权值(整数):n);for(i=0;in;i+) scanf(%d,&wi); /输入个字符出现的次数/权值createhuffmantree(ht,w,n); /生成哈夫曼树huffmancoding(ht,hc,n); /进行哈夫曼编码printhuffmancode(hc,w,n); /显示哈弗曼编码void createhuffmantree(huffmantree &ht,unsigned int *w
29、,int n)/构造哈夫曼树int i,m;int s1,s2;huffmantree p;if(n=1) return;m=2*n-1; /n个叶子节点共需2*n-1个结点ht=(huffmantree)malloc(m+1)*sizeof(htnode); /开辟空间for(p=ht+1,i=1;iweight=*w;p-parent=0;p-lchild=0;p-rchild=0; for(;iweight=0;p-parent=0;p-lchild=0;p-rchild=0; for(i=n+1;i=m;+i) /建哈夫曼树 select(ht,i-1,s1,s2); hts1.parent=i; hts2.parent=i; /修改s1和s2结点的父指针parent hti.lchild
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业人力资源管理创新实践指南
- 二手家具销售合同标准文本
- 老年阅读“适老化”实施方案分析
- ktv所有合同标准文本
- 七年级生物下册 4.14.2 保护生物圈是全人类的共同义务教学设计 北师大版
- 1990施工合同标准文本
- 果蔬消毒柜市场趋势与未来发展潜力分析
- 企业产品运输合同样本
- 22《为中华之崛起而读书》教学设计-2024-2025学年语文四年级上册统编版
- 中介厂房居间合同样本
- 2025年上海嘉定区江桥镇企业服务有限公司招聘笔试参考题库附带答案详解
- 合作合同模板
- 学校保洁方案
- 罗明亮小数的意义课件
- 2025中国冶金地质总局总部招聘笔试考点考试题库答案及解析
- 2025高职单招考试(语文)试题(附答案)
- 胰岛素泵护理管理规范
- 硅pu球场施工方案
- 企业数据资产入表流程研究
- 9.1.1 西亚 第1课时 课件 七年级地理下册 人教版
- 校外培训机构预收费资金托管协议书范本
评论
0/150
提交评论