数据结构作业答案大连理工大学.docx

上传人:b****3 文档编号:2280767 上传时间:2022-10-28 格式:DOCX 页数:15 大小:110.69KB
下载 相关 举报
数据结构作业答案大连理工大学.docx_第1页
第1页 / 共15页
数据结构作业答案大连理工大学.docx_第2页
第2页 / 共15页
数据结构作业答案大连理工大学.docx_第3页
第3页 / 共15页
数据结构作业答案大连理工大学.docx_第4页
第4页 / 共15页
数据结构作业答案大连理工大学.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据结构作业答案大连理工大学.docx

《数据结构作业答案大连理工大学.docx》由会员分享,可在线阅读,更多相关《数据结构作业答案大连理工大学.docx(15页珍藏版)》请在冰豆网上搜索。

数据结构作业答案大连理工大学.docx

数据结构作业答案大连理工大学

作业1.线性表

编程作业:

1.将顺序表逆置,要求用最少的附加空间。

参考答案

#include<>

#include<>

#include<>

#defineLIST_INIT_SIZE100

#defineLISTINCREMENT10

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-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(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*-

参考答案:

#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

A

C

B

D

I

J

H

F

G

K

层次:

EAFBHDGICKJ

后序---CDBAGJKIHFE

 

3.将下图所示的森林转换成一棵二叉树。

参考答案:

B

A

C

D

F

G

E

H

I

J

K

L

转换成的二叉树为:

 

4.将下图所示的二叉树还原成树或森林。

参考答案:

转换为森林:

A

C

H

B

F

D

M

E

G

N

J

I

K

L

 

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):

按树状打印二叉树。

B

C

F

A

E

D

打印得到:

#C

###F

##E

A

##D

#B

 

提示:

对于根为T,层次为level的子树:

1打印其下一层(level+1层)右子树;

2打印根结点;

3打印其下一层(level+1层)左子树;

*结点左边的’#’个数为其层次数*

参考答案:

#include<>

#include<>

typedefstructBiTNode{

chardata;

structBiTNode*lchild,*rchild;

}BiTNode,*BiTree;

非编程作业:

1.已知带权有向图如图所示,画出该图的邻接矩阵存储结构。

2.

2

aa

f

b

d

g

c

h

e

A

6

9

7

8

3

2

5

1

30

24

21

 

参考答案:

 

3.无向图邻接表存储结构如图所示:

(1)画出该无向图;

(2)写出在该邻接表上,从顶点1出发所得到的深度优先遍历(DFS)和广度优先遍历(BFS)序列。

参考答案:

 

1

3

2

4

7

5

8

6

DFS:

1,3,4,7,8,6,5,2

BFS:

1,3,2,4,7,6,5,8

作业5.查找、排序

非编程作业:

1.对下标为1~9的有序表进行折半查找,画出折半查找的判定树;并计算在等概率情况下查找成功的平均查找长度ASL。

参考答案:

2.设有关键字

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1