(F)在第i个结点后插入一个新结点(Kiwn)
(G)删除第i个结点(1wiwn)
(H)将n个结点从小到大排序
9.线性链表不具有的特点是(A)。
A•随机访问B•不必事先估计所需存储空间大小
C•插入与删除时不必移动元素D•所需空间与线性表长度成正比
10.若某链表最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则采
用(C)存储方式最节省时间。
A.单链表B.双链表
C.带头结点的双循环链表D.单循环链表
11.带头结点的双循环链表L为空表的条件是__L->next=L->prior或L->next=L。
12.不带头结点的单链表head为空的判定条件是head=NULL。
13.—个带表头结点的单循环链表,指针P指向链的某一个结点,若P->next-〉next-〉next==
P,则此链表的长度可能是0或2。
14.向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均
要移动(B)个元素
A.8B.63.5C.63D.7
15.对于长度为n的顺序表执行删除操作,则其结点的移动次数(C)
A.最少为0,最多为nB.最少为1,最多为n
C.最少为0,最多为n-1D.最少为1,最多为n-1
16.线性表的长度是线性表所占用的存储空间的大小。
(F)
17.双循环链表中,任意一结点的后继指针均指向其逻辑后继。
(T)
18、线性表L在B情况下适用于使用链式结构实现。
1.假设线性表L=(a1,a2,,an用带头结点的单链表存储表示,试编写算法对
其实现就地逆置,即利用原链表中每一个结点存储空间,使得元素的逻辑次序改
变为(an,,a2,a1)
2•试编写算法,以统计带头结点单链表的元素个数。
3.设某单链表L的结点结构为|data|next,试编写算法判断该链表的元素是否是递增的。
4.已知单链表L是一个递增有序表,试写一高效算法,删除表中值大于min且小于max
的结点(若表中有这样的结点),同时释放被删结点的空间,这里min和max是两个给定
的参数。
请分析你的算法的时间复杂度。
第3章栈和队列
知识点:
栈、循环队列考点:
出入栈操作、栈和队列特点、循环队列操作(元素个数、队头队尾指针)、应用
1.一个栈的入栈序列是1、2、3、4,若第二个出栈的元素是4,则最后出栈的元素可能是
1或2。
2•—个栈的输入序列为12345,则下列序列中不可能是栈的输出序列的是(B)
A.23415B.54132
C.23145D.15432
3•在对链队列作出队操作时,不会改变front指针的值。
(T)
4•若一个栈的输入序列为123…n,其输出序列的第一个元素为n,则其输出序列的每个元素
ai一定满足a=n-i+1(i=1,2…,n)(T)
5.栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶,不
允许插入和删除运算的一端称为栈底。
6、如果入栈序列是1,3,5,…,97,99,且出栈序列的第一个元素为99,则出栈序列中
第30个元素为_41—。
7•有5个元素,其入栈次序为:
A,B,C,D,E,在各种可能的出栈次序中,以元素C,D
最先出栈(即C第一个且D第二个出栈)的次序有哪几个?
答:
三个:
CDEBACDBEACDBAE
8、向顺序栈中压入新元素时,应当(A)。
A•先移动栈顶指针,再存入元素B•先存入元素,再移动栈顶指针
C•先后次序无关紧要D•同时进行
9•设一个链栈的栈顶指针是Is,栈中结点格式为|info|link,|栈空的条件是•如果栈
不为空,则退栈操作为p=ls;Ls==NULL、ls=ls->link._;free(p);。
10.如果以链表作为栈的存储结构,则退栈操作时(③)
1必须判别栈是否满
2对栈不作任何判别
3必须判别栈是否空
4判别栈元素的类型
11・判定一个栈ST(最多元素为m0)为空的条件是B
(D)12.数组Q:
n]用来表示一个循环队列,f为当前队列头元素的前一位置,『为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为
(A)r—f;(B)(n+f-r)%n;(C)n+r—f;(D)(n+r—f)%n
13・判定一个队列QU(最多元素为m0)为满队列的条件是A
14.设循环队列的容量为40(序号从0到39),现经过一系列的入队和出队运算后,有①front=11,rear=19;②front=19,rear=11;问在这两种情况下,循环队列中各有元素多少个?
答:
①L=(40+19-11)%40=8②L=(40+11—19)%40=32
15、假设为循环队列分配的向量空间为Q[20],若队列的长度和队头指针值分别为13和17,
则当前尾指针的值为10。
16.设数组Data[0..m]作为循环队列
SQ的存储空间,front为队头指针,
rear为队尾指针,
则执行出队操作的语句为(④
)
①front=front+1
②front=(front+1)%m
③rear=(rear+1)%m
④front=(front+1)%(m+1)
12.在按层次遍历二叉树的算法中,需要借助的辅助数据结构是(
A)
A•队列
B.栈
C.线性表
D.有序表
13.用邻接表表示图进行深度优先遍历时,通常是米用C
来实现算法
的。
A.树B.队列
C.栈
D.图
17.简述以下算法的功能(栈和队列的兀素类型均为int)。
voidalgo3(Queue&Q){
StackS;intd;
InitStack(S);
while(!
QueueEmpty(Q)){
DeQueue(Q,d);Push(S,d);
};
while(!
StackEmpty(S)){
Pop(S,d);EnQueue(Q,d);
}
}
答:
该算法的功能是:
利用堆栈做辅助,将队列中的数据元素进行逆置。
第4章串
KMP算法原理,分别求出它们的Next函数值
)
②符号构成的集合
④字符构成的集合
知识点:
定义、串的基本操作、根据作业
1.串是任意有限个(③
①符号构成的序列
③字符构成的序列
(B)
2、设有两个串p和q,求q在p中首次出现的位置的运算称作:
A.连接B.模式匹配C.求子串D.求串长
3、串是一种特殊的线性表,其特殊性体现在:
(B)
A.可以顺序存储B.数据元素是一个字符
C.可以链式存储D.数据元素可以是多个字符
5.设S=“A;/document/Mary.doc”,则strlen(s)=20_。
6.设目标T=”abccdcdccbaa,模式P=“cdcc”,则第—6次匹配成功。
7.设串s仁’ABCDEFG,s2='PQRST函数con(x,y)返回x和y串的连接串,subs(s,i,j)返回串s的从序号i开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(s1,2,len(s2)),
subs(s1,len(s2),2))的结果串是BCDEFEF
8.设串sl="DataStructureswithava",s2=",则子串定位函数index(s1,s2)的值为(D)
A.15B.16C.17D.18
9.令t='abcaabcab,根据KMP算法原理,分别求出它们的Next函数值。
i
1
2
3
4
5
6
7
8
9
串t
a
b
c
a
a
b
c
a
b
Next(i)
第5章数组和广义表
知识点:
二维数组的存储、特殊矩阵、广义表
作业P31-33
1•假设有二维数组A6x8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为288;
末尾元素A57的第一个字节地址为1282;若按行存储时,元素A14的第
一个字节地址为1072;若按列存储时,元素A47的第一个字节地址为_
1276。
()2•假设有60行70列的二维数组a[1…60,1…70]以列序为主序顺序存储,其基地址
为1000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为(C)。
(无第0行第0列元素)
(A).4454(B).6904(C).7902(D).答案A,B,C均不对
3.数组A[5][6]的每个元素占5个单元,将其按行优先次序存储在起始地址为1000
的连续的内存单元中,则元素A[5,5]的地址为(A)
A.1140B.1145
C.1120D.1125
4.二维数组A:
15]:
20]采用按行为主序的存储方式,每个元素占4个存储单元,若A[0]
:
0]的存储地址为300,则A:
10]:
10]的地址为(D)
A.700B.1120
C.1180D.1140
5.写出广义表操作的结果:
GetTail【GetHead【GetTail【((a,b),(x,y))]]]===(y)。
5.取出广义表A=(x,(a,b,c,d))中原子x的函数是_head(A)_。
7.下列各三元组表分别表示一个稀疏矩阵,试写出它们的稀疏矩阵。
i
j
v
7
6
6
1
4
7
2
1
8
3
5
9
4
2
7
6
5
3
7
3
1
8、设有一个10阶的对称矩阵A[10][10],采用压缩存储方式按行将矩阵中下三角部分的元
素存入一维数组B[]中,A[0][0]存入B[0]中,贝UA[8][5]在B[]中(C)位置。
A.32B.33C.41D.65
9、假设有100行200列的二维数组a[100][200]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第45行第67列的元素a[44][66]的存储地址为23288。
10、已知广义表L=((((a),b)),(((),d),(e,f))),
(1)写出广义表L的头、尾;
(2)计算L的深度;
(3)画出L的头尾链表存储结构图。
11.设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B中(注:
B下标从0开始),求矩阵中任一元素ai,j(iai,i
a2,1a2,2
解:
对应关系如下:
i(i1)
2j(j1)
2
第6章二叉树
知识点:
树、二叉树(完全二叉树)、森林基本概念(度、),存储结构,遍历,转换,线索
1设F是一个森林,B是由F转换得到的二叉树,F中有n个非叶结点,则B中右指针域为空的结点有(C)个。
A.n-1B.nC.n+1D.n+2
2.已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,
则该树中有12个叶子的结点。
3.树有三种常用的存储结构,即孩子链表法、孩子兄弟链表法和双亲表示法。
4.把一棵树转换为二叉树后,这棵二叉树的形态是_A。
A.唯一的B.有多种
C.有多种,但根结点都没有左孩子D.有多种,但根结点都没有右孩子
5、若一棵二叉树中度为2的结点数是10,则叶子结点数为11个。
10、3个结点可构成—2_棵不同形态的树。
5棵不同形态的二叉树。
6.深度为6(根的层次为1)的二叉树至多有(④)结点。
①64②32③31④63
7•将含100个结点的完全二叉树从根这一层开始,每层上从左到右依次对结点编号,根结点的编号为1。
编号为49的结点X的双亲编号为(①)
①24②25③23④无法确定
8•设一棵完全二叉树具有1000个结点,则此完全二叉树有500个叶子结点;有499—个度为2的结点,有1个度为1的结点。
9.一棵具有257个结点的完全二叉树,它的深度为9。
10.已知完全二叉树的第8层有8个结点,则其叶子结点数是68o
11.在完全的二叉树中,若一个结点没有A,则它必定是叶结点。
A.左子结点B.右子结点C.左子结点或者没有右子结点D.兄弟
12.某二叉树的先序序列和后序序列正好相同,则该二叉树一定是(.A)的二叉树。
A.空或只有一个结点B.高度等于其结点数
C.任一结点无左孩子D.任一结点无右孩子
13.在有n个结点的二叉链表中,值为非空的链域的个数为(A)
A.n-1B.2n-1
C.n+1D.2n+1
14.一棵左右子树均不空的二叉树在先序线索化后,其空指针域数为(.B)
A.0B.1
C.2D.不确定
15.DFS算法的时间复杂度为(C)
A.0(n)B.0(n3)
C.0(n)D.0(n+e)
16、有n个叶子结点的哈夫曼(Huffman)树所具有的结点数为2n-1
17•判断线索二叉树中某结点指针P所指结点有左孩子的条件是P->ltag=1。
18、二叉树在线索化后,仍不能有效求解的问题是(D)。
A.先序线索二叉树中求先序后继B.中序线索二叉树中求中序后
继C.中序线索二叉树中求中序前驱D.后序线索二叉树中求后序后
继
21.指出下面函数FS的功能。
其中,p指向先序线索二叉树的某个结点
typedefenum{LINK,THERAD}flag;
typedefcharDataType;
typedefstructnode{
DataTypedata;
flagltag,rtag;
structnode*lchild,*rchild;
}BinNode;
BinNode*FS(BinNode*p)
{
if(p->ltag==LINK)
returnp->lchild;
else
returnp->rchild;
}
函数功能:
在先序线索二叉树中查找某结点的后继。
22.给定二叉树的两种遍历序列,分别是:
中序遍历序列:
DCBGEAHFIJK;后
序遍历序列:
DCEGBFHKJIA。
(1)请画出该树。
(2)画出与
(1)求得的二叉树对应的森林。
23.假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为
a
b
c
d
e
f
g
h
0.07
0.19
0.02
0.06
0.32
0.03
0.21
0.10
要求:
(1)为这8个字母设计哈夫曼编码,并画出哈夫曼树
(2)求该哈夫曼树的带权路径长度。
24•树的后根遍历方法是:
若树非空则
(1)依据次后根遍历根的各个子树T1,T2,……Tm;
(2)访问根结点。
对下图所示的树,用后根遍历方法进行遍历,请写出遍历所得到的结点访问序列。
25.假设一棵二叉树的先序序列为EBADCFHGIKJ和中序序列为ABCDEFGHIJK。
i.请画出该树。
ii.画出与
(1)求得的二叉树对应的森林。
26.已知一树的双亲表示法如下,其中各兄弟结点是依次出现的,画出该树及对应的二叉树。
123456789101112131415
data
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
parent
0
1
1
1
2
2
3
3
4
4
5
6
6
7
8
1•计算二叉树的深度的算法
IntdeepTree(p)//P为指向二叉树之根
{
lf(p==NULL)returnt;
Else
lf(deepTree(p->Lchild)>deepTree(p->Rchild))
ReturndeepTree(p->Lchild)+1;
Else
ReturndeepT「ee(p->Rchild)+1,
}
2、读程序二叉树以二叉链表作为存储结构,其定义如下:
TypedefstructNode{chardata;
StructNode*lc,*rc;/*lc,rc分别指向左,右子树*/}BiTNode,*BiTree;
Intn=0;
二叉树如右图,根的地址为root,请给出:
(1)下列函数的功能
(2)调用语句prek(root,5);输出结果是什么?
Voidprek(BiTreeT,intk)
{if(T&&nlc,k);
Prek(T->rc,k);
N++;printf(“%->d^1a);
}
}3、编写递归算法,计算二叉树中叶子结点的数目。
4.
设二叉树以二叉链表为存储结构,结点结构为在前根序列中处于第k个位置的结点
Bitreptrsearch(bitreptrt,intk)
{if(t!
=null)
{count++;
if(count==k)return(t);
else{search(t->lchild,k);
search(t->rchild,k);
}
}
}
5.以线索链表作为存储结构,写出后序线索树中查找
*p的后序前驱的算法。
第七章图
,图的存储(邻接矩阵、
知识点:
基本概念(度、完全图、连通子图、生成树、最小生成树)
邻接表),图的遍历,最小生