太原理工数据结构实验答案.docx
- 文档编号:29979555
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:26
- 大小:164.65KB
太原理工数据结构实验答案.docx
《太原理工数据结构实验答案.docx》由会员分享,可在线阅读,更多相关《太原理工数据结构实验答案.docx(26页珍藏版)》请在冰豆网上搜索。
太原理工数据结构实验答案
实验一线性表
一.目的与要求
本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。
要求仔细阅读并理解下列例题,上机通过,并观察其结果,然后独立完成后面的实习题。
二.例题
问题描述:
用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。
输入:
初始字符串,插入位置,插入字符,删除字符。
输出:
已建立链表(字符串),插入字符后链表,删除字符后链表,逆转后链表。
存储结构:
采用链式存储结构
算法的基本思想:
建立链表当读入字符不是结束符时,给结点分配存储空间,写数据域,将新结点插到表尾;插入字符:
根据读入的字符在链表中找插入位置,将新结点插入到该位置之前;删除字符:
根据读入的删除字符在链表中找到被删结点后,将其从链表中删除;链表逆转:
从链表的第一个结点开始对所有结点处理,将每个结点的前驱变为它的后继;打印链表:
从链表的第一个结点开始,依次打印各
[运行情况]
Inputalinktable(astring):
abcde↙
Buildlinkis:
abcde
Pleaseinputacharyouwanttoinsertafter:
b↙
Pleaseinputacharyouwanttoinsert:
c↙
Afterpinserty,linkis:
abccde
Pleaseinputacharyouwanttodelete:
e↙
afterdeletep,linkis:
abccd
Opsiteresultis:
dccba
如图显示:
实习题:
问题描述:
设顺序表A中的数据元素递增有序,试写一程序,将x插入到顺序表的适当位置上,使该表仍然有序。
输入:
插入前的顺序表,插入的数,插入后的顺序表
输出:
插入前的顺序表,插入的数,插入后的顺序表
存储结构:
顺序表存储数据
算法基本思想:
其实这个题在学C语言时就已经写过了,这里采用顺序表来存储数据。
主要就是考虑插入的位置是不是在最后一个,如果不在最后一个,那么就要移动数据了,算法很简单就不再说了,这里的数据都看成是整型的。
源程序:
#include
#include
voidInsert(int*p,intlength,intn){
inti,j;
intflag=0;
if(n>=p[length-1]){
p[length]=n;
flag=1;
}
else{
for(i=length-2;i>=0;i--){
if(n>=p[i]){
for(j=length;j>=i+2;j--){
p[j]=p[j-1];}
p[i+1]=n;
flag=1;
break;
}
}
}
if(flag==0){
for(j=length;j>=1;j--){
p[j]=p[j-1];
}
p[0]=n;
}
}
intmain(){
intL[10]={2,5,8,11,14,17,20};
intlength=7;
inti,x;
printf("charuqiandeshunxubiaowei:
\n");
for(i=0;i printf("%4d",L[i]); } printf("\nqingshuruyaocharudezhengshu: \n"); scanf("%d",&x); Insert(L,length,x);//插入x printf("charu%dhoudeshunxubiaowei: \n",x); for(i=0;i<=length;i++){ printf("%4d",L[i]); } printf("\n"); system("pause"); return0; } 运行情况: charuqian 136891015 charudeshu 3 charuhou 1336891015 如图显示: 程序的优缺点: 本程序可以快速的做完实验的问题,并且看是简单很明了,插入的位置如果是最后一个,如果不在最后一个,那么就要移动数据了 实验二树 一.目的与要求 熟悉树的各种表示方法和各种遍历方式,掌握有关算法的实现,了解树在计算机科学及其它工程技术中的应用。 二.例题 [问题描述] 任意给定一棵二叉树。 试设计一个程序,在计算机中构造该二叉树,并对它进行遍历。 [输入] 一棵二叉树的结点若无子树,则可将其子树看作“.”,输入时,按照前序序列的顺序输入该结点的内容。 对下图,其输入序列为ABD..EH...CF.I..G..。 [输出] 若为空二叉树,则输出: THISISAEMPTYBINARYTREE。 若二叉树不空,按后序序列输出,对上例,输出结果为: DHEBIFGCA。 [存储结构] 采用二叉链表存储。 [算法的基本思想] 采用递归方法建立和遍历二叉树。 首先建立二叉树的根结点,然后建立其左右子树,直到空子树为止。 后序遍历二叉树时,先遍历左子树,后遍历右子树,最后访问根结点。 运行情况: pleaseinputatree: ABD..EH...CF.I..G.. ABD..EH...CF.I..G.. theresultofposttraveseis: DHEBIFGCA 如图显示: 实习题 问题描述: 编写递归算法,计算二叉树中叶子结点的数目。 分析: 这题主要是怎样计算叶子结点数目,其它的算法书上都有。 要注意叶子结点是指该结点既没有左孩子又没有右孩子,采用递归算法就很容易计算出其数目,详见源程序。 输入: 按先序序列输入二叉树ABC..D..EF.G... 输出: 输出二叉树的个数为3 存储结构: 采用二叉链表存储。 源程序: }#include #include #include structnode{ charinfo; structnode*llink,*rlink; }; typedefstructnodeNODE; NODE*creat(){ charx; NODE*p; scanf("%c",&x); printf("%c",x); if(x! ='.'){ p=(NODE*)malloc(sizeof(NODE)); p->info=x; p->llink=creat(); p->rlink=creat(); } else p=NULL; returnp; } voidcountleaf(NODE*t,int&count){ if(t){ if((! t->llink)&&(! t->rlink)) count++; countleaf(t->llink,count); countleaf(t->rlink,count); } } intmain(){ inte=0; NODE*T; printf("qingshuruerchashu"); T=creat(); printf("\n"); countleaf(T,e); printf("%d\n",e); system("PAUSE"); } 运行情况: anxianxushuruerchashu ABC..D..EF.G... churuerchashudegeshu3 如图显示: 问题描述: 编写递归算法,在二叉树中求位于先序序列中第K个位置的结点。 输入: 按线序序列输入二叉树ABC..D..EF.G...与K 输出: 按先序序列输出第K结点数C 存储结构: 采用二叉链表存储。 源程序: #include #include #include structnode{ charinfo; structnode*llink,*rlink; }; typedefstructnodeNODE; NODE*creat(){ charx; NODE*p; scanf("%c",&x); printf("%c",x); if(x! ='.'){ p=(NODE*)malloc(sizeof(NODE)); p->info=x; p->llink=creat(); p->rlink=creat(); } else p=NULL; returnp; } voidrun(NODE*t,intK){ staticinti=1; if(t){ run(t->llink,K); run(t->rlink,K); if(i++==K) printf("%c",t->info); } } main(){ NODE*T; intK; chare; printf("PLeaseinputatree: \n"); T=creat(); printf("\n"); if(! T) printf("Thisisaemptybinarytree."); else { printf("请输入序号"); scanf("%d",&K); printf("Theresultofposttraveseis: \n"); run(T,K); } printf("\n"); system("PAUSE"); } 运行情况: anxianxushuruerchashu ABC..D..EF.G... shuruKdezhi 3 xianxuxuliediKjiedianshuC 如图显示: 程序优缺点: 可以简单明了的运用,一目了然的看出。 但是必须要是先序序列输入才可以。 太原理工大学 《数据结构》实验 实验三图 一.目的与要求 熟悉图的存储结构,掌握有关算法的实现,了解图在计算机科学及其他工程技术中的应用。 二.例题 [问题描述] 给定一个图,设计一个程序,找出一条从某一顶点A到另一顶点B边数最少的一条路径。 [输入] 图的顶点个数N,图中顶点之间的关系及要找的路径的起点A和终点B。 [输出] 若A到B无路径,则输出“Thereisnopath”,否则输出A到B路径上各顶点。 [存储结构] 图采用邻接矩阵的方式存储。 [算法的基本思想] 采用广度优先搜索的方法,从顶点A开始,依次访问与A邻接的顶点VA1,VA2,...,VAK,访问遍之后,若没有访问B,则继续访问与VA1邻接的顶点VA11,VA12,...,VA1M,再访问与VA2邻接顶点...,如此下去,直至找到B,最先到达B点的路径,一定是边数最少的路径。 实现时采用队列记录被访问过的顶点。 每次访问与队头顶点相邻接的顶点,然后将队头顶点从队列中删去。 若队空,则说明到不存在通路。 在访问顶点过程中,每次把当前顶点的序号作为与其邻接的未访问的顶点的前驱顶点记录下来,以便输出时回溯。 [参考源程序] 运行情况: Pleaseinputn: 3 Pleaseinputnodelist[i][j] 010 001 101 List-linkisbulit 010 001 101 Pleaseinputa: 1 Pleaseinputb: 2 2<-1 如图显示: 太原理工大学 实验四查找 1.目的与要求 通过本次实验,掌握查找表上的有关查找方法,并分析时间复杂度。 二.例题 问题描述: 将折半查找算法写成完整的程序,并上机通过。 输入: 有序表(12,23,28,35,37,39,50,60,78,90)及待查找记录23,58。 输出: 输入23,表中存在待查找记录,则显示该记录在表中位置2,输入58显示该记录不存在。 存储结构: 有序表采用顺序方式存储。 算法的基本思想: 首先用待查找记录与查找区间中间位置记录比较,若相等则查找成功,返回该记录在表中的位置数,若小于中间位置记录,则修改区间上界为中间位置减1,若大于中间位置记录,则修改区间下界为中间位置加1,在新的区间内继续查找。 当查找区间下界大于上界,则该记录不存在。 [参考源程序] 运行情况: Pleaseinputn: 10 Pleaseinputdata: 122328353739 Thetableisbuilted. Pleaseinputyouwantfindvalue: 23 Find23inposition2. 如图显示: 实习题 问题描述 编写程序实现下面运算在二叉排序树中查找关键字为key的记录。 输入: 在多少个数据中进行查数前输入一个整数【1】前输入一个整数【2】前输入一个整数【3】查找的数 输出: 输出序列表输出查找的数在表中的位置 分析: 这题所有的算法书上都有。 存储结构: 有序表存储 源程序: #include #include #defineN21 main(void) { inta[N]; inti,n,num; intlow,high,mid; intflag=1; intloc=-1; printf("nixiangzaiduoshaogeshuzhongjingxingzhebanchazhao: "); scanf("%d",&n); while(n<1||n>20) { printf("nishurudeshubuzhengque,qingchongxinshuru。 \n"); printf("nixiangzaidoushaogeshuzhongzhebanchazhao,qingshuru(1--20): "); scanf("%d",&n); } printf("qingshuruyigezhengshua[1]: "); scanf("%d",&a[1]); i=2; while(i<=n) { printf("qingshuruyigezhengshua[%d]: ",i); scanf("%d",&a[i]); if(a[i]>a[i-1]) i++; else printf("nishurudeshubumanzhuyaoqiu,qingchongxinshuru。 \n"); } printf("\nshuchuliebiao\n"); for(i=1;i<=n;i++) { printf("%6d",a[i]); } printf("\n"); printf("qingshuruyaochazhaodeshu: "); scanf("%d",&num); flag=1; high=n; low=1; mid=(high+low)/2; while(flag) { printf("high=%d,low=%d,mid=%d,a[%d]=%d\n",high,low,mid,mid,a[mid]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太原理工 数据结构 实验 答案