数据结构作业答案大连理工大学Word文档下载推荐.docx
《数据结构作业答案大连理工大学Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构作业答案大连理工大学Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
![数据结构作业答案大连理工大学Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-10/28/a01d4f29-58a3-46c4-83a8-c09c01900a64/a01d4f29-58a3-46c4-83a8-c09c01900a641.gif)
3.查找\n"
4.插入"
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.设有关键字