[考研类试卷]栈与队列模拟试卷3及答案与解析.doc
《[考研类试卷]栈与队列模拟试卷3及答案与解析.doc》由会员分享,可在线阅读,更多相关《[考研类试卷]栈与队列模拟试卷3及答案与解析.doc(24页珍藏版)》请在麦多课文档分享上搜索。
1、栈与队列模拟试卷 3 及答案与解析一、单项选择题1 一个栈的输入序列为 1,2,3,n,若输出序列的第一个元素是 n,输出第i(1in)个元素是( ) 。(A)不确定(B) n-i+l(C) i(D)ni2 若一个栈的输入序列为 l,2,3,n,输出序列的第一个元素是 i,则第 j 个输出元素是( ) 。(A)i-j-1(B) i-j(C) j-i+1(D)不确定3 若已知一个栈的入栈序列是 1,2,3,n,其输出序列为p1,p 2,p 3,p n,若 pn 是 n,则 pi 是( )。(A)i(B) n-i(C) n-i+l(D)不确定4 有 6 个元素 6,5,4,3,2,1 的顺序进栈,
2、下列不合法的出栈序列是( )。(A)5,4,3,6,1,2(B) 4,5,3,1,2,6(C) 3,4,6,5,2,1(D)2,3,4,1,5,65 若一个栈以向量 Vn存储,初始栈顶指针 top 为 n+l,则下面 x 进栈的正确操作是( )。(A)top=top+1;Vtop=x(B) Vtop=x;top=top+1(C) top=top-1;Vtop=x(D)Vtop=x ;top=top-16 若栈采用顺序存储方式存储,现两栈共享空间 V1m ,topi代表第 i 个栈(i=l,2)栈顶,栈 1 的底在 V1,栈 2 的底在 Vm,则栈满的条件是( )。(A)top2-top1 =0
3、(B) top1+1=top2(C) top1+top2=m(D)top1=top27 栈在( )中应用。(A)递归调用(B)子程序调用(C)表达式求值(D)A,B,C8 一个递归算法必须包括( )。(A)递归部分(B)终止条件和递归部分(C)迭代部分(D)终止条件和迭代部分9 执行完下列语句段后,i 值为( )。int f(int x)return(x0)?x*f(x 一 1):2);int i;i=f(f(1);(A)2(B) 4(C) 8(D)无限递归10 表达式 a*(b+C)一 d 的后缀表达式是( )。(A)abCd*+-(B) abC+*d-(C) abC*+d-(D)-+*ab
4、Cd11 递归过程或函数调用时,处理参数及返回地址,要用一种称为( )的数据结构。(A)队列(B)多维数组(C)栈(D)线性表12 若用一个大小为 6 的数组来实现循环队列,且当前 rear 和 front 的值分别为 0和 3,当从队列中删除一个元素,再加入两个元素后,rear 和 front 的值分别为( )。(A)1 和 5(B) 2 和 4(C) 4 和 2(D)5 和 113 设有一个 10 阶的对称矩阵 A,采用压缩存储方式,以行序为主存储, a11 为第一元素,其存储地址为 1,每个元素占一个地址空间,则 a85 的存储地址为( )。(A)13(B) 33(C) 1 8(D)40
5、14 Ann是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组 Tn(n+1)2中,则对任一上三角元素 aij对应 Tk的下标 k 是( )。(A)i(i1) 2+j(B) j(j 一 1)2+i(C) i(ji)2+1(D)j(i1) 2+115 设二维数组 Amn(即 m 行 n 列)按行存储在数组 B1mn中,则二维数组元素 Aij在一维数组 B 中的下标为( )。(A)(i 1)n+j(B) (i 一 1)n+j-1(C) i(j 一 1)(D)jm+i l16 有一个 10090 的稀疏矩阵,非 0 元素有 10 个,设每个整型数占 2 字节,则用三元组表示该矩阵时,所需的字节
6、数是( )。(A)60(B) 66(C) 18000(D)33二、综合题17 有 5 个元素,其入栈次序为:A,B,C,D,E ,在各种可能的出栈次序中,以元素 C,D 最先出栈(即 C 第一个且 D 第二个出栈)的次序有哪几个?18 如果输入序列为 1,2,3,4,5,6,试问能否通过栈结构得到以下两个序列:4,3,5,6,l,2 和 l,3,5,4,2,6;请说明为什么不能或如何才能得到。19 顺序队列一般应该组织成为环状队列的形式,而且一般队列头或尾其中之一应该特殊处理。例如,队列为:listarrayn1,队列头指针为 front,队列尾指针为rear,则 listarrayrear表
7、示下一个可以插入队列的位置。请解释其原因。20 一个 nn 的对称矩阵,如果以行或列为主序存入内存,则其容量为多少?21 设有上三角矩阵(a ij)nn,将其上三角中的元素按先行后列的顺序存于数组 Bm中,使得 Bk=aij 且 k=f1(i)+f2(j)+C,请推导出函数 f1、f 2 和常数 C,要求 f1 和 f2 中不含常数项。22 设有两个栈 s1、s2 都采用顺序栈方式,并且共享一个存储区maxsize 一 1,为了尽量利用空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式。试设计 s1、s2 有关入栈和出栈的操作算法。23 请利用两个栈 s1 和 s2 来模拟一个队列。已知
8、栈的三个运算定义如下:PUSH(ST,x):元素 x 入 ST 栈;POP(ST,x):ST 栈顶元素出栈,赋给变量 x;Sempty(ST):判 ST 栈是否为空。那么,如何利用栈的运算来实现该队列的 3 个运算:(1)enqueue:插入一个元素入队列;(2)deqtleue:删除一个元素出队列;(3)q_empty:判队列为空。24 双端队列(duque)是一个可以在任一端进行插入和删除的线性表。现采用一个一维数组作为双端队列的数据存储结构,使用 c 语言描述如下:#deftne maxsize 32数组中可容纳的元素个数typedef struct datatype elemmaxsi
9、ze;int endl,end2;duque;试编写两个算法 add(duque QU,datatype x,int tag)和 delete(duque QU,datatype&x,int tag)用以在此双端队列的任一端进行插入和删除。当 tag=0 时在左端 endl 端操作,当 tag=1 时在右端 end2 端操作。25 已知 q 是一个非空队列,s 是一个空栈。仅用队列和栈的 ADT()函数和少量工作变量,使用 Pascal 或 C 语言编写一个算法,将队列 Q 中的所有元素逆置。(1)栈的 ADT()函数有:makeEmpty(s); 置空栈push(s,value);新元素 v
10、alue 进栈pop(s); 出栈,返回栈顶值isEmpty(s); 判栈空否(2)队列的 ADT()函数有:enQUeue(q,value);元素 value 进队deQueue(q); 出队列,返回队头值isEmpty(q); 判队列空否26 线性表中元素存放在数组 A(1n)中,元素是整型数。试写出递归算法求出数组 A 中的最大和最小元素。27 设数组 A2n中存放有 n 个负数和 n 个正数,且随机存放。现要求按负数、正数相问存放,请写出实现此要求的算法。算法要求:不能使用额外的存储空间,但可使用少量工作单元,算法的时间复杂度应为 O(n)。28 设有一个长度为 n 的由“0” 和“1
11、” 元素组成的输入序列,存于数组 An中。设计一个算法,依次让每个元素通过一个栈 s(容量n)而得到一个输出序列,使得输出序列中“0”元素都出现在“1”元素之前。输出序列存人数组 Bn中。29 给定一个整数数组 BN,数组 B 中连续的相等元素构成的子序列称为平台。试设计算法,求出 B 中最长平台的长度。30 给定 nm 矩阵 Aab,cd,并设 Ai, jAi,j+1(0ib,cjd 一 1)和 Ai, jAi+1,j(0ib1,ejd)。设计一算法判定 x 的值是否在 A 中,要求时间复杂度为 D(m+n)。31 设二维数组 A1m,1n含有 mn 个整数。(1)写出算法 (Pascal
12、过程或 C 函数):判断二维数组 A 中所有元素是否互不相同并输出相关信息(yes no) 。(2)试分析算法的时间复杂度。32 已知两个定长数组 A、B,它们分别存放两个非降序有序序列,请编写程序把数组 B 序列中的数逐个插入到数组 A 序列中,完成后两个数组中的数分别有序 (非降序)并且数组 A 中所有的数都不大于数组 B 中的任意一个数。要求,不能另开辟空间,也不能对任意一个数组进行排序操作。例如,数组 A 为:4,12,28;数组 B 为:1,7,9,29,45输出结果为:1,4,7(数组 A)9,12,28,29,45(数组 B)33 设数组 An中,An 一 2k+1n 一 k和
13、An 一 k+1n中元素各自从小到大排好序,试设计一个算法使 An 一 2k+1n按从小到大次序排好序。要求空间复杂度为 O(1),并分析算法所需的计算时间。34 设 A100是一个记录构成的数组, B100是一个整数数组,其值介于 1100,现要求按 B100的内容调整 A 中记录的次序,比如,当 B1=11 时,则要求将A1的内容调整到 A11中去。规定可使用的附加空间为 D(1)。35 给定有 m 个整数的递增有序数组 A1m和有 n 个整数的递减有序数组B1n ,试写出算法:将数组 A 和 B 归并为递增有序数组 C1m+n 。(要求:算法的时间复杂度为 D(m+n)栈与队列模拟试卷
14、3 答案与解析一、单项选择题1 【正确答案】 B【试题解析】 此题考查的知识点是栈的后进先出特点。若输出序列的第一个元素是 n,说明前 n 一 1 个元素均入栈,出栈时只能按入栈顺序后进先出,所以选 B。因为是从后向前数,所以出栈的第 i 个元素并不是人栈时的 i,而 ni 是第 i 一 1元素,所以 C、D 都错,因为能确定出栈元素,所以 A 也错。【知识模块】 栈与队列、数组2 【正确答案】 D【试题解析】 此题考查的知识点是栈的后进先出特点。若输出序列的第一个元素是 i,只能说明前 i 一 1 个元素均入栈,而第 j 个元素何时入、出栈并不能确定,所以选 D。【知识模块】 栈与队列、数组
15、3 【正确答案】 D【试题解析】 此题考查的知识点是栈的后进先出特点。输出序列的最后一个元素是 n,其前面的序列是不确定的。比如入栈序列为 1,2,3,出栈序列可以是l,2,3,也可以是 2,1,3,所以 pi 不确定,应选 D。【知识模块】 栈与队列、数组4 【正确答案】 C【试题解析】 此题考查的知识点是栈的后进先出特点。考查出栈序列,要保证先人栈的一定不能在后入栈的前面出栈,C 选项中的 6 在 5 前人栈,5 没有出栈,6却出栈了,所以不合法。其他都符合规律。所以选 C。【知识模块】 栈与队列、数组5 【正确答案】 C【试题解析】 此题考查的知识点是人栈的具体操作。操作时要看栈顶的地址
16、,先取得空间,再入栈。本题栈顶为 n+1,应该用减法,所以选 C。D 是先存人,破坏原有数据,所以错。【知识模块】 栈与队列、数组6 【正确答案】 B【试题解析】 此题考查的知识点是入栈的具体操作。判断栈是否满要看两个栈顶是否相邻,当 top1+l=top2,或 top2一 1=top1时都表示栈满,所以选 B,而A、C 没有任何意义。D 表示已经出现覆盖了,也是错的。【知识模块】 栈与队列、数组7 【正确答案】 D【试题解析】 此题考查的知识点是栈的应用。由于栈的特殊性质,所以在递归调用、子程序调用、表达式求值时都要用到,所以选 D。A 、B、C 不全面。【知识模块】 栈与队列、数组8 【正
17、确答案】 B【试题解析】 此题考查的知识点是递归算法的组成部分。一个递归算法主要包括终止条件和递归部分,所以选 B。A 不全面,C、D 不是递归算法。【知识模块】 栈与队列、数组9 【正确答案】 B【试题解析】 此题考查的知识点是递归算法的分析。根据题意可计算 f(0)=2, f(1)=2,f(2)=4 ,所以选 B。【知识模块】 栈与队列、数组10 【正确答案】 B【试题解析】 此题考查的知识点是利用栈完成表达式的中后缀转换。顺序扫描表达式,操作数顺序输出,而运算符的输出顺序根据算术运算符的优先级确定。保证栈外运算符优先级比栈内低,若高则入栈,否则出栈输出。本题中输出顺序为 a 输出,*进栈
18、,(进栈,b 输出,+进栈,C 输出,此时)低于+ ,所以“+”输出。“)”与“(”相等,出栈删除,一低于*,所以*出栈,此时输出序列为 abC+*,一人栈,输出 d,输出一,结束。所以选 B。【知识模块】 栈与队列、数组11 【正确答案】 C【试题解析】 此题考查的知识点是栈的应用。要处理参数及返回地址,需要后进先出规则,应选 C。A 是先进先出规则,B 是普通的存储结构,D 是普通的逻辑结构。【知识模块】 栈与队列、数组12 【正确答案】 B【试题解析】 此题考查的知识点是队列的特征。此题考查顺序存取时的位置计算,按顺时针计算,所以删除 front+1,插入 rear+l,计算后 rear
19、=2,front=4 ,应选B。【知识模块】 栈与队列、数组13 【正确答案】 B【试题解析】 此题考查的知识点是顺序存储数组的地址计算。从 0 存起时,公式为 aij=i(i1)2+j1(ij),本题从 1 开始存,通过计算 a85=33,应选 B。【知识模块】 栈与队列、数组14 【正确答案】 B【试题解析】 此题考查的知识点是顺序存储数组的地址计算。从 0 存起时,aij对应的 Tk=j(j 一 1)2+i 一 1(ij) ,从 1 存起时 Tk=j(j 一 1)2+i(ij) ,应选 B。【知识模块】 栈与队列、数组15 【正确答案】 A【试题解析】 此题考查的知识点是顺序存储数组的地
20、址计算。要先计算前 i 一 1行的个数为(i 一 1)n,再加上第 i 行的 j 个元素即为所求。所以应选 A。【知识模块】 栈与队列、数组16 【正确答案】 B【试题解析】 此题考查的知识点是稀疏矩阵的压缩存储。按三元组的定义,该矩阵大小为 113,每个整型数占 2 字节,总字节数为 332=66,应选 B。【知识模块】 栈与队列、数组二、综合题17 【正确答案】 3 个:C,D,E,B,A;C,D,B,E ,A ;C,D,B,A,E【试题解析】 此题考查的知识点是栈的后进先出特点。按题意,C 先出,说明A、B 已人栈,D 出栈,再出栈,E 可以入栈就出栈,可以有序列C,D,E,B,A;也可
21、以 B 先出“E” 再人,再出,得序列 C,D,B,E,A ;还可以 B、A 都出栈后,E 再入栈出栈,得序列 C,D ,B,A ,E。只有这三种情况。【知识模块】 栈与队列、数组18 【正确答案】 只能得到序列 1,3,5,4,2,6,原因见解析。【试题解析】 此问题考查的知识点是栈的后进先出特点。输入序列为 1,2,3,4,5,6,不能得出 4,3,5,6,1,2,其理由是,输出序列最后两元素是 1,2,前面 4 个元素(4,3,5,6)得到后,栈中元素剩 1,2 两个元素,且 2 在栈顶,不可能栈底元素 1 在栈顶元素 2 之前出栈。得到1,3,5,4,2,6 的过程如下:1 入栈并出栈
22、,得到部:分输出序列;然后 2 和 3入栈,3 出栈,部分输出序列变为:1,3;接着 4 和 5 人栈,5,4 和 2 依次出栈,部分输出序列变为 l,3,5,4,2;最后 6 人栈并退栈,得最终结果为:l,3,5,4,2,6。【知识模块】 栈与队列、数组19 【正确答案】 栈的特点是后进先出,队列的特点是先进先出。初始时设栈 s1和栈 s2 均为空。(1)用栈 s1 和 s2 模拟一个队列的输入。设 sl 和 s2 容量相等。分以下三种情况讨论:若 s1 未满,则元素入 s1 栈;若 s1 满,s2 空,则将 s1 全部元素退栈,再压栈人 s2,之后元素人 s1 栈;若 s1 满,s2 不空
23、(已有出队列元素),则不能人队。(2)用栈 s1 和 s2 模拟队列出队(删除)。若栈 s2 不空,退栈,即是队列的出队;若s2 为空且 sl 不空,则将 s1 栈中全部元素退栈,并依次压入 s2 中,s2 栈顶元素退栈,这就是相当于队列的出队。若栈 s1 为空并且 s2 也为空,队列空,不能出队。(3)判队空。若栈 s1 为空,并且 s2 也为空,才是队列空。【试题解析】 此问题考查的知识点是顺序存放的队列数据量问题。循环队列解决了用向量表示队列所出现的“假溢出”问题,但同时又出现了如何判断队列的满与空问题。例如:在队列长 10 的循环队列中,若假定队头指针 front 指向队头元素的前一位
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 考研 试卷 队列 模拟 答案 解析 DOC
