for(j=1;j<=n-i;j++)
x++;
4.i=1;
while(i<=n)
i=i*3;
第二章线性表
一、填空(每空1分,共18分)
1、在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。
2、向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动个元素。
3、向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动个元素。
4、在顺序表中访问任意一结点的时间复杂度均为,因此,顺序表支持访问。
5、顺序表中逻辑上相邻的元素的物理位置相邻。
单链表中逻辑上相邻的元素的物理位置相邻。
6、在带头结点的非空单链表中,头结点的存储位置由 指示,首元素结点的存储位置由 指示,除首元素结点外,其它任一元素结点的存储位置由 指示。
7、在n个结点的单链表中要删除已知结点*p,需找到它的,其时间复杂度为。
8、已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点。
a.在P结点后插入S结点的语句序列是:
。
b.在P结点前插入S结点的语句序列是:
。
c.在表首插入S结点的语句序列是:
。
d.在表尾插入S结点的语句序列是:
二、判断正误(在正确的说法后面打勾,反之打叉)(每小题1分,共10分)
()1、链表的每个结点中都恰好包含一个指针。
()2、顺序存储结构只能用来存放线性结构;链式存储结构只能用来存放非线性结构。
()3、链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动将后续各个单元向前移动。
()4、顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
()5、顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
()6、线性表在物理存储空间中也一定是连续的。
()7、线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。
()8、顺序存储方式只能用于存储线性结构。
()9、线性表的逻辑顺序与存储顺序总是一致的。
三、单项选择题(每小题2分,共20分)
()1、数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为:
A、存储结构B、逻辑结构C、顺序存储结构D、链式存储结构
()2、在n个结点的顺序表中,算法的时间复杂度是O
(1)的操作是:
A、访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)
B、在第i个结点后插入一个新结点(1≤i≤n)
C、删除第i个结点(1≤i≤n)
D、将n个结点从小到大排序
()3、下面关于线性表的叙述错误的是。
A、线性表是一个有限序列,可以为空
B、一个顺序表所占用的存储空间的大小与顺序表中各元素的存放次序无关
C、链表可随机访问任一元素
D、顺序表比链表的存储密度大
()4、链表不具有的特点是 。
A、可随机访问任一个元素B、插入删除不需要移动元素
C、不必事先估计存储空间 D、所需空间与线性表的长度成正比
()5、链接存储的存储结构所占存储空间:
A、分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
B、只有一部分,存放结点值
C、只有一部分,存储表示结点间关系的指针
D、分两部分,一部分存放结点值,另一部分存放结点所占单元数
()6、对于只在表的首、尾进行插入操作的线性表,宜采用的存储结构为:
。
A、顺序表B、用头指针表示的单循环链表
C、用尾指针表示的单循环链表D、单链表
()7、线性表若采用链式存储结构时,要求内存中可用存储单元的地址:
A、必须是连续的B、部分地址必须是连续的
C、一定是不连续的D、连续或不连续都可以
()8、线性表L在情况下适用于使用链式结构实现。
A、需经常修改L中的结点值B、需不断对L进行删除插入
C、L中含有大量的结点D、L中结点结构复杂
()9、单链表的存储密度
A、大于1B、等于1C、小于1D、不能确定
第三章栈和队列
一、选择题
1、一个栈的输入序列为A,B,C,D,则借助一个栈所得到的输出序列不可能的是 。
A、A,B,C,DB、D,C,B,A
C、A,C,D,B D、D,A,B,C
2、S最多能容纳4个元素。
现有6个元素按A、B、C、D、E、F的顺序进栈,问下列哪一个序列是可能的出栈序列?
。
A、E,D,C,B,A,FB、B,C,E,F,A,D
C、C,B,E,D,A,FD、A,D,F,E,B,C
3、设链式栈中结点的结构为(data,next),且top是指向栈顶的指针。
若想在链式栈的栈顶插入一个由指针s所指的结点,则应执行下列哪一个操作?
。
A、top->next=s;B、s->next=top->next;top->next=s;
C、s->next=top;top=s;D、s->next=top;top=top->next;
4、一个队列的入队序列是1,2,3,4,则队列的输出序列是 。
A、4,3,2,1B、1,2,3,4C、1,4,3,2D、3,2,4,1
5、设循环队列的结构是
constintMaxSize=100;
typedefintDataType;
typedefstruct{
DataTypedata[MaxSize];
intfront,rear;
}Queue;
若有一个Queue类型的队列Q,试问判断队列满的条件应是下列哪一个语句?
。
A、Q.front==Q.rear;B、Q.front-Q.rear==MaxSize;
C、Q.front+Q.rear==MaxSize;D、Q.front==(Q.rear+1)%MaxSize;
6、设循环队列的结构是
constintMaxSize=100;
typedefintDataType;
typedefstruct{
DataTypedata[MaxSize];
intfront,rear;
}Queue;
若有一个Queue类型的队列Q,试问应用下列哪一个语句计算队列元素个数?
。
A、(Q.rear-Q.front+MaxSize)%MaxSize;B、Q.rear-Q.front+1;
C、Q.rear-Q.front-1;D、Q.rear-Qfront;
7、以下哪一个不是队列的基本运算?
。
A、从队尾插入一个新元素B、从队列中删除第i个元素
C、判断一个队列是否为空D、读取队头元素的值
二、简答题
第四章串
一、选择题
1、下面关于串的叙述中,哪一个是不正确的?
。
A、串是字符的有限序列B、空串是由空格构成的串
C、模式匹配是串的重要运算D、串既可顺序存储,也可采用链式存储
2、串是一种特殊的线形表,其特殊性体现在____ _。
A、可以顺序存储B、数据元素是一个字符
C、可以链接存储D、数据元素可以是多个字符
3、设有2个子串s和t,判断t是否为s子串的算法称为。
A、求子串B、串联接C、串匹配D、求串长
4、长度为1的串等价于一个字符型常量,这种说法是。
A、正确的B、错误的
二、简答题
设s=’IAMASTUDENT’, t=’GOOD’, q=’WORKER’。
给出下列操作的结果:
StrLength(s); SubString(sub1,s,1,7);SubString(sub2,s,7,1);StrIndex(s,’A’,4);StrReplace(s,’STUDENT’,q);StrCat(StrCat(sub1,t),StrCat(sub2,q))。
*设主串为”abcaabbabcabaacbacba”模式串为”abcabaa”。
计算模式串的next,nextval函数值,并给出利用nextval函数值进行KMP模式匹配的每一趟过程。
第五章数组和广义表
一、选择题
1、稀疏矩阵一般的压缩存储方法有两种,即。
A、数组和三维数组B、三元组和散列
C、三元组和十字链表D、散列和十字链表
2、若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点()。
A、正确B、错误
3、已知对称矩阵A10*10,将其下三角的元素按行优先顺序压缩存储在一维数组B[55]中,其中a1,1存于B[0]中,则元素a5,9在数组B中的下标是()。
A、17B、19C、40D、41
4、数组元素的下标值越大,存取时间越长,这种说法是。
A、正确的B、错误的
5、广义表(a,(b),((c)))的表尾是。
A、((c))B、(((c)))
C、(c)D、((b),((c)))
二、填空题
1、一维数组的逻辑结构是,存储结构是。
对于二维数组,
有和两种不同的存储方式。
对于一个二维数组A[m][n],若采取按行存储的方式,则任一数组元素A[i][j]相对于A[0][0]的地址为。
2、二维数组A[10][20]采用列序为主方式存储,每个元素占一个存储单元,并且A[0][0]的存储地址是200,则A[6][12]的地址是。
三、简答题
1、求下列广义表运算的结果:
(1)GETHEAD[((a,B,(c,D)))];
(2)GETTAIL[((a,B,(c,D)))];
(3)GETTAIL[GETHEAD[((a,B,(c,D)))]];
(4)GETHEAD[GETTAIL[GETHEAD[((A,B,(C,D)))]]];
2、设广义表L=((),()),则GETHEAD(L)是;GETTAIL(L)是;L的长度是;深度是。
第六章树与森林
一、选择题(每题1分,共12分)
1、设二叉树有n个结点且根结点处于第1层,则其高度为()。
A、n-1B、log2(n+1)-1C、log2n+1D、不确定
2、设高度为h(空二叉树的高度为0,只有一个结点的二叉树的高度为1)的二叉树只有度为2和度为0的结点,则该二叉树中所含结点至少有()个。
A、2hB、2h-1C、2h+1D、h+1
3、设森林F中有4棵树,第1、2、3、4棵树的结点个数分别为n1、n2、n3、n4,当把森林F转换成一棵二叉树后,其根结点的右子树中有()个结点。
A、n1-1B、n1+n2+n3C、n2+n3+n4D、n1
4、将含有82个结点的完全二叉树从根结点开始顺序编号,根结点为第1号,其他结点自上向下,同一层自左向右连续编号。
则第40号结点的双亲结点的编号为()。
A、20B、19C、81D、80
5、对二叉树从1开始编号,要求每个结点的编号大于其左右孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用()实现编号。
A、先序遍历 B、中序遍历 C、后序遍历 D、从根开始进行层次遍历
6、某二叉树的先序序列和后序序列正好相反,则该二叉树一定是()的二叉树。
A、空或只有一个结点 B、高度等于其结点数
C、任一结点无左孩子 D、任一结点无右孩子
7、二叉树按某种顺序线索化后,任一结点均有指向其前趋和后继的线索,这种说法()。
A、正确B、错误
8、二叉树的前序遍历序列中,任意一个结点均处在其子女结点的前面,这种说法()。
A、正确B、错误
9、设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为()。
A、2hB、2h-1C、2h+1D、h+1
10、已知某二叉树有512个结点,其高度为()。
A、9B、10C、512D、10~512之间
11、一颗完全二叉树有768个结点,则该二叉树中叶子结点的个数是()。
A、257B、258C、383D、384
12、设某棵二叉树的中序遍历序列为ABCD,后序遍历序列为BADC,则先序遍历该二叉树得到的顶点序列为()。
A、CABDB、ABCDC、CDABD、CBDA
二、填空题(每空1分,共7分)
1、N个结点的二叉树采用二叉链表存放,共有空链域个数为。
2、一棵含有101个结点的完全二叉树存储在数组A[1..101]中,对1≤k≤101,若A[k]是非叶子结点,则k的最小值是:
,k的最大值是:
。
3、设根结点的层数为1,则高度为k的二叉树具有的结点数目,最少为,最多为。
4、含有20个结点的完全二叉树,编号为6的结点的左孩子的编号是。
5、一棵二叉树有67个结点,这些结点的度要么是0,要么是2。
这棵二叉树中度为2的结点有个。
6、将一棵有50个结点的完全二叉树从根结点开始,由根向下,每一层从左至右,顺序地存储在一个一维数组bt[1..50]中,这棵二叉树最下面一层上最左边一个结点存储在数组元素bt[]中。
三、判断题(每小题1分,共11分)
()1、树结构和二叉树结构都是树形结构,所以它们是相同的数据结构。
()2、满二叉树的结点个数必为奇数。
()3、若有一个结点是二叉树中某个子树的前序遍历结果序列的最后一个结点,则它一定是该子树的中序遍历结果序列的最后一个结点。
()4、将一棵树转换为二叉树表示后,该二叉树的根结点没有右子树。
()5、采用二叉树来表示树时,树的先根次序遍历结果与其对应的二叉树的前序遍历结果是一样的。
()6、二叉树中所有结点个数是2k-1-1,其中k是树的深度。
()7、在Huffman树中,权值较大的叶子结点离根较远。
()8、哈夫曼树根结点的权值等于所有叶结点的权值之和。
()9、如果一个二叉树中没有度为1的结点,则必为满二叉树。
()10、由二叉树结点的先根序列和后根序列可以唯一地确定一棵二叉树。
四、简答题(共21分)
1、(3分)在结点个数为n(n>1)的各棵树中,高度最小的树的高度(根结点在第1层)是多少?
它有多少个叶结点?
多少个分支结点?
高度最大的树的高度(根结点在第1层)是多少?
它有多少个叶结点?
多少个分支结点?
2、(5分)若有3个数据1,2,3,由它们构造出来的中序遍历结果都为1,2,3的不同二叉树有哪些?
3、(3分)试分别找出满足以下条件的所有二叉树:
二叉树的前序序列与中序序列相同;
二叉树的中序序列与后序序列相同;
二叉树的前序序列与后序序列相同。
五、构造题(每小题6分,)
1、已知一棵二叉树的前序遍历结果是ABECDFGHIJ,中序遍历结果是EBCDAFHIGJ,试画出这棵二叉树,并写出它的后序遍历序列。
2、假定用于通信的电文仅由8个字母c1,c2,c3,c4,c5,c6,c7,c8组成,各字母在电文中出现的频度分别为5,25,3,6,10,11,36,4。
试为这8个字母设计不等长Huffman编码,并给出该电文的总码数。
3、画出和下列树对应的二叉树:
六、算法设计题(每题6分,共24分)
1、若用二叉链表作为二叉树的存储表示,试编写递归算法,统计二叉树中叶结点的个数。
2、编写算法,求二叉树中度为0的结点数。
二叉树的类型定义如下:
typedefstructnode{
ElemTypedata;
structnode*lchild,*rchild;
}BTNode,*BiTree;//BTNode为结点类型,BiTree为指向结点的指针类型
第七章图
一、选择题
1、在一个图中,所有顶点的度数之和等于所有边数的倍。
A、1/2B、1C、2D、4
2、在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。
A、1/2B、1C、2D、4
3、一个有n个顶点的无向图最多有()条边。
A、nB、n(n-1)C、n(n-1)/2D、2n
4、在一个具有n个顶点的无向图中,要连通全部顶点至少需要条边。
A、nB、n+1C、n-1D、n/2
5、对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小。
A、nB、(n-1)2C、n-1D、n2
6、对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表头向量的大小为①,所有邻接表中的结点总数是②。
①A、nB、n+1C、n-1D、n+e
②A、e/2B、eC、2eD、n+e
7、采用邻接表存储的图的深度优先遍历算法类似于二叉树的。
A、先序遍历B、中序遍历C、后序遍历D、按层遍历
8、用Prim算法求下列连通的带权图的最小代价生成树,在算法执行的某刻,已选取的顶点集合U={1,2,3},边的集合TE={(1,2),(2,3)},要选取下一条权值最小的边,应当从组中选取。
A、{(1,4),(3,4),(3,5),(2,5)}
B、{(4,5),(1,3),(3,5)}
C、{(1,2),(2,3),(3,5)}
D、{(3,4),(3,5),(4,5),(1,4)}
9、任何一个无向连通图的最小生成树 。
A、只有一棵 B、有一棵或多棵C、一定有多棵 D、可能不存在
10、如果从无向图的任一顶点出发进行一次深度优先遍历即可访问所有顶点,则该图一定是。
A、非连通图B、连通图C、强连通图D、有向
11、对如图所示的有向图进行拓扑排序,得到的拓扑序列可能是。
A、3,1,2,4,5,6
B、3,1,2,4,6,5
C、3,1,4,2,5,6
D、3,1,4,2,6,5
二、填空题
1、在无向图的邻接矩阵A中,若A[i][j]=1,则A[j][i]=。
2、在一个无环有向图G中,若存在一条从顶点i到顶点j的弧,则在顶点的拓扑序列中,顶点i与顶点j的先后次序是。
三、判断题(判断下列叙述的对错。
如果正确,在题前的括号内填入“”,否则填入“”。
)
1、()用邻接矩阵存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中的顶点个数有关,而与图的边数无关。
2、()对任何用顶点表示活动的网络(AOV网)进行拓扑排序的结果都是唯一的。
3、()有回路的有向图不能完成拓扑排序。
4、()有n(n≥1)个顶点的无向连通图最少有n-1条边。
5、()在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和。
6、()图G的一棵最小代价树的代价一定小于该图其它任何一棵生成树的代价。
7、()一个无向图的邻接矩阵中各元素之和与图中边的条数相等。
四、解答题
1、用邻接矩阵表示有向图时,若图中有1000个顶点,1000条边,则形成的邻接矩阵有多少矩阵元素?
有多少非零元素?
2、若已给出一个有向图的邻接矩阵,则计算第i个顶点的入度的方法是什么?
删除所有从第i个顶点发出的边的方法是什