02331数据结构

设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题: (1)若入、出栈次序为Push(1),Pop(),Push(2),Push(3),Pop(),Pop(),Push(4),Pop(),则出栈的数字序列为何?(这里Push(i)表示i进栈,Pop()表示出栈) (2)能否得到出栈序列1423和1432?并说明为什么不能得到或者如何得到。 (3)请分析1,2,3,4的24种排列中,哪些序列是可以通过相应的入出栈操作得到的。

题目

设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题: (1)若入、出栈次序为Push(1),Pop(),Push(2),Push(3),Pop(),Pop(),Push(4),Pop(),则出栈的数字序列为何?(这里Push(i)表示i进栈,Pop()表示出栈) (2)能否得到出栈序列1423和1432?并说明为什么不能得到或者如何得到。 (3)请分析1,2,3,4的24种排列中,哪些序列是可以通过相应的入出栈操作得到的。

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

设输入序列为1、2、3、4、5,依次执行进栈、进栈、进栈、出栈、进栈、进栈、出栈、出栈,则栈顶栈底分别是______。

A.5和4

B.4和3

C.3和2

D.2和1


正确答案:D
解析:栈(Stack)是限定仅在表尾进行插入或删除操作的线性表。表尾端称为栈项(top),表头端称为栈底(bottom)。故栈是后进先出(LIFO)的线性表。通常称栈的节点插入为进栈(Push),栈的节点的删除为出栈(Pop)。

第2题:

设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。算法应对异常情况(入栈满等)给出相应的信息。


参考答案:
  [算法描述]
  #define maxsize 栈空间容量
  void InOutS(int s[maxsize])
  //s是元素为整数的栈,本算法进行入栈和退栈操作。
  {int top=0; //top为栈顶指针,定义top=0时为栈空。
  for(i=1; i<=n; i++) //n个整数序列作处理。
  {cin>>x); //从键盘读入整数序列。
  if(x!=-1) // 读入的整数不等于-1时入栈。
  {if(top==maxsize-1){cout<<“栈满”<  else s[++top]=x; //x入栈。
  }
  else //读入的整数等于-1时退栈。
  {if(top==0){ cout<<“栈空”<  else cout<<“出栈元素是”<< s[top--]<  }
  }//算法结束。

第3题:

若进栈序列为a,b,c,且进栈和出栈可以穿插进行,则可能出现6个不同的出栈序列。()

此题为判断题(对,错)。


正确答案:错误

第4题:

若进栈序列为1,2,3,4,假定进栈和出栈可以穿插进行,则可能的出栈序列是( )。

A.2,4,1,3

B.3,1,4,2;

C.3,4,1,2

D.1,2,3,4


正确答案:D
解析:由于进栈和出栈可以穿插进行,所以1进,1出,2进, 2出,3进,3出,4进,4出。可以看出选项D)满足条件。

第5题:

若需将一个栈S中的元素逆置,则以下处理方式中正确的是 ____。

A.将栈S中元素依次出栈并入栈T,然后栈T中元素依次出栈并进入栈S

B.将栈S中元素依次出栈并入队,然后使该队列元素依次出队并进入栈S

C.直接交换栈顶元素和栈底元素

D.直接交换栈项指针和栈底指针

A.

B.

C.

D.


正确答案:B
解析:本题考查栈和队列的基本运算。
  对于选项A,栈S中的元素以原次序放置,不能实现栈S中元素逆置的要求。选项C和D,不符合栈结构的操作要求,也不能实现栈S中元素逆置的要求。

第6题:

若push、pop分别表示入栈、出栈操作,初始栈为空且元素1、2、3依次进栈,则经过操作序列push、push、pop、pop、push、pop之后,得到的出栈序列为(29)。

A.321

B.213

C.231

D.123


正确答案:B
解析:栈的运算特点为在同一端插入和删除元素,即先入后出,总是栈顶元素先出栈,新元素总是压在栈顶元素之上并成为栈顶元素。初始栈为空,如下图(a)所示。对于元素 1、2、3,依照操作序列push、push、pop、pop、push、pop,可以得到出栈序列213,其过程为:第一个push操作将元素1压入栈中,如下图(b)所示:第二个push操作将元素2压入栈中,如下图(c)所示:第一个pop将栈顶元素2弹出栈,新栈顶元素为1,如下图(d)所示;第二个pop将栈顶元素1弹出栈,导致栈空,如下图(e)所示:其后的push和pop分别将元素3压入和弹出栈,操作结果如下图(f)和(g)所示。

第7题:

若元素a、b、c、d、e、f依次进栈,允许进栈、出栈操作交替进行,但不允许连续3次出栈,则不可能得到的出栈序列是()。

A.dcebfa

B.cbdaef

C.bcaefd

D.afedcb


参考答案:D

第8题:

●设将整数1、2、3、4依次进栈,只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题:

1.当入、出栈次序为Push (1) ,Pop (),Push (2) ,Push (3) ,Pop(),Push (4) ,Pop(),出栈的数字序列为何?(这里Push(i)表示i进栈,Pop()表示出栈) (26)

2.能否得到出栈序列1、4、2、3和1、4、3、2?答案为 (27) 。

3.请分析研究1、2、3、4的24种排列中, (28) 序列是可以通过相应的入、出栈操作得到的。

(26) A.1,3,4

B.1,4,2,3

C.1,4,3

D.3,4,1

(27) A.可以

B.不可以

C.不确定

D.随机获得

(28) A.1,3,2,4

B.4,2,3,1

C.2,4,1,3

D.3,1,4,2


正确答案:A,B,A
【解析】出栈序列为1、3、4。
序列1、4、2、3不可能得到。因为4和2之间隔了3,当4出栈后,栈顶元素是3,而2在3的下面。
根据栈的数学性质,n个元素的出栈序列数目恰好符合卡塔南数列,即

因此4个元素的出栈序列数为:


这14种出栈序列如下:
1234  1243  1324  1342  1432
2134  2143  2314  2341  2431
3214  3241  3421  4321

第9题:

若需将一个栈S中的元素逆置,则以下处理方式中正确的是(63)。

A.将栈S中元素依次出栈并入栈T,然后将栈T中元素依次出栈并进入栈S

B.直接交换栈顶元素和栈底元素

C.将栈S中元素依次出栈并入队,然后使该队列元素依次出队并进入栈S

D.直接交换栈顶指针和栈底指针


正确答案:C
解析:栈的运算特点是先入后出。栈的操作一般为初始化栈、元素入栈、元素出栈、判断栈是否为空、取栈顶元素的副本等,对栈中元素的操作应采用栈结构提供的操作接口实现。对于选项A,将栈S中元素依次出栈并入栈T后,栈T中元素的排列正好是原栈S中元素的逆序,再将栈T中元素依次出栈并进入栈S,则栈S中的元素以原次序放置,不能实现栈S中元素逆置的要求。对于选项B,将栈S中元素依次出栈并入队后,队头元素为原栈S的栈顶元素,队尾元素尾原栈S的栈底元素。队列的操作特点是先入先出,因此使该队列元素依次出队并进入栈S后,队头元素就进入栈底,队尾元素称为栈顶,因此可实现将栈S中元素逆置的效果。对于选项C,直接交换栈顶元素与栈底元素既不符合栈结构的操作要求,也达不到逆置栈中元素的要求。对于选项D,直接交换栈顶指针和栈底指针不符合栈结构的操作要求。

第10题:

a、b、c、d、e、f依次进栈、进栈、出栈、进栈、进栈、出栈的操作,则操作完后,栈S的栈顶元素为()。

A.a

B.b

C.c


答案:C

更多相关问题