则需要移动表中的()个元素,表的长度变为();若删除表中的第i(1<运n)个元素,
则需要移动表中的()个元素,表的长度变为()。
[解析]n-i+1;n+1;n-i;n-1
4•一个栈的初始状态为空。
现将元素1、2、3、4、5、A、B、CD、E依次入栈,然后再依
次出栈,则元素出栈的顺序是()
A.12345ABCDEB.EDCBA54321C.ABCDE12345D.54321EDCBA
[解析]栈是按照“先进后出(FILO)”或“后进先出(LIFO)”的原则组织数据的,栈职能在栈顶插入数据(称为入栈)和删除数据(称为出栈)。
现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素的出栈顺序是EDCBA54321。
所以B
5.下列关于栈的描述中错误的是()
A•栈是先进后出的线性表B•栈职能顺序存储
C.栈具有记忆作用D.对栈的插入与删除操作中,不需要改变栈底指针
[解析]栈是一种先进后出的线性表;栈既可以顺序存储,也可以链式存储;栈可以用开保护断点信息,具有记忆作用;只允许在栈顶插入和删除元素,所以对栈的插入与删除操作,不要用改变栈底指针
1.线性表的存储结构主要分为顺序存储结构和链式存储结构。
队列是一种特殊是线性表,
循环队列是队列的存储结构。
[解析]顺序
2.数据结构分为线性结构和非线性结构,带链的队列属于
[解析]线性总结:
常用的数据结构比如:
线性表、栈、队列是线性结构(不管是采用
顺序存储还是链式存储结构);树、二叉树、图都是非线性结构(不管是采用顺序存储结构还是链式存储结构)
3.已知元素的入栈顺序为abcde,则下列哪种出栈顺序是不可能的?
()
A.edcbaB.cabdeC.dcbaeD.bcdea
[解析]abcde依次入栈,再再次出栈,得到出栈顺序edcba,所以选项A可能;选项B,第一
个出栈的是C,可以肯定栈中有b、a,等待入栈的是d、e,此时出栈的可能是b或d(d入
栈马上出栈),不可能是a,所以选项B不可能;选项C,第一个出栈的是d,可以肯定栈中有c、b、a,等待入栈的是e,此时出栈的可能是c或e,若c、b、a依次出栈,e入栈马上出栈,刚好得到出栈顺序dcbae,因此选项C可能;选项D,第一个出栈的是b,可以肯定
栈中有a,等待入栈的是c、d、e,c、d、e分别入栈又出栈得到出栈顺序bcde,最后a出
栈,行号得到出栈顺序bcdea,所以选项D可能。
因此本题正确答案是B。
4.假如刚开始时栈为空,依次有A、B、C、D四个元素入栈,此时栈底指针指向元素___,栈顶指针值为___(假如每个元素的长度为1)。
执行四次出栈操作后把E、F、G压入栈,问此时栈底指针指向元素___,此时栈的长度为___.
[解析]A;4;E;3
5.下列叙述中正确的是
A•循环队列有对头和队尾两个指针,因此,循环队列是非线性结构
B.在循环队列中,只需要对头指针就能反应队列中元素的动态变化情况
C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况
D.循环队列中元素的个数是由对头指针和队尾指针共同决定
[解析]所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。
在循环队列中,用队尾指针rear指向队列中的队尾元素,用
排头指针front指向排头元素的前一个位置,因此,从排头指针front指向的后一个位置直到队尾指针real指向的位置之间所有的元素均为队列中的元素。
求解队列中元素个数的方法是:
若front>rear,队列中有n-front+rear个元素(其中n为循环队列的容量);若frontvrear,队列中有real-front个元素;若front=rear,队列中有n个或0个元素。
循环队列是线性结构。
所以D
6.在一个容量为15的循环队列中,若头指针front=6,尾指针rear=4,则该循环队列中共
有个元素;若front=4,rear=6,则该循环队列中有个元素;若front=6,rear=6,
则该循环队列中共有个元素。
[解析]本题主要考查对循环队列的存储形式和入队运算、出队运算的理解。
求解队列中元素
个数的方法是:
1.若front>rear,队列中有n-front+rear个元素(其中n为循环队列的容量);
2.若frontvrear,队列中有real-front个元素;
3.若front=rear,队列中有n个或0个元素。
循环队列是线性结构。
所以13;2;0或15
1.下列对于线性链表的描述中正确的是()
A.存储空间不一定是连续,且各元素的存储顺序是任意的
B.存储空间不一定是连续,且前件元素一定存储在后件元素的前面
C.存储空间必须连续,且前件元素一定存储在后件元素的前面
D•存储空间必须连续,且各元素的存储顺序是任意的
[解析]线性链表是通过增加一个指针域来把相邻的数据元素链接成一个线性序列。
线性链表的这种结构使得它存储数据的空间可以是离散的,并不像顺序表那样一定要求物理上的连续空间。
所以A
2.在线性链表的插入算法中,若要把结点q插在结点p后面,下列操作正确的是()
A.使结点p指向结点q,再使结点q指向结点p的后件结点
B.使结点q指向p的后件结点,再使结点p指向结点q
C.使结点q指向结点P,再使结点P指向结点q的后件结点
D.使结点p指向q的后件结点,再使结点q指向结点p
[解析]在修改结点指针域的操作中,有一个操作顺序的问题。
比较选项A和B只是操作顺序
颠倒了一下。
A中先使结点p指向q后,q就称为p新的后件结点了,原先通过结点p指向的后件结点与结点p脱节了那么后面的一步操作没有任何意义的。
使结点q指向p的后件结
点即使结点q成为自己的后件结点。
按照B指定的顺序操作就不会出现引用结点p的指针域之前已经把它的值修改了的情形。
至于C和D是命题者设计的干扰项想让考生把p和d
的顺序搞混。
总结,做这种类型的试题,最好画图。
插入结点:
若结点p的后面是结点s,要在p和s之
间插入结点q,一般先将结点q指向结点s,再讲结点p指向q,顺序不能颠倒。
删除
结点:
若结点p的后面是结点q,结点q的后面是结点s,若要删除结点q,只需将结点p指向s即可。
3.在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为()
A.63B.64C.6D.7
[解析]只要是顺序查找(不管线性表是有序还是无序),都是从表头到表尾逐个比较,若相同则结束查找,否则一直继续比较下一个表中元素,指导整个表都遍历完。
对于长度为64
的线性表,平均要进行64/2=321次比较,在最坏的情况下要进行64次比较。
若采用二分(折半)查找,则最坏情况下需要比较的次数为log264=6次,弹药注意采用二分(折半)查找
的条件,必须是线性表采用顺序存储结构,而且线性表中的元素要有序,这两个条件缺一不可。
若对线性链表进行查找,则不管线性链表中的元素是有序还是无序职能采用顺序查找。
因此本题B.
4.在一个nxm的二维线性表中顺序查找一个数据元素的算法时间复杂度是()
A.0(n+m)B.0(nxm)C.O(n2)C.O(m2)
[解析]在一维线性表中顺序查找一个数据元素的算法时间复杂度是O(n),其中n是线性表
的长度,二维线性表的顺序查找方法和一维线性表相似,只不过是多了一维罢了。
在二维表中进行顺序查找有两个方法:
一是把二维线性表看成是n个长度为m的一维线性表,顺序
查找就是对这n个一维线性表依次实施顺序查找,因此它的算法时间复杂度是0(n)
xO(m)=O(nxm);二是直接把nxm的二维线性看成一个nxm的一维线性表,那么在它当中用顺序查找法查找一个元素的算法时间复杂度是0(nxm)。
5..下列叙述中正确的是()
A.线性链表是线性的链式存储结构B.栈与队列是非线性结构
C.双向链表是非线性结构D.只有根结点的二叉树是线性结构
[解析]线性表的链式存储结构称为线性链表;栈、队列、双向链表都是线性结构;树、二叉树(不管它有多少个结点)都是非线性结构。
所以A
6.下列关于链表结构的叙述正确的是()
A.线性链表、带链的栈和带链的队列的结点的结构都是相同的
B.双向链表也就是循环链表
C.线性链表与带链的结点的结构是不同的
D.在循环链表中通过任意一个结点可以找到链表中其他所有的结点,而在双向链表中做不到这一点
[解析]A、C线性链表、带链的栈和带链的队列:
结点(表示数据元素)=数据域(数据元素
的映像)+指针域(指示后继元素存储位置)。
B、D双向链表:
也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分表指向直接后继和直接前驱。
循环链表:
循环链表
是另一种形式的链式存储结构,它的特点是表中最后一个结点的指针域指向头结点,整个链
表形成一个环。
1.一棵度数为4的树,它的4度结点有1个,3度结点有2个,2度结点有3个,1度结点4个,问它的叶子结点有多少个?
A.5B.6C.9D.11
[解析]如果注意观察树的结构,你会发现树中的结点数总是比树中的分支数多,其实也可以这么理解:
如果在根结点前面加一条分支线,那么分支数和结点数就一样多了。
在树的结点里,n度结点可以射出条分支,叶子结点是0度结点,因此它射出的分支数为0。
此题中指
导了1到4度结点的个数,就可以计算出树的总分支数:
4X1+3X2+2X3+1X4=20.因此树
的总结点数是21,减去其他读书的结点数10就得到0度结点(叶子结点)的个数11了。
所以D
2.在深度为7的满二叉树中,叶子结点的个数为()
A.32B.31C.64D.63
[解析]在满二叉树中每层的结点数都达到最大值,而且叶子结点全部出现在最底层。
第1层
(根结点所在的层)有20个结点,第2层有21个结点,……第n层有2n-1个结点。
在深度
为7的满二叉树中,第7层有27-1=64个结点(全部是叶子结点),在深度为7的满二叉树中,共有27-1=64个结点,本题为C
3.某二叉树有5个度为2的结点,则该项树中的叶子结点数是()
A.10B.8C.6D.4
[解析]根据二叉树的性质,在任意二叉树中,度为0的结点(即叶子结点)数总是比度为2
的结点数多一个。
所以C
4.某二叉树中有n个度为2的结点,则该二叉树中的叶子结点为()
A.n+1B.n-1C.2nD.n/2
[解析]二叉树具有这样一个性质:
在任意一棵二叉树中,度为0的结点(叶子结点)总是比
度为2的结点多一个。
所以某二叉树中共有n个度为2的结点,则该二叉树的叶子结点数为n+1。
所以本题为A
5.一科二叉树中共有70个叶子结点和80个度为1的结点,该二叉树的总结点数为()
A.219B.221C.229D.231
[解析]二叉树具有这样一个性质:
在任意一棵二叉树中,度为0的结点(叶子结点)总是比
度为2的结点多一个。
本题告知,叶子结点有70个,那度为2的结点既有69个,度为1的结点有80个,这颗二叉树共有70+69+80=219个结点。
所以A
6.在深度为7的满二叉树中,度为2的结点个数为()
[解析]满二叉树的定义是除最后一层外,每一层的所有结点都有两个子结点(即每一层上的结点数均达到最大值)。
第1层(根结点在第1层)拥有的结点数是20=1,第2层拥有的结点数是21=2,第3层拥有的结点数是22=4,……,第n层拥有的结点数是2n-1。
在深度为7的满二叉树中,叶子结点全部在第7层,其余结点都是2度结点。
在满二叉树中,第7层拥有的结点数是27-1=64。
二叉树具有这样一个性质:
在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个,所以度为2的结点个数为64-1=63。
7.具有8个结点的完全二叉树中编号为4的结点的右子结点的编号为()
A.8B.9C.无此结点D.8或9
[解析]设完全二叉树共有n个结点,如果从根结点开始,按层序(每一层从左到右)用自然
数1,2,…,n给结点进行编号(i=1,2,…,n),有以下结论:
1.若i=1,则该结点为根结点,它没有父结点;若i>1,则该结点的父结点编号为[i/2];其
中[i/2]表示取i/2的整数部分。
2.若2i>n,该结点无左子结点(也无右子结点);若2i3.若2i+1>n,该结点无右子结点;若2i+1wn,则编号为i的结点的右子结点编号为2i+1。
所以本题为C
1.设一棵二叉树的中序遍历结果为DBEACF前序遍历结果为ABDECF则后续遍历结果为()
[解析]我们可以根据前序遍历的结果ABDECF确定第一个元素A是根结点,再看中序遍历
的结果DBEACFA前面的DBE应该在左子树,A后面的FC应该在右子树。
根据前序遍历的结果和中序遍历的结果,我们可以推导出:
A是根结点,B是A的左结点,D是B的左结点,
E是B的右结点,C是A的右结点,F是C的右结点。
画出二叉图,对后续遍历的结果为DEBFCA.
2.树是一种简单的结构,在树中,所有数据元素之间的关系具有明显的特征。
[解析]非线性;层次
3.拥有奇数个结点的完全二叉树中有4个内部结点(非叶子结点),请问它的叶子结点数是[解析]5[分析]由于完全二叉树是自上而下、自左而右的从1开始连续编码的,因此完全
二叉树要么不存在一度结点(当结点个数为奇数个数时),要么存在一个一度结点,而且唯一的一个一度结点就是最后编号为n(n为偶数)的叶子结点的父结点。
而在二叉树中零度
结点个数总比二度结点个数多1,因此拥有4个二度结点的二叉树的叶子结点个数是4+1=5.
总结,设n为完全二叉树的结点数,no为叶子结点数,ni为度为1的结点数,n2为度为2的结点数,贝Vn=no+ni+n2,no=n2+1。
若n为奇数,则n1=0;若n为偶数,则ni=1(注意一定要是完全二叉树)。
4.设一棵完全二叉树共有700个结点,则在该二叉树中有()个叶子结点。
[解析]完全二叉树的特点:
如果结点总数是偶数则(度为1的结点)N1=1;如果结点总数为奇数,则N1=o;二叉树始终n0=n2+1,n2=no-1,结点总数=n0+n什n2(将n2=no-1,n1=1代入
公式);则有700=n0+1+n0-1,所以n0=350
5.具有16个结点的完全二叉树的深度为()
[log2n]+1,所以具有16个结
[解析]5;二叉树的特点:
具有n个结点的完全二叉树的深度为点的完全二叉树的深度为[log216]+1=5
6.在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是
A.O(n)B.O(n2)C.O(log2n)D.O(nlog2n)
[解析]对于长度为n的线性表进行顺序查找,平均要进行n/2次比较,在最坏情况下要进行n次比较;对于长度为n的线性表进行二分查找,在最坏的情况下要进行log2n次比较(但
二分查找要求线性表是顺序存储的有序表)。
因此本题答案为C
7.请写出用二分查找法在有序顺序表{1,2,3,4,6,8,9,11}中查找3的比较序列()
[解析]4,2,3;可采用擦去法做这类二分法查找序列的题:
每次从序列中找出中间元素,刚开始时是4,由于3比4小,只能存在在4之前的序列中,于是把4以后的序列擦去,只剩下序列{1,2,3},在重复以上过程直到查找元素或是序列为空。
1.通过相邻数据元素的交换逐步使线性表变成有序的排序方法是()
A.冒泡排序法B.简单选择排序法C.简单插入排序法D.希尔排序法
[解析]冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序,每次只能消除一个逆序。
简单插入排序法,是将无序序列中的元素插入有序的线性表中,并依次与前面的元素进行比较,直到大于前面的元素为止,最多需要比较n(n-1)/2次。
希尔排序法是简单插入排序法的优化,每进行依次可以消除多个逆序。
简单选择排序法是指扫描整个线性表,从中选出最小的元素,将它交换到表的最前面,然后对剩下的子表采用同样的方法,直到子表空为止。
2.冒泡排序在最坏情况下的比较次数是()
A.n(n+1)/2B.nlog2nC.n(n-1)/2D.n/2
[解析]对于长度为n的线性表,在最坏的情况下,冒泡排序需要进行的比较次数是n(n-1)
/2。
本题答案为C
2.快速排序法属于()
A.选择类排序法B.交换类排序法C插入类排序法D.归并类排序法
[解析]交换类排序法包括冒泡和快速排序法;插入类排序法包括简单插入和希尔排序法;选择类排序法包括简单选择和堆排序法。
本题为B
3.下列排序方法中,最坏情况下比较次数最少的是()
A.冒泡排序B.简单选择排序C直接插入排序D.堆排序
[解析]冒泡排序、简单选择排序和直接插入排序法在最坏的情况下的比较次数为n(n-1)/2。
而堆排序法在最坏情况下的比较次数为0(nlog2n),本题为D
4.长度为10的顺序表的首地址是1023开始的,顺序表中每个元素的长度为2,在第4个元素前面插入一个元素和删除第7个元素后,顺序表的总长度还是不变。
问顺序表中第5个元素在执行插入和删除操作后在顺序表中的存储地址是()
A.1028B.1029C.1031D.1033
[解析]由于问的是原来顺序表中的第5个元素,它在插入操作后变成了第6个元素(因为插入的元素在它前面)。
由于删除的第7个元素在它后面,不会影响它在顺序表中的排位。
因此在执行插入和删除操作后原先顺序表中的第5个元素变成了新的顺序表中的第6个元素。
再按照线性表的随机存取地址的计算公式ADD(ai)=ADD(a1)+(i-1)xk计算ADD(a6)=ADD
(al)+(6-1)X2=1023+5X2=10