数据结构作业答案大连理工大学Word格式文档下载.docx
- 文档编号:18020753
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:15
- 大小:110.70KB
数据结构作业答案大连理工大学Word格式文档下载.docx
《数据结构作业答案大连理工大学Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构作业答案大连理工大学Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
5.删除"
6.显示\n"
7.删除大于mink且小于maxk的元素值"
8.就地升序排序\n"
9.就地逆置"
a.有序表插入"
q.退出\n"
\n请选择操作:
"
fflush(stdin);
scanf("
%c"
&
choice);
switch(choice)
{
case'
1'
:
printf("
请输入单链表中结点个数:
scanf("
%d"
n);
Create_L2(L,n);
break;
2'
请输入元素位序:
i);
GetElem_L(L,i,e);
printf("
元素值为:
%d\n"
e);
3'
请输入要查找的元素:
scanf("
e);
if(dlbcz(L,e))
printf("
查找成功!
else
查找失败。
4'
请输入插入位置:
请输入要插入的元素:
scanf("
if(ListInsert_L(L,i,e))
插入成功!
单链表为:
插入失败。
5'
请输入删除位置:
if(ListDelete_L(L,i,e))
删除成功!
删除失败。
\n"
6'
\n单链表为:
xsList(L);
7'
请输入mink和maxk:
%d,%d"
mink,&
maxk);
DelList(L,mink,maxk);
8'
sh_sort(L);
break;
9'
nizhi(L);
a'
请输入在有序表中插入的元素值:
yxcharu(L,e);
}
}
}
作业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(1≤i,j≤n)的地址计算公式和存放下三角阵时任一矩阵元素aij(1≤i,j≤n)的地址计算公式。
存放上三角阵时,任一矩阵元素aij(1≤i,j≤n)的地址计算公式为:
存放下三角阵时,任一矩阵元素aij(1≤i,j≤n)的地址计算公式为:
4.写出下面稀疏矩阵的三元组顺序表和十字链表表示。
编程作业
栈采用顺序栈存储,试设计算法实现将表达式转换成后缀表达式输出。
例如,输入表达式:
a+b/c-(d*e+f)*g
输出其后缀表达式:
abc/+de*f+g*-
#defineOVERFLOW-2
#defineERROR0
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
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));
voidDestroyStack(SqStack&
{=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
A
C
B
D
I
J
H
F
G
K
层次:
EAFBHDGICKJ
后序---CDBAGJKIHFE
3.将下图所示的森林转换成一棵二叉树。
L
转换成的二叉树为:
4.将下图所示的二叉树还原成树或森林。
转换为森林:
M
N
5.假设用于通信的电文由7个字母组成{A,B,C,D,E,F,G},字母在电文中出现的频率分别为、、、、、、。
试为这7个字母设计哈夫曼编码,并计算其带权路径长度WPL。
哈夫曼树为:
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):
按树状打印二叉树。
打印得到:
#C
###F
##E
##D
#B
提示:
对于根为T,层次为level的子树:
1打印其下一层(level+1层)右子树;
2打印根结点;
3打印其下一层(level+1层)左子树;
*结点左边的’#’个数为其层次数*
typedefstructBiTNode{
chardata;
structBiTNode*lchild,*rchild;
}BiTNode,*BiTree;
图
非编程作业:
1.已知带权有向图如图所示,画出该图的邻接矩阵存储结构。
2.
2
aa
f
b
d
g
c
h
e
6
9
7
8
3
5
1
30
24
21
3.无向图邻接表存储结构如图所示:
(1)画出该无向图;
(2)写出在该邻接表上,从顶点1出发所得到的深度优先遍历(DFS)和广度优先遍历(BFS)序列。
4
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,用线性探查再散列、链地址法处理冲突,请分别画出散列表,并计算。
线性探查再散列处理冲突:
链地址法处理冲突:
3.已知待排序序列为{50,86,72,41,45,93,57,46},请写出按下列排序方法进行升序排序时的第一趟排序结果:
1直接插入排序;
2冒泡排序;
3简单选择排序;
4堆排序初建堆序列。
第一趟直接插入排序:
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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 作业 答案 大连理工大学