兰州大学数据结构课程设计4概要.docx
- 文档编号:2020112
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:18
- 大小:21.30KB
兰州大学数据结构课程设计4概要.docx
《兰州大学数据结构课程设计4概要.docx》由会员分享,可在线阅读,更多相关《兰州大学数据结构课程设计4概要.docx(18页珍藏版)》请在冰豆网上搜索。
兰州大学数据结构课程设计4概要
《数据结构》课程设计题目
(程序实现采用C语言)
题目1:
猴子选王(学时:
3)
一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求:
m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。
题目2:
字符逆转(学时:
3)
从键盘读入一个字符串,把它存入一个链表(每个结点存储1个字符),并按相反的次序将字符串输出到显示屏。
题目3:
工资核算(学时:
3)
设有一个单位的人员工资有如下信息:
name、department、basepay、allowance、total。
现从键盘输入一组人员工资数据并将它们存储到名为paydata的文件中;再从paydata取出工资数据并给每个人的basepay增加100元,增加后将工资数据显示于屏幕(每行1人)。
题目4:
满足条件的有序表生成(学时:
3)
已知三个有序表A、B、C,它们皆由同一类元素构成,现要求对于表A作以下运算而获得有序表D:
排出A中所有的既在B中又在C中出现的元素。
另外该任务要求具有建立有序表功能以及输出有序表到屏幕的功能。
题目5:
一元多项式的减法(学时:
6)
设有两个一元多项式A(x),B(x),请完成运算A(x)+B(x)、A(x)-B(x),要求多项式采用链表进行存储。
另外该任务要求具有建立多项式链表以及输出多项式到屏幕的功能。
题目6:
床位分配(学时:
6)
某客店有N个等级的房间,第k级客房有A(k)个,每个房间有B(k)个单人床,以菜单调用方式设计为单身旅客分配床位以及离店时收回床位的程序。
要求分配成功时,印出旅客姓名、年龄、性别、到达日期、客房等级、房间号及床位号;分配不成功时,允许更改房间等级,若不更改等级,印出“满客”提示。
题目7:
文本文件单词的检索及计数(学时:
6)
要求编程建立一个文本文件,每个单词不包括空格及跨行,单词由字符序列构成且区分大小写,完成以下功能:
统计给定单词在文本文件中出现的总次数、检索输出某单词在文本文件中首次出现的行号及位置。
题目8:
二叉树的遍历(学时:
6)
二叉树以lson-rson链接方式存储,以菜单方式设计并完成功能任务:
建立并存储树、输出前序遍历结果、输出中序遍历结果、输出后序遍历结果、交换左右子树、统计高度,其中对于中序、后序的遍历运算要求采用非递归方式。
题目9:
创建二叉排序树(学时:
3)
二叉排序树以lson-rson链接方式存储,编写能够通过键盘输入建立二叉排序树,并在建立完立即在屏幕显示中序遍历结果的程序。
题目10:
霍夫曼编码应用(学时:
3)
假设一串由大写字母构成的电文,采用霍夫曼规则对其进行编码,以菜单方式设计并完成功能任务:
建立霍夫曼树、霍夫曼编码生成、编码文件译码。
#include
#include
#include
#definen100
#definem2*n-1
typedefstruct//码结点的存储结构
{
charch;
charbits[9];
intlen;
}CodeNode;
typedefCodeNodeHuffmanCode[n+1];
typedefstruct//树结点的存储结构
{
intweight;
intlchild,rchild,parent;
}HTNode;
typedefHTNodeHuffmanTree[m+1];
intnum;
voidselect(HuffmanTreeHT,intk,int&s1,int&s2)//挑选权值最小的两个结点
{
inti,j;
intminl=32767;
for(i=1;i<=k;i++)
if(HT[i].weight { j=i; minl=HT[i].weight; } s1=j; minl=32767; for(i=1;i<=k;i++) if(HT[i].weight =s1) { j=i; minl=HT[i].weight; } s2=j; } intjsq(char*s,intcnt[],charstr[])//统计输入字符和串 { char*p; inti,j,k=0; inttemp[257]; for(i=0;i<257;i++) temp[i]=0; for(p=s;*p! ='\0';p++) temp[*p]++; for(i=0,j=0;i<=256;i++) if(temp[i]! =0) { j++; str[j]=i; cnt[j]=temp[i]; } num=j; returnj; } //建立霍夫曼树 voidchuffmanTree(HuffmanTree&HT,HuffmanCode&HC,intcnt[],charstr[]) { inti,s1,s2; for(i=1;i<=2*num-1;i++) { HT[i].lchild=0; HT[i].rchild=0; HT[i].parent=0; HT[i].weight=0; } for(i=1;i<=num;i++) HT[i].weight=cnt[i]; for(i=num+1;i<=2*num-1;i++) { select(HT,i-1,s1,s2); HT[s1].parent=i; HT[s2].parent=i; HT[i].lchild=s1; HT[i].rchild=s2; HT[i].weight=HT[s1].weight+HT[s2].weight; } for(i=1;i<=num;i++) HC[i].ch=str[i]; } //给霍夫曼树的每个叶子节点分配二进制代码 voidHuffmanEncoding(HuffmanTreeHT,HuffmanCodeHC) { intc,p,i; charcd[n]; intstart; cd[num]='\0'; for(i=1;i<=num;i++)//1到num为叶子节点,每个节点都有二进制编码串 { start=num; c=i; while((p=HT[c].parent)>0) { start--; cd[start]=(HT[p].lchild==c)? '0': '1'; c=p; } strcpy(HC[i].bits,&cd[start]); HC[i].len=num-start; } } voiddecode(HuffmanCodeHC,charreceive[],chars[])//译码 { charstr[268]; charcd[9]; inti,j,k=0,p=0,cjs; while(receive[p]! ='\0') { cjs=0; for(i=0;i ='\0';i++) { cd[i]=''; cd[i+1]='\0'; cd[i]=receive[p++]; for(j=1;j<=num;j++) if(strcmp(HC[j].bits,cd)==0) { str[k]=HC[j].ch; k++; cjs=1; break; } } } str[k]='\0'; strcpy(s,str); } voidcoding(HuffmanCodeHC,charstr[],charget[])//输出字符串的二进制编码 { inti,j=0; while(str[j]! ='\0') { for(i=1;i<=num;i++) if(HC[i].ch==str[j]) { strcat(get,HC[i].bits); break; } j++; } strcat(get,"\0"); } voidmain() { charstr[257];//str用于在统计输入序列中的字母时用,存放是什么字符,1到256 charst[10000],s[10000];//st用来接收输入的字符串,s用来接收解压的字符串 intcn[257];//cn用于接收统计后的每个字符的频率,1到256 HuffmanTreeHT; HuffmanCodeHC; charch='y';intd,i; printf("-------------------霍夫曼树------------------------\n\n"); printf("1.建立霍夫曼树.\n"); printf("2.生成霍夫曼编码.\n"); printf("3.编码文件译码.\n"); while(ch=='y') { printf("请选择: "); scanf("%d",&d); switch(d) { case1: printf("输入要编码的字符串: "); scanf("%s",&st); num=jsq(st,cn,str);//统计文件中的字符 str[num+1]='\0'; chuffmanTree(HT,HC,cn,str); printf("霍夫曼树建立成功! \n");//建立霍夫曼树 break; case2: HuffmanEncoding(HT,HC);//根据霍夫曼树建立霍夫曼编码 printf("建立霍夫曼编码如下\n共有%d种字符\n",num); for(i=1;i<=num;i++) printf("字符%c次数为%d,编码为%s\n",HC[i].ch,cn[i],HC[i].bits); charget[10000]; get[0]='\0'; coding(HC,st,get); printf("\n上述字符串的霍夫曼码为%s\n",get); //printf("编码效率为%f%%\n",code_ratio(st,cn,HC)); break; case3: printf("输入二进制码开始译码: "); charreceive[10000]; scanf("%s",&receive); decode(HC,receive,s);//译码 printf("译码为: %s\n",s); break; } printf("\n是否继续? (y/n): "); scanf("%c",&ch); scanf("%c",&ch); } } 题目11: 关键路径寻找(学时: 6) 对于给定的一个工程施工图,该图以边为单位从键盘输入,编写能够找出该图的关键路径的程序。 #include"stdi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 兰州大学 数据结构 课程设计 概要