数据结构作业答案大连理工大学.docx
- 文档编号:9059069
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:18
- 大小:20.48KB
数据结构作业答案大连理工大学.docx
《数据结构作业答案大连理工大学.docx》由会员分享,可在线阅读,更多相关《数据结构作业答案大连理工大学.docx(18页珍藏版)》请在冰豆网上搜索。
数据结构作业答案大连理工大学
作业1.线性表
编程作业:
1.将次序表逆置,要求用最少的附带空间。
参照答案
#include<>
#include<>
#include<>
#define
LIST_INIT_SIZE
100
#define
LISTINCREMENT
10
#define
TRUE
1
#define
FALSE
0
#define
OK
1
#define
ERROR
0
#define
INFEASIBLE
-1
#define
OVERFLOW
-2
typedefintStatus;
typedefintElemType;
typedefstruct
{ElemType*elem;intlength;
intlistsize;
}SqList;
立单链表
");
printf("2.
取元素值
");
printf("3.
查找
\n");
printf("4.
插入
");
printf("5.
删除
");
printf("6.
显示\n");
printf("7.
删除大于mink且小于maxk的元素值
");
printf("8.
就地升序排序\n");
printf("9.
就地逆置
");
printf("a.
有序表插入
");
printf("q.
退出\n");
printf("\n
请选择操作:
");
fflush(stdin);
scanf("%c",&choice);
switch(choice)
{
case'1':
printf("请输入单链表中结点个数:
");scanf("%d",&n);
Create_L2(L,n);
break;
case'2':
printf("请输入元素位序:
");
scanf("%d",&i);
GetElem_L(L,i,e);
printf("元素值为:
%d\n",e);
break;
case'3':
printf("请输入要查找的元素:
");
scanf("%d",&e);
if(dlbcz(L,e))
printf("查找成功!
");
else
printf("查找失败。
");
break;
case'4':
printf("请输入插入地点:
");
scanf("%d",&i);
printf("请输入要插入的元素:
");
scanf("%d",&e);
if(ListInsert_L(L,i,e))
printf("插入成功!
单链表为:
");
else
printf("插入失败。
");
break;
case'5':
printf("请输入删除地点:
");
scanf("%d",&i);
if(ListDelete_L(L,i,e))
printf("删除成功!
");
else
printf("删除失败。
\n");
break;
case'6':
printf("\n单链表为:
");
xsList(L);
break;
case'7':
printf("请输入mink和maxk:
");
scanf("%d,%d",&mink,&maxk);
DelList(L,mink,maxk);
break;
case'8':
sh_sort(L);
break;
case'9':
nizhi(L);
break;
case'a':
printf("请输入在有序表中插入的元素值:
");
scanf("%d",&e);
yxcharu(L,e);
break;
}
}
}
作业2.栈、行列、数组
非编程作业:
1.若进栈序列为ABCD,请写出所有可能的出栈序列和不行能的出栈序列。
参照答案:
可能的出栈序列:
(14种)
dcbacdbabacdcbdaadcbcbadbdcaacdbbcdaacbdbcadabdcbadcabcd
不行能的出栈序列:
(10种)
dbcadbacdabcdacbdcabcabdcdabbdaccadbadbc
2.简要说明循环行列怎样判断队满和队空
参照答案:
当牺牲一个储存结点,商定以“行列头指针在行列尾指针的下一地点(指环状的下一个地点)上”作为行列“满”状态的标记时,循环行列判断队满的条件为:
(rear+1)%MaxQsize==front;判断队空的条件为:
front==rear。
3.设A为n阶对称矩阵,采纳压缩储存寄存于一维数组
F[n(n+1)/2]中(从F[0]
开始寄存),请分别给出寄存上三角阵时任一矩阵元素
aij(≤
≤)的地
址计算公式和寄存下三角阵时任一矩阵元素
a(ij
≤
1i,j
n
≤)的地点计算公式。
1
i,j
n
参照答案:
寄存上三角阵时,任一矩阵元素
aij(1≤i,j≤n)的地点计算
公式为:
i
i-1
1
*l
Loc(aij)=Loc(a11)+
j
2
寄存下三角阵时,任一矩阵元素aij(≤
≤)的地点计算公式为:
1
i,j
n
j
j-1
1
*l
Loc(aij)=Loc(a11)+
i
2
4.写出下边稀少矩阵的三元组次序表和十字链表表示。
400000
503008
A000000
000700
200000
参照答案:
编程作业
栈采纳次序栈储存,试设计算法实现将表达式变换成后缀表达式输出。
比如,输入表达式:
a+b/c-(d*e+f)*g
输出后来缀表达式:
abc/+de*f+g*-
参照答案:
#include<>
#include<>
#include<>
#defineOVERFLOW-2
#defineOK1
#defineERROR0
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
typedefintStatus;
typedefcharSElemType;
typedefcharstring[80];
typedefstruct
{SElemType*base;SElemType*top;
intstacksize;
}SqStack;
StatusInitStack(SqStack&S)
{=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!
exit(OVERFLOW);
=;
=STACK_INIT_SIZE;
return(OK);
}
StatusClearStack(SqStack&S)
{=(SElemType*)realloc,STACK_INIT_SIZE*sizeof(SElemType));if(!
exit(OVERFLOW);
=;
=STACK_INIT_SIZE;
return(OK);
}
voidDestroyStack(SqStack&S)
{=0;
iffree;
==NULL;
}
StatusStackEmpty(SqStackS)
{if==
returntrue;
else
returnfalse;
}
SElemTypeGetTop(SqStackS)
{SElemTypee;if>
e=*;
returne;
}
StatusPush(SqStack&S,SElemTypee)
{
if树
非编程作业:
1.请分别画出拥有3个结点的树和3个结点的二叉树的所有不一样形态。
参照答案:
拥有3个结点的树:
拥有3个结点的二叉树:
2.已知二叉树的先序遍历序列是EABDCFHGIKJ,中序遍历序列是ABCDEFGHIJK,请结构二叉树,并写出其层次遍历序列和后序遍历序列。
参照答案:
E
AF
B
H
层次:
EAFBHDGICKJ
G
I
后序---CDBAGJKIHFE
D
C
K
J
3.将以下图所示的丛林变换成一棵二叉树。
AGK
BCDHIJL
EF
参照答案:
变换成的二叉树为:
A
BG
CHK
DI
L
EJ
F
4.将以下图所示的二叉树复原成树或丛林。
A
BE
CF
G
D
L
H
MI
K
NJ
参照答案:
变换为丛林:
AEG
BCD
FHIJ
LMN
K
5.假定用于通讯的电文由7个字母构成{A,B,C,D,E,F,G},字母在电文中出现的频次分别为、、、、、、。
试为这7个字母设计哈夫曼编码,并计算其带权路径长
度WPL。
参照答案:
哈夫曼树为:
1
G
E
BA
WPL=4*++3*+++2*+=
A:
101B:
001C:
100D:
0001E:
11F:
0000G:
01
编程作业:
二叉树采纳二叉链表储存,试设计算法实现:
1.CreateBT(BiTree&T):
从键盘输入二叉树的先序遍历序列字符串(以”#”代表空结点),成立其二叉链表;
如输入:
AB#D##CE#F###则成立以以下图所示二叉树的二叉链表
2.ExchangeBT(BiTreeT):
设计递归算法实现二叉树中所有结点的左右孩
子互换;
3.CountLeaf(BiTreeT,TElemTypex,int&count):
统计以值为x的结点为
根的子树中叶子结点的数量;
4.DispBiTree(BiTreeT,intlevel):
按树状打印二叉树。
A
BC
DE
打印获得:
#C
###F
##E
A
##D
#B
F
提示:
关于根为T,层次为level的子树:
①打印其下一层(level+1层)右子树;
②打印根结点;
③打印其下一层(level+1层)左子树;
*结点左侧的’#个’数为其层次数*
参照答案:
#include<>
#include<>
typedefstructBiTNode{
chardata;
structBiTNode*lchild,*rchild;
}BiTNode,*BiTree;
图
非编程作业:
1.已知带权有向图以下图,画出该图的毗邻矩阵储存结构。
30
a
b
c
d
e
f
g
h
b
c
a0
2
6
9
5
2
1
8
b
0
30
1
2
a
6
d
e
h
c
0
0
2
5
9
3
7
21
d
8
7
f
24
g
e
0
f
3
0
24
g
0
21
h
0
参照答案:
2.无向图毗邻表储存结构以下图:
(1)画出该无向图;
(2)写出在该毗邻表上,从极点1出发所获得的深度优先遍历(DFS)和广度优先遍历(BFS)序列。
1
1
3
2
^
2
2
4
1
^
3
3
4
1
^
4
4
7
6
5
3
2
^
5
5
8
4
^
6
6
8
4
^
7
7
8
4
^
8
8
7
6
5
^
参照答案:
25
1468
37
DFS:
1,3,4,7,8,6,5,2
BFS:
1,3,2,4,7,6,5,8
作业5.查找、排序
非编程作业:
1.对下标为1~9的有序表进行折半查找,画出折半查找的判断树;并计算在等概率状况下查找成功的均匀查找长度ASL。
参照答案:
2.设相重点字序列{25,40,33,47,12,66,72,87,94,22,5,58},散列表
长12,散列函数为h(key)=key%11,用线性探查再散列、链地点法办理矛盾,请分别画出散列表,并计算。
参照答案:
线性探查再散列办理矛盾:
0
1
2
3
4
5
6
7
8
9
1011
3312
66
25
47
22
72
40
94
5
87
58
查找时比较1次可以成功的有:
25、40、33、12、72、87
比较2次可以成功的有:
47
比较3次可以成功的有:
66、94
比较5
次可以成功的有:
5
比较6
次可以成功的有:
22
比较9次可以成功的有:
58
查找成功的ASL=(1*6+2+3*2+5+6+9)/12≈2.83
链地点法办理矛盾:
0336622^
112^
2^
3254758^
4^
5
5
^
72
94^
6
740^
8^
9^
1087^
11^
查找成功的ASL=(1*7+2*3+3*2)/12≈1.58
3.已知待排序序列为{50,86,72,41,45,93,57,46},请写出按以下排序方法进行升序排序时的第一趟排序结果:
①直接插入排序;
②冒泡排序;
③简单项选择择排序;
④堆排序初建堆序列。
参照答案:
第一趟直接插入排序:
50,86,72,41,45,93,57,46
第一趟冒泡排序:
50,72,41,45,86,57,46,93
第一趟简单项选择择排序:
41,86,72,50,45,93,57,46
堆排序初建堆序列:
93,86,72,46,45,50,57,41
4.设计一种方法,以少于2n-3次的比较在次序储存的n(n>=2)个数中同时找出最大和最小值。
参照答案:
方法1:
从n个数中找出最大值放在下标为0的地点——(n-1)次比较;再在节余的n-1个数中找到最小值——(n-2)次比较;
总比较次数为2n-3。
方法2:
将n个数两两比较,比较的过程中将小的数放在前方,大的数放在后边——次比较;
以后在偶数下标的数中找到最小值(下标从0开始)——次比较;在奇数下标的数中找到最大值——次比较;
总比较次数为,当n>=2时小于2n-3。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 作业 答案 大连理工大学