链接表示时呢?
4.设单链表结点指针域为next,试写出删除链表中指针p所指结点的直接后继的C语言语句。
五、算法设计题
1.假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。
请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。
2.已知非空线性链表由list指出,链结点的构造为(data,next).请写一算法,将链表中数据域值最小的那个链结点移到链表的最前面。
要求:
不得额外申请新的链结点。
3.设有一个由正整数组成的无序(向后)单链表,编写完成下列功能的算法:
(1)找出最小值结点,且打印该数值;
(2)若该数值是奇数,则将其与直接后继结点的数值交换;
(3)若该数值是偶数,则将其直接后继结点删除。
第3章栈和队列
一、选择题
1.对于栈操作数据的原则是()。
A.先进先出B.后进先出C.后进后出D.不分顺序
2.一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是()。
A.不确定B.n-i+1C.iD.n-i
3.若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是()。
A.i-j-1B.i-jC.j-i+1D.不确定的
4.有六个元素6,5,4,3,2,1的顺序进栈,问下列哪一个不是合法的出栈序列?
()
A.543612B.453126C.346521D.234156
5.输入序列为ABC,可以变为CBA时,经过的栈操作为()
A.push,pop,push,pop,push,popB.push,push,push,pop,pop,pop
C.push,push,pop,pop,push,popD.push,pop,push,push,pop,pop
6.若栈以向量V[1..n]存储,初始栈顶指针top为n+1,则下面x进栈的正确操作是()。
A.top:
=top+1;V[top]:
=xB.V[top]:
=x;top:
=top+1
C.top:
=top-1;V[top]:
=xD.V[top]:
=x;top:
=top-1
7.若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈(i=1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。
A.|top[2]-top[1]|=0B.top[2]+1=top[1]C.top[1]+top[2]=mD.top[1]=top[2]
8.一个递归算法必须包括()。
A.递归部分B.终止条件和递归部分C.递推部分D.终止条件和递推部分
9.设计一个判别表达式中左,右括号是否配对出现的算法,采用()数据结构最佳。
A.线性表的顺序存储结构B.队列C.线性表的链式存储结构D.栈
10.用链式方式存储的队列,在进行删除运算时()。
A.仅修改头指针B.仅修改尾指针C.头、尾指针都要修改D.头、尾指针可能都要修改
11.假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为()。
A.(rear-front+m)%mB.rear-front+1C.(front-rear+m)%mD.(rear-front)%m
12.最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。
A.(rear+1)%n=frontB.rear=frontC.rear+1=frontD.(rear-l)%n=front
13.设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是()。
A.6B.4C.3D.2
14.某个车站呈狭长型,宽度只能容下一辆车,并且只有一个出入口。
已知某时刻该车站状态为空,从这一时刻开始的出入纪录为:
“进,出,进,进,进,出,出,进,进,进,出,出”。
假设车辆入站的顺序为1,2,3,……,则车辆出站的顺序为()。
A.1,2,3,4,5 B.1,4,3,7,6 C.1,2,4,5,7 D.1,4,3,7,2
二、判断题
1.两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
()
2.即使对不含相同元素的同一输入序列进行两组不同的合法的入栈和出栈组合操作,所得的输出序列也一定相同。
()
3.若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列3,2,5,6,4,1。
()
4.栈和队列都是限制存取点的线性结构。
()
5.只有那种使用了局部变量的递归过程在转换成非递归过程时才必须使用栈。
( )
6.队列是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。
()
7.循环队列也存在空间溢出问题。
()
三、填空题
1._______是限定仅在表尾进行插入或删除操作的线性表。
2.一个栈的输入序列是:
1,2,3则不可能的栈输出序列是_______。
3.设有一个空的顺序栈,栈顶指针为1000H,现有输入序列为1,2,3,4,5,经过PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH之后,栈顶指针值是_______H。
每个元素占4个字节。
4.用I表示入栈操作,O表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的I和O的操作串为_______。
5.循环队列的引入,目的是为了克服_______。
6.设循环队列用数组A[1..M]表示,队首、队尾指针分别是front和rear,判定队满的条件为_______。
7.设循环队列存放在向量sq.data[0..M]中,则队头指针sq.front在循环意义下的出队操作可表示为_______。
四、应用题
1.有5个元素,其入栈次序为:
A,B,C,D,E,在各种可能的出栈次序中,以元素C,D最先出栈(即C第一个且D第二个出栈)的次序有哪几个?
2.设一数列的输入顺序为123456,若采用栈结构,并以I和O分别表示入栈和出栈操作,试问通过入出栈操作的合法序列。
(1)能否得到输出顺序为325641的序列。
(2)能否得到输出顺序为154623的序列。
3.用一个数组S(设大小为MAX)作为两个堆栈的共享空间。
请说明共享方法,栈满/栈空的判断条件,并用C语言写出入栈的操作。
五算法设计题
1.假设以I和O分别表示入栈和出栈操作。
栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。
(1)下面所示的序列中哪些是合法的?
A.IOIIOIOOB.IOOIOIIOC.IIIOIOIOD.IIIOOIOO
(2)通过对
(1)的分析,写出一个算法,判定所给的操作序列是否合法。
若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)。
2.请利用两个栈S1和S2来模拟一个队列。
已知栈的三个运算定义如下:
PUSH(ST,x):
元素x入ST栈;POP(ST,x):
ST栈顶元素出栈,赋给变量x;Sempty(ST):
判ST栈是否为空。
那么如何利用栈的运算来实现该队列的三个运算:
enqueue:
插入一个元素入队列;dequeue:
删除一个元素出队列;queue_empty:
判队列为空。
(请写明算法的思想及必要的注释)
3.试将下列递归过程改写为非递归过程。
voidtest(int&sum)
{intx;
scanf(x);
if(x=0)sum=0else{test(sum);sum+=x;}
printf(sum);
}
第4章串
一、选择题
1.下面关于串的的叙述中,哪一个是不正确的?
()
A.串是字符的有限序列B.空串是由空格构成的串
C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储
2.若串S1=‘ABCDEFG’,S2=‘9898’,S3=‘###’,S4=‘012345’,执行concat(replace
(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2)))
其结果为()
A.ABC###G0123B.ABCD###2345C.ABC###G1234D.ABC###G2345
3.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()
A.求子串B.联接C.匹配D.求串长
4.模式串t=‘abcaabbca’,该模式串的next数组的值为()。
A.011122111B.011121211
C.011100131D.011122311
5.串的长度是指()
A.串中所含不同字母的个数B.串中所含字符的个数
C.串中所含不同字符的个数D.串中所含非空格字符的个数
二、判断题
1.KMP算法的特点是在模式匹配时指示主串的指针不会变小。
()
2.设模式串的长度为m,目标串的长度为n,当n≈m且处理只匹配一次的模式时,朴素的匹配(即子串定位函数)算法所花的时间代价可能会更为节省。
()
3.串是一种数据对象和操作都特殊的线性表。
()
二、填空题
1.组成串的数据元素只能是________。
2.INDEX(‘DATASTRUCTURE’,‘STR’)=________。
3.设正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为________。
4.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,称P为____。
5.串是一种特殊的线性表,其特殊性表现在____。
6.串的两种最基本的存储方式是____。
7.两个字符串相等的充分必要条件是_______。
第5章数组和广义表
一、选择题
1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为()。
A.13B.33C.18D.40
2.若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij(iA.i*(i-1)/2+jB.j*(j-1)/2+iC.i*(i+1)/2+jD.j*(j+1)/2+i
3.有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是()。
A.60B.66C.18000D.33
4.对稀疏矩阵进行压缩存储目的是()。
A.便于进行矩阵运算B.便于输入和输出C.节省存储空间D.降低运算的时间复杂度
5.广义表((a,b,c,d))的表头是()。
A.aB.()C.(a,b,c,d)D.(b,c,d)
6.广义表((a,b,c,d))的表尾是()。
A.aB.()C.(a,b,c,d)D.(b,c,d)
7.设广义表L=((a,b,c)),则L的长度和深度分别为()。
A.1和1B.1和3C.1和2D.2和3
8.下面说法不正确的是()。
A.广义表的表头总是一个广义表B.广义表的表尾总是一个广义表
C.广义表难以用顺序存储结构D.广义表可以是一个多层次的结构
二、判断题
1.从逻辑结构上看,n维数组的每个元素均属于n个向量。
()
2.稀疏矩阵压缩存储后,必会失去随机存取功能。
()
3.数组是同类型值的集合。
()
4.数组可看成线性结构的一种推广,与线性表一样,可以对它进行插入,删除等操作。
()
5.一个稀疏矩阵Am*n采用三元组形式表示,若把三元组中有关行下标与列下标的值互换,并把m和n的值互换,则就完成了Am*n的转置运算。
()
6.二维以上的数组其实是一种特殊的广义表。
()
7.若一个广义表的表头为空表,则此广义表亦为空表。
()
8.广义表中的元素或者是一个不可分割的原子,或者是一个非空的广义表。
()
9.广义表的同级元素(直属于同一个表中的各元素)具有线性关系。
()
三、填空题
1.数组的存储结构采用_______存储方式。
2.二维数组a[4][5][6](下标从0开始计,a有4*5*6个元素),每个元素的长度是2,则a[2][3][4]的地址是____。
(设a[0][0][0]的地址是1000,数据以行为主方式存储)
3.己知三对角矩阵A【1..9,1..9】的每个元素占2个单元,现将其三条对角线上的元素逐行存储在起始地址为1000的连续的内存单元中,则元素A[7,8]的地址为______。
4.所谓稀疏矩阵指的是_______。
5.当广义表中的每个元素都是原子时,广义表便成了_______。
第6章树和二叉树
一、选择题
1.已知一算术表达式的中缀形式为A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为()A.-A+B*C/DEB.-A+B*CD/EC.-+*ABC/DED.-+A*BC/DE
2.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1则T中的叶子数为()A.5B.6C.7D.8
3.在下述结论中,正确的是()
①只有一个结点的二叉树的度为0;②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。
A.①②③B.②③④C.②④D.①④
4.设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是()
A.m-nB.m-n-1C.n+1D.条件不足,无法确定
5.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()
A.250B.254C.500D.501
6.设给定权值总数有n个,其哈夫曼树的结点总数为()
A.不确定B.2nC.2n+1D.2n-1
7.有关二叉树下列说法正确的是()
A.二叉树的度为2B.一棵二叉树的度可以小于2
C.二叉树中至少有一个结点的度为2D.二叉树中任何一个结点的度都为2
8.二叉树的第I层上最多含有结点数为()
A.2IB.2I-1-1C.2I-1D.2I-1
9.一个具有1025个结点的二叉树的高h为()
A.11B.10C.11至1025之间D.10至1024之间
10.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有()结点
A.2hB.2h-1C.2h+1D.h+1
11.一棵具有n个结点的完全二叉树的树高度(深度)是()
A.log2n+1B.log2n+1C.log2nD.log2n-1
12.深度为h的满m叉树的第k层有()个结点。
(1=A.mk-1B.mk-1C.mh-1D.mh-1
13.高度为K的二叉树最大的结点数为()。
A.2kB.2k-1C.2k-1D.2k-1-1
14.一棵树高为K的完全二叉树至少有()个结点
A.2k–1B.2k-1–1C.2k-1D.2k
15.将有关二叉树的概念推广到三叉树,则一棵有244个结点的完全三叉树的高度()
A.4B.5C.6D.7
16.对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用()次序的遍历实现编号。
A.先序B.中序C.后序D.从根开始按层次遍历
17.树的后根遍历序列等同于该树对应的二叉树的().
A.先序序列B.中序序列C.后序序列D从根开始按层次遍历
18.若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用()遍历方法最合适。
A.前序B.中序C.后序D.按层次
19.在下列存储形式中,哪一个不是树的存储形式?
()
A.双亲表示法B.孩子链表表示法C.孩子兄弟表示法D.顺序存储表示法
20.二叉树的先序遍历和中序遍历如下:
先序遍历:
EFHIGJK;中序遍历:
HFIEJKG。
该二叉树根的右子树的根是:
A、EB、F C、G D、H