西南交大数据结构主观题作业Word格式.docx
《西南交大数据结构主观题作业Word格式.docx》由会员分享,可在线阅读,更多相关《西南交大数据结构主观题作业Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
n-i+1
25.
在一个长度为n的顺序表中删除第i个元素时,需要向前移动
元素。
n-i
26.
在单链表中设置头结点的作用是
简单插入、删除算法
27.
在单链中要删除某一指定结点,必须找到该结点的
结点。
直接前驱
28.
访问单链表中的结点,必须沿着
依次进行。
指针域
29.
在双链表中每个结点有两个指针域,一个指向
,一个指向
直接前驱结点
,直接后继结点
30.
在
链表中,删除最后一个结点的算法时间复杂度为O
(1)。
双向循环
31.
访问一个线性表中具有给定值的时间复杂度的数量级是
O(n)
32.
由n个数据元素生成一个顺序表,若每次都调用插入算法把一个元素插入到表头,则整个算法的时间复杂度为
,若每次都调用插入算法把一个元素插入到表尾,则整个算法的时间复杂度为
O(n)
O(n2)
33.
链表中,可以用表尾指针代替表头指针。
双向
34.
双向
35.
根据n个数据元素建立对应的顺序表和单链表存储结构,其算法的时间复杂度最好的情况是
,最坏的情况是
36.
求线性表的顺序存储和链式存储的长度的算法时间复杂度分别是
O
(1)
37.
在一个带头结点的单链表中,在表头插入或删除与在其他位置插入或删除,其操作过程是否相同?
相同
38.
在一个不带头结点的单链表中,在表头插入或删除与在其他位置插入或删除,其操作过程是否相同?
不相同
39.
阐述顺序表和链表存储方式的特点。
顺序表存储方式为数据分配连续的存储单元,数据元素按逻辑顺序依次存储到相应存储单元中,使得逻辑相邻的数据元素物理也相邻,因此可以实现随即访问线性表的数据元素,即数据访问的时间复杂度为O
(1)。
链表存储方式分配的存储单元可以不连续,通过每个结点的指针域来表示数据元素之间的逻辑关系,只能顺序访问线性表中的数据元素。
40.
若频繁地对一个线性表进行插入和删除操作,则该线性表宜采用何种存储结构,为什么?
若频繁地对一个线性表进行插入和删除操作,则该线性表宜采用链式存储结构。
因此链式存储结构在插入和删除数据元素时不需要移动数据元素,只需要修改结点的指针域就可以改变数据元素之间的逻辑关系。
41.
在单链表、双向循环链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点p从相应的链表中删除?
若可以,时间复杂度各为多少。
要实现删除p结点的操作,必须找到其前驱结点,修改其指针域的值使其指向p的后继结点,以实现删除结点p。
单链表不行,因此不知道头指针就无法找到结点p的前驱结点。
双向循环链表和单循环链表可以可以实现删除p结点。
单循环链表删除p结点的时间复杂度为O(n),双循环链表删除P结点的时间复杂度为O
(1)。
42.
对链表设置头结点的作用是什么?
对带头结点的链表,在表的任何结点之前插入结点或删除任何位置的结点,所要做的都是修改前一个结点的指针域,因为在带头结点的链表中任何元素结点都有前驱结点。
如果没有头结点,在首元结点前插入结点或删除首元结点都要修改头指针,其算法要比不带头结点的算法复杂些。
其次,带头结点的链表结构,初始化后的头指针就固定了,除撤销算法外,所有算法都不会修改头指针,可以减少出错的可能性。
43.
已知一个线性表用含头结点的单链表做存储结构,写一个算法求单链表的长度。
intlistlenght(linklistL)
{intlength=0;
P=L->
next;
while(p)
{length++;
p=p->
}
return(length);
44.
已知一个顺序表L,其中的元素按值递增有序排列,设计一个算法插入一个值为x的元素后保持该顺序表仍然递增有序,且空间复杂度为0
(1)。
voidinsertsq(sqlistL,elemtypex)
{n=L.length-1;
if(LT(L.elem[n],x)
{n++;
L.elem[n]=x;
else{
while(n>
=0&
&
LT(x,L.elem[n])
{L.elem[n+1]=L.elem[n];
n--;
L.elem[n+1]=L.elem[n];
return;
45.
写一个算法,从顺序表中删除值为x的所有元素。
voiddelallsq(Sqlist&
L)
{inti=0,j=0;
while(j<
L.length)
{if(L.elem[j]!
=x)
L.elem[i++]=L.elem[j];
j++;
L.longth=i;
第三次作业
三、主观题(共50道小题)
60.
循环队列的引入,目的是为了克服
顺序队列的假溢出
61.
区分循环队列的空与满有3种方法,它们是
、
少用一个元素
设空满标志
用计数器记录队列中元素个数
62.
栈和队列的区别是
,
栈只能在表一端进行插入和删除操作,队列限制在表的一端进行插入操作,在另一端进行删除操作
63.
一个栈的输入序列是12345,则栈的输出序列43512是
错误的
64.
设栈采取顺序存储结构,栈中已有i-1个元素,则第i个元素进栈操作的算法时间复杂度是
65.
栈的特点是【①
】,队列的特点是【②
】;
栈和队列都是【③
】若入栈序列是1,2,3,4,则【④
】是不可能的出栈序列;
若进队列的序列是1,2,3,4,则【⑤
】是可能的出队序列。
①后进先出
②
先进先出
③
限制存取点的线性结构④
3,2,1,4
⑤
1,2,3,4
66.
若用不带头结点的单链表表示栈,则创建一个空栈要执行的操作是
top=NULL
67.
从循环队列中删除一个元素的操作是
Q.front=(Q.front+1)%QSize
68.
从循环队列中插入一个元素的操作是
Q.rear=(Q.rear+1)%QSize
69.
判断链队列中只有一个结点的条件是
Q.front->
next==Q.rear
70.
如果栈的最大长度难以估计,最好使用
链栈
71.
为什么说栈是一种后进先出表?
因为栈是限定在表的一端进行插入和删除操作,所以后入栈的数据元素总是先出栈,所以说栈是一种后进先出表。
72.
对于一个栈,其输入序列是A,B,C,试给出全部可能的输出序列。
可能的出栈序列是:
ABC、ACB、BAC、BCA、CBA。
73.
何谓队列上溢?
何为假溢出现象?
有哪些解决假溢出问题的方法,并分别阐述其工作原理。
队列上溢指在队列的顺序存储分配中,按照队列的操作规则,需要进队的元素因找不到合适的存储单元而无法进入队列。
假溢出指在队列的顺序存储分配中,分配给队列的存储空间有存储单元未被占用,但按照操作规则而使进队的数据元素无法进队的现象。
解决假溢出问题的方法是在队列的顺序存储分配中,分配给队列的存储空间可以循环使用,其进本原理是用表示队头和队尾指针与分配给队列的存储空间长度进行取模运算。
即:
入队操作:
Q.rear=(Q.rear+1)%MSize
出队操作:
Q.front=(Q.front+1)%MSize
74.
队列可以用单循环链表来实现,故可以只设一个头指针或只设一个尾指针,请分析用哪种方案最合适。
使用循环链表来表示队列,设置尾指针比较合适,因为入队操作可以直接在尾结点后进行插入操作,出队操作时可以根据尾指针很容易找到链表的头结点,入队出队操作的算法时间复杂度均为O
(1)。
若只设头指针,则出队操作的算法时间复杂度为O
(1),入队操作的算法时间复杂度为O(n)。
75.
深度为k的完全二叉树至少有
个结点,至多有
个结点。
2K-1
2K-1
76.
在一棵二叉树中,度为0的结点个数为n0,度为2的结点个数为n2,则有n0=
n2+1
77.
一棵二叉树第i层最多有
个结点,一棵有n个结点的满二叉树共有
个结点,共有
个叶结点。
2i-1
78.
根据二叉树的定义,具有3个结点的二叉树共有种不同形态,它们分别是
5
79.
有一棵如下图所示的树,回答下列问题:
①这棵树的根结点是
②这棵树的叶子结点是
③结点c的度为
④这棵树的深度是
⑤结点c的孩子结点是
⑥结点c的双亲结点是
⑦这棵树的度是
①a
b,e,g,d
③2
④4
e,f
⑥a
⑦3
80.
树与二叉树的两个主要差别是
树中结点的最大度没有限制,二叉树结点的最大度限定为2
树的结点无左右之分,二叉树的的节点又左右之分
81.
设有如下图所示的二叉树,给出其前序、中序和后序遍历结果。
前序序列:
eadcbifghj
中序序列:
abcdiefhgj
后序序列:
bcidahjgfe
82.
给出下图所示的树的二叉树表示。
下图为其树的二叉树表示。
83.
有一份电文共有5个字符:
a,b,c,d,e,它们出现的频率依次为4,7,5,2,9,构造对应的哈夫曼树,求哈夫曼树的带权路径长度和每个字符的哈夫曼编码。
字符编码:
a:
011
b:
10
c:
00
d:
010
e:
11
84.
假设一棵二叉树采用顺序存储结构,如下图所示。
0
10
15
20
e
a
f
d
g
c
j
h
i
b
回答些列问题:
①画出二叉树表示。
②写出先序、中序和后序遍历结果
③写出结点c的双亲结点和左、右孩子结点
④画出此二叉树还原成森林的图
①二叉树表示如下图所示。
②先序序列为:
eadcbjfghi
中序序列为:
acbdjefhgi
后序序列为:
bcjdahigfe
③结点c的双亲结点是d,左孩子为b,无右孩子
④该二叉树对应的森林为
85.
有n个顶点的无向图最多有
条边。
n(n-1)/2
86.
一个图的
表示法是唯一的,而
表示法是不唯一的。
邻接矩阵,
邻接表
87.
具有10个顶点的无向图,边的总数最多为
45
88.
在有n个顶点的有向图中,每个顶点的度最大可达
2(n-1)
89.
已知一个有向图采用邻接矩阵表示,计算第i个顶点的入度的方法是
求第i列非0元素个数
90.
从占用的存储空间来看,对于稠密图和稀疏图,采用邻接矩阵和邻接表那个更好些?
从占用存储空间看,稠密图采用邻接矩阵更好,稀疏图采用邻接表更好。
91.
用邻接矩阵表示图时,矩阵元素的个数与顶点个数是否相关?
与边的条数是否相关?
为什么?
用邻接矩阵表示图,矩阵元素的个数与图的定点个数直接相关,与边的条数无关。
因为假设定点个数为n,则邻接矩阵的大小为n2。
92.
对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表头向量的大小为【①】;
所有邻接表中结点总数为【②】。
①
n
②2e
93.
顺序查找含n个元素的顺序表,若查找成功,则比较关键字的次数最多为
次;
若查找不成功,则比较关键字的次数为
次。
n+1
94.
在含有n个元素的有序顺序表中进行二分查找,最大的比较次数是
.⎣log2n⎦+1
95.
用二分查找一个查找表,该查找表必须具有的特点是
顺序存储且关键字有序
96.
分块查找发将待查找的表均匀地分成若干块且块中诸记录的顺序可以是任意的,但块与块之间
关键字有序
97.
在分块查找方法中,首先查找
,然后再查找相应的
关键字表
对应的块
98.
用二叉排序树在n个元素中进行查找,最坏情况下查找时间复杂度为
,最好情况的查找时间复杂度为
,O(log2n)
99.
折半查找的存储结构仅限于
,且是
顺序存储结构
,关键字有序排列
100.
一个无序序列可以通过构造一棵
树而变成有序序列,构造树的过程即是对无序序列进行排序的过程。
二叉排序
101.
画出对长度为10的右序表进行折半查找的一棵判定树,并求其等概率时查找成功的平均查找长度。
平均查找长度=(1+2*2+4*3+3*4)/10=2.9
102.
设有数据集合d={1,12,5,8,3,10,7,13,9},回答下列问题:
①依次取d中各数据,构造一棵二叉排序树;
②如何依据此二叉排序树得到d的一个有序序列。
①构造的二叉排序树如下图所示。
②对该二叉排序树进行中序遍历,就可以得到d的一个有序序列:
{1,3,5,7,8,9,10,12,13}
103.
每次从无序子表中取出一个元素,把它插入到有序子表中恰当位置,此种排序方法叫做
排序;
若每次从无序子表中挑选出最小或最大元素,把它交换到有序表的一端,此种排序方法叫做
排序。
插入
;
直接选择
104.
每次通过基准元素间接比较两个元素,不满足约定要求时就交换位置,该排序方法叫做
每次使两个相邻有序表合并成一个有序表的排序方法叫做
快速
归并
105.
排序方法采用二分法的思想,
排序方法将数据的组织采用完全二叉树的结构。
堆
106.
对n个元素的表进行直接选择排序,所需要的关键字的比较次数为
n(n-1)/2
107.
在堆和快速排序中,若原始记录接近正序或反序,则选用
,若原始记录无序,则选用
,快速
108.
在插入和选择排序中,若初始数据基本正序,则选用
,若初始数据基本反序,则选用
,选择
109.
在堆排序、快速排序和归并排序中,若只从存储空间考虑,则应首先选取
方法,其次选择
方法,最后选择
方法;
若只从平均情况下排序最快考虑,则应选取
若只从最坏情况下排序最快并且要节省内存考虑,则应选取
方法。
堆排序
,快速排序,
归并排序
,快速排序
,堆排序