数据结构 第3章 栈和队列

数据结构—栈

思维导图

在这里插入图片描述

强化练习

3.1.4 8.向一个栈顶指针为top的链栈(不带头结点)中插入一个x结点,则执行( )
A top->next=x;		B x->next=top->next; top->next=x;
C x->next=top; top=x;		D x=top->data; top=top->next;


————————分割线————————


题目分析:注意一个点(不带头结点)。典型头插法,让新结点的指针域指向栈顶指针,再让栈顶指针top改为新结点x,这样新结点x就被插入到链栈中。
正确答案:C
3.1.4 17. 若一个栈的输入序列是123,…,n,输出序列的第一个元素为n,则第i个输出元素时( )
A 不确定			B n-i			C n-i-1			D n-i+1


————————分割线————————


题目分析:这题很明显,第一个输出元素时n,意味着输出的序列与输入的序列刚好相反,第二个输出的元素为n-2+1 = n-1,根据归纳法得出,选D。
正确答案:D
3.1.4 18. 若一个栈的输入序列是123,…,n,输出序列的第一个元素为i,则第j个输出元素时( )
A i-j-1			B i-j			C j-i+1			D 不确定


————————分割线————————


题目分析:这题与上一天有明显的区别。第一个输出的为i,第二个输出可能是i-1(i+1)-n这样一个集合,所以无法确定第j个输出的元素时什么。
正确答案:D
3.1.4 20. 若一个栈的输入序列为P1,P2,,Pn,输出序列为1,2,3,,n,若P3=1,则P1的值为( )
A 可能是2		B 一定是2		C 不可能是2		D 不可能是3


————————分割线————————


题目分析:如果P3为1,那么下一个输出2的可能是P2,P4-Pn,不可能是P1,故P1不能为2.
正确答案:C
3.1.4 21. 若已知一个栈的入栈序列是1,2,3,4,其出栈序列为P1,P2,P3,P4,则P2,P4不能是( )
A 2,4			B 2,1			C 4,3			D 3,4


————————分割线————————


题目分析:	
	第一种办法,暴力破解,把所有的序列都列出来一一比对,不推荐,耗时太多。
	第二种办法,假设值法,
		关于AB选项,P2为2时,P4可以为14均不冲突,有12343241两种情况。
		关于C选项,由于4是最后一个入栈的元素,所以在出4之前栈底还有两个元素就是23,且出栈顺序只能是32无法调整,就有出栈序列1432,故C错误。
		关于D选项,有两种情况,P1=1,有序列1324,P1=2,有序列2314均满足条件。
正确答案:C
3.1.4 22. [2013真题]一个栈的入栈序列为1,2,3,,n,其出栈序列为P1,P2,P3,,Pn,若P2=3,则P3可能取值的个数是( )
A n-3			B n-2		C n-1			D 不确定


————————分割线————————


题目分析:3之后的数字显然都是可取的(刚入栈就出栈)
		 考虑1,2的情况。若P3=1,则有231...出栈方法。若P3=2,则有132出栈方法,所以P3只有3不能取,故有n-1种取法。
正确答案:C
3.1.4 24. [2011真题]元素a,b,c,d,e依次进入初始为空的栈中,若元素进栈后可停留,可出栈,直到所有元素都出栈,则在所有可能的出栈序列中,
以元素d开头的序列个数为( )
A 3			B 4			C 5			D 6


————————分割线————————


题目分析:decba,dceba,dcbea,dcbae直接列出即可
正确答案:B

数据结构—队列

思维导图

在这里插入图片描述

强化练习

3.2.5 6. 已知循环队列的存储空间为数组A[21],front指向队头元素的前一个位置,rear指向队尾元素,假设当前front和rear的值分别为83,则该队列
的长度为( )
A 5			B 6			C 16			D 17


————————分割线————————


题目分析:长度=(rear-front+MaxSize)%MaxSize=16
正确答案:C
3.2.5 8. [2011真题]已知循环队列存储在一位数组A[0...n-1]中,且队列非空时front和rear分别指向队头元素和队尾元素。若初始时队列为空,且要求第一
个进入队列的元素存储在A[0]处,则初始时front和rear的值分别为( )。
A 00			B 0,n-1			C n-10			D n-1,n-1


————————分割线————————


题目分析:倒推逻辑,假设有一个元素,那么rear和front都指向0,实际上这一个元素进来之前,只有尾指针rear改变了,所以倒推出rear的初始位置是n-1。
正确答案:B
3.2.5 10. [2014真题]循环队列放在一位数组A[0...M-1]中,end1指向队头元素,end2指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作。
队列中最多能容纳M-1个元素。初始时为空,下列判断队空和队满的条件中,正确的是( )
A 队空:end1==end2;				队满:end1==(end2+1)modM
B 队空:end1==end2;				队满:end2==(end1+1)mod(M-1)
C 队空:end2==(end1+1)modM;		队满:end1==(end2+1)modM
D 队空:end1==(end2+1)modM;		队满:end1==(end2+1)mod(M-1)


————————分割线————————


题目分析:通过特殊情况来判别队空队满的条件。
队空判断,假设队中有只一个元素,在位置1,那么队头指针指向1,队尾指针指向2。此时执行出队操作,队头指针+1 = 2 = 队尾指针,此时队空。
故队空条件是 end1==end2。
队满判断,队中能容纳M-1个元素,假设一个满队列元素,队头在0位置,队尾在M-2位置,此时队满。end1为0,end2为队尾元素后一个即M-1,判断队满条件为
end1==(end2+1)modM。

正确答案:A
3.2.5 18. [2010真题]某队列允许在其两端进行入队操作,但仅允许在一段进行出队操作。若元素a,b,c,d,e一次入此队列后再进行出队操作,则不可能得到
的出队序列为( )
A bacde			B dbace			C dbcae			D ecbad


————————分割线————————


题目分析:
	第一种方法,每一个都过一遍。
	第二种方法,换个思路,就是通过两侧入队,组合好整个串,然后一齐输出。显然bdcae无法组成,原因是,c在b后入队,仅能在c的左侧构成cda或者在a右侧构成dac的结构,故选C。

正确答案:C
3.2.5 19. [2018真题]现有队列Q与栈S,初始时Q中的元素一次是1,2,3,4,5,61在队头),初始S为空,若仅允许下列3中操作:1.出队并输出出队元素 
2. 出队并将出队元素入栈 3. 出栈并输出出栈元素,则不能得到的输出序列为( )
A 125643			B 234561			C 345612			D 654321


————————分割线————————


题目分析:考察栈和队列的理解。A中1256可以直接输出,34可以压栈输出没问题。B中1可以压栈,23456直接输出没问题。C中3456可以直接输出,但是12的入栈
顺序错误,如果为21则可以。D中全部压栈再输出。

正确答案:C

栈和队列的应用

思维导图

在这里插入图片描述

强化练习

3.3.6 11.[2012真题]已知操作符包括‘+’、‘-’、 ‘*’、‘/’、‘(’和‘)’。将中缀表达式a+b-a*((c+d)/e-f)+g转换为等价的后缀表达式ab+acd+e/f-**-g+,
用栈来存放暂时还不能确定运算次序的操作符,若栈初始时为空,则转换过程中同时保存栈中的操作符的最大个数是( )
A.5					B.7					C.8					D.11


————————分割线————————


题目分析:根据题目要求,栈中只存储操作符“+”,“-” ,“*”,‘/’,“(”和“)”,并不存储字母。根据中缀表达式a+b-a*((e+d)/e-f)+g,可以利用栈将其转换为后缀表达式ab+ acd+e/f-*-g+,在转换过程中,栈中的操作符最多有5个。这种情况出现在第二个"+"号入栈后,栈中的操作符分别为:-*((+,
第一个+被消解了,第二个+还没被消解

正确答案:A
3.3.6 12.[2014真题]假设栈初始为空,将中缀表达式a/b+(c*d-e*f)/g转换为等价的后缀表达式的过程中,当扫描到f时,栈中的元素依次是()
A.+(*-				B. +(-*				C. /+(*-*			D. /+-*


————————分割线————————


题目分析:正常扫描的f时栈为/+(*-*,第一个/被消解,第一个*被消解,故栈中为+(-*	

正确答案:B

特殊矩阵的压缩存储

思维导图

在这里插入图片描述

强化练习

3.4.5 6.[2016真题]有一个100阶的三对角矩阵M,其元素m[i,j](1≤i≤100, 1≤j≤100)按行优先依次压缩存入下标从0开始的一维数组N中。元素m[30,30]在N中
的下标是( )
A.86				B. 87				C. 88			D. 89


————————分割线————————


题目分析:注意点:N数组是下标为0开始,M矩阵是下标为1开始,相当于算出了相对位置,还要-1
	第一种:代入公式。
	第二种:观察法。第一行是2个元素,第二行——第二十九行每行3个元素,第三十行是2个元素。总共是2+2+28*3=88。但是由于数组N从下标0开始
		   所以是88-1=87。

正确答案:B
3.4.5 10.[2018真题]设有一个12x12的对称矩阵M,将其上三角部分的元素m.(1≤i≤j≤12)按行优先存入C语言的一维数组N中,元素m[6,6]在N中的下标是( )

A.50				B. 51				C. 55			D. 66


————————分割线————————


题目分析:提示点:1.按行优先原则	2.存储上三角矩阵	  3.N是一维数组,下标从0开始
12+11+10+9+8+1=51. 又因为N是数组故结果是51-1=50

正确答案:A
3.4.5 11.[2020真题]将一个10X10对称矩阵M的上三角部分的元素m;(1≤i≤j≤10)按列优先存
入C语言的一维数组N中,元素m7,2在N 中的下标是:

A.15				B. 16				C. 22			D. 23


————————分割线————————


题目分析:提示点:1.按列优先原则	2.存储上三角矩阵	  3.N是一维数组,下标从0开始
1+2+3+4+5+6+2=23,又因为N是一维数组,故23-1=22

正确答案:C
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值