数据结构第3章栈和队列练习题.docx

上传人:b****6 文档编号:8856346 上传时间:2023-02-02 格式:DOCX 页数:15 大小:29.96KB
下载 相关 举报
数据结构第3章栈和队列练习题.docx_第1页
第1页 / 共15页
数据结构第3章栈和队列练习题.docx_第2页
第2页 / 共15页
数据结构第3章栈和队列练习题.docx_第3页
第3页 / 共15页
数据结构第3章栈和队列练习题.docx_第4页
第4页 / 共15页
数据结构第3章栈和队列练习题.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据结构第3章栈和队列练习题.docx

《数据结构第3章栈和队列练习题.docx》由会员分享,可在线阅读,更多相关《数据结构第3章栈和队列练习题.docx(15页珍藏版)》请在冰豆网上搜索。

数据结构第3章栈和队列练习题.docx

数据结构第3章栈和队列练习题

第三章栈和队列

一、选择题

1.以下不是栈的基本运算的是()

A)删除栈顶元素B)删除栈底元素

C)判断栈是否为空D)将栈置为空栈

2.若进栈序列为1,2,3,4,进栈过程中可以出栈,则下列不可能的一个出栈序列是()

A)1,4,3,2B)2,3,4,1

C)3,1,4,2D)3,4,2,1

3.栈和队列的共同点()

A)都是先进先出

B)都是后进先出

C)只允许在端点处插入和删除元素

D)没有共同点

4.若已知一个进栈序列是1,2,3,……,n,其输出序列是p1,p2,vp3,……pn,若p1=n,则pi(1

A)IB)n-i

C)n-i+1D)不确定

5.判断一个栈ST(最多元素为MaxSize)为空的条件是()

A)ST->top==1B)ST->top==-1

C)ST->top!

=MaxSize-1D)ST->top==MaxSize-1

6.向一个栈指针为HS的链式栈中插入一个s所指的结点时,则执行()

A)HS->NEXT=S;

B)S->NEXT=HS->NEXT;HS->NEXT=S;

C)S->NEXT=HS;HS=S;

D)S-.NEXT=HS;HS=HS->NEXT;

7.在一个链式队列中.假设f和r分别为队头和队尾指针,则插入s所指的结点运算是()

A)f->next=s;f=s;B)r->next=s;r=s;

C)s->next=s;r=s;D)s->next=f;f=s;

8.在一个链式队列中,假设f和r分别为队头和队尾指针,则删除结点的运算是()

A)r=f->next;B)r=r->next;

C)f=f->next;D)f=r->next;

9.下列关于线性表,栈和队列叙述,错误的是()

A)线性表是给定的n(n必须大于零)个元素组成的序列

B)线性表允许在表的任何位置进行插入和删除操作

C)栈只允许在一端进行插入和删除操作

D)队列只允许在一端进行插入一端进行删除

10.一个队列的入队序列是1,2,3,4,则队列的输出序列是()

A)4,3,2,1B)1,2,3,4

C)1,4,3,2D)3,2,4,1

11.设初始输入序列为1,2,3,4,5,利用一个栈产生输出序列,下列()序列是不可能通过栈产生的.

A)1,2,3,4,5B)5,3,4,1,2

C)43,2,1,5D)3,4,5,2,1

12.设栈s的初始状态为空,6个元素的入栈顺序为e1,e2,e3,e4,e5和e6.若出栈的顺序是e2,e4,e3,e6,e5,e1,则栈s的容量至少应该是()

A)6B)4

C)3D)2

13.为了减小栈溢出的可能性,可以让两个栈共享一片连续存储空间,两个栈的栈底分别设在这片空间的两端,这样只有当()时才可能产生上溢。

A.两个栈的栈顶在栈空间的某一位相遇

B.其中一栈的栈顶到达栈空间的中心点

C.两个栈的栈顶同时到达空间的中心点

D.两个栈均不空,且一个栈的栈顶到达另一个栈的栈顶

14.若进栈序列为3,5,7,9,进栈过程中可以出栈,则()不可能是一个出栈序列。

A.7,5,3,9B.9,7,5,3

C.7,5,9,3D.9,5,7,3

15.数组Q[0……n-1]用来表示一个环形队列,f为当前对头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数总小于n,计算队列中元素个数的公式为()。

A.r-fB.n+f-r

C.n+r-fD.(n+r-f)modn

16.4个元素a1、a2、a3和a4依次入栈,入栈过程中允许元素出栈,假设某一时刻站的状态是a3(栈顶)、a2、a1、(栈底),则不可能的出栈顺序是()。

A.a4,a3,a2,a1B.a3,a2,a4,a1

C.a3,a1,a4,a2D.a3,a4,a1,a2

17.与数据元素本身的形式、内容、相对位置、个数无关的数据是()。

A.存储结构

18.设用一个数组A[1……N]来存储一个栈,令A[n]为栈底,用整型变量T指示当前栈顶位置,A[T]为栈顶元素。

当从栈中弹出一个元素时,变量T的变化为()。

A.T=T+1B.T=T-1

C.T不变D.T=n

19.有六个元素1、2、3、4、5、6的顺序进栈,下列()不是合法的出栈序列。

A.2、3、4、1、6、5B.3、2、4、6、5、1

C.4、3、1、2、5、6D.5、4、6、3、2、1

20.一个栈的入栈顺序是a、b、c、d、e,则栈的不可能输出序列是()。

A.e、d、c、b、aB.d、e、c、b、a

C.d、c、e、a、bD.a、b、c、d、e

21.设计一个判别表达式左、右括号是否配对出现的算法,采用()数据结构最佳。

 

22.下面4种内排序方法中,要求内存容量最大的是()。

 

23.栈的插入和删除操作在()进行。

 

24.向顺序栈中压入新元素时,应在()。

A.先移动栈顶指针B.先存入元素,再移动栈顶指针

25.链式栈与顺序栈相比,一个比较明显的优点是()。

A.插入操作更加方便B.通常不会出现栈满的情况

26.设一列顺序为1,2,3,4,5,6通过栈操作可以得到()的输出序列。

A.3,2,5,6,4,1B.1,2,3,4,5,6

C.6,5,4,3,2,1D.4,5,3,2,6,1

27.设一个栈的输入序列为A,B,C,D,则借助一个栈所得到输出序列不可能是().

A.A,B,C,DB.D,C,B,A

C.A,C,D,BD.D,A,B,C

28.若用一个大小为6的数组来实现循环队列,且当前rear和fornt的值分别为0和3。

从当前队列中删除一个元素,再加入两个元素后,rear和front的值分别为()。

 

29.由两个栈共享一个向量空间的好处是()。

A.减少存取时间,降低下溢发生的机率B.节省存储空间,降低上溢发生的机率

C.减少存取时间,降低上溢发生的机率D.节省存储空间,降低下溢发生的机率

30.设一数列的顺序为1,2,3,4,5,6,通过队列操作可以得到()的输出序列。

A.3,2,5,6,4,1B.1,2,3,4,5,6

C.6,5,4,3,2,1D.4,5,3,2,6,1

31.从一个顺序队列中删除元素时,首先要()。

 

32.在一个顺序存储的循环队列中,队头指针指向队头元素的()。

 

33.两栈共享数组存储空间,前一个栈的栈顶指针为p后一个栈的栈顶指针为q,能进行正常入栈操作的条件是()。

A.p<=qB.p>q

C.p

34.一个递归的定义可以用递归过程的求解,也可以用非递归过程求解,但单位从用行时间来看,通常递归过程比非递归过程()。

35.在一个顺序循环队列中,队尾指针指向队尾元素的()位置。

 

36.若(a-b)*(c+d)是中序表达式,则其后序表达式是()。

A.abcd+*-B.ab-cd+*

C.ab-*cd+D.a-bcd+*

37.字符A,B,C依次进入一个栈,按出栈的先后顺序组成不同的字符串,则至多可以组成()个不同的字符串.

A)14B)5C)6D)8

二、填空题

1.栈和队列的区别在于______________。

2.通常元素进栈的顺序是______________________。

3.通常元素出栈的顺序是________________________。

4.从一个循环队列中删除一个元素,通常的操作是____________________.

5.像一个循环队列中插入一个元素,通常的操作是____________________.

6.设栈S的初始状态为空,队列Q的初始状态如图所示

___________________________________________

a1a2a3a4

___________________________________________

↑↑

对头队尾

对栈S和队列Q进行以下两步操作:

(1)删除Q中的元素,将删除的元素插入S,直到Q为空

(2)依次将S中的元素插入Q,直到S为空

在上述两步操作后,队列q的状态是_______________

7.栈又称为___________表,队列又称为__________表。

8.栈中元素的进出原则是:

_____________。

9.队列中元素的进出原则是:

_______________。

10.一个栈的输入序列是12345,则栈的输出序列43512是_______________。

11.从循环队列中删除一个元素时,通常的操作是__________________。

12.向循环队列中插入一个元素时,通常的操作是______________。

13.对于顺序存储的栈,因为栈的空间是有限的,在进行__________运算时,可能发生栈的上溢,__________在进行_____________运算时,可能发生栈的下溢。

14.当堆栈用用顺序存储结构时,栈顶元素的值可用_________表示;当堆栈采用链式存储结构时,栈顶元素的值可用____________表示。

15.若已知一个栈的入栈顺序是1,2,3,……n,其输出序列为p1,p2,p3,……,pn,若p1=n,则pi(1

16.向一个链栈插入一个p所指向的结点时,需要把栈顶指针的值赋给p所指向的结点的_____________,然后把p赋给______________。

17.当用长度为N的数组顺序存储一个栈时,假定用top=N表示栈空,则表示栈满的条件为____________。

18.在用一维数组A[N]存储一个顺序循环队列时,若队列的首、尾指针分别用f和r表示,则队列长度为____________。

19.假设以S和X分别表示进栈和退栈操作,则对输入序列a,b,c,d,e进行一系列操作SSXSXSSXXX之后,得到的输出序列为_________。

三、指出下述程序段的功能是什么?

 

(1)voidDemo1(SeqStack*S){

    inti;arr[64];n=0;

    while(StackEmpty(S))arr[n++]=Pop(S);

    for(i=0,i

   }//Demo1

(2)SeqStackS1,S2,tmp;

  DataTypex;

  ...//假设栈tmp和S2已做过初始化

  while(!

StackEmpty(&S1))

   {

    x=Pop(&S1);

    Push(&tmp,x);

   }

  while(!

StackEmpty(&tmp))

   {

    x=Pop(&tmp); 

    Push(&S1,x);

    Push(&S2,x);

   }

(3)voidDemo2(SeqStack*S,intm) 

   {//设DataType为int型

    SeqStackT;inti;

    InitStack(&T);

    while(!

StackEmpty(S))

     if((i=Pop(S))!

=m)Push(&T,i);

    while(!

StackEmpty(&T))

     {

      i=Pop(&T);Push(S,i);

     }

   }

(4)voidDemo3(CirQueue*Q)

   {//设DataType为int型

    intx;SeqStackS;

    InitStack(&S);

    while(!

QueueEmpty(Q))

     {x=DeQueue(Q);Push(&S,x);}

    while(!

StackEmpty(&s))

     {x=Pop(&S);EnQueue(Q,x);}

   }//Demo3

(5)CirQueueQ1,Q2;//设DataType为int型

  intx,i,n=0;

  ...//设Q1已有内容,Q2已初始化过

  while(!

QueueEmpty(&Q1)) 

   {x=DeQueue(&Q1);EnQueue(&Q2,x);n++;}

  for(i=0;i

   {x=DeQueue(&Q2); 

  EnQueue(&Q1,x);EnQueue(&Q2,x);} 

四、判断题

1.栈和队列的存储,既可以采用顺序存储结构,又可以采用链式存储结构。

2.任何一个递归过程都可以转换成非递归过程。

3.若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列3,2,5,6,4,

4.通常使用队列来处理函数的调用。

5.循环队列通常用指针来实现队列的头尾相接。

6.栈的数据存储原则是先进先出。

7.栈中只有栈底元素不能被删除。

8.循环队列也存在空间溢出问题。

9.栈和队列的存储方式,只能是顺序存储。

10.栈和队列逻辑上都是线性的。

11.对于链队来说,即使不设置尾指针也能进行入队操作。

12.队列的入队序列为”1,2,3,……,n”,出队序列为”P1,P2,P3,……,Pn”,则Pi+1>Pi。

13.循环队列就是采用循环链表作为存储结构的队列。

14.若一个栈为空,则可以不用栈顶指针。

15.栈是一种入栈和出栈操作的次序作了限制的线性表。

五、算法设计题

1.采用递归方法把任一十进制正整数转换为s(2<=s<=9)数输出。

2.采用辗转相除和递归方法求两个正整数的最大公约数。

3.采用递归的方法求两个数的最小公倍数

4.在一个链式队列中只设置队尾指针,不设置队首指针,并且让队尾结点的指针域指向队首结点(称此为循环队列),试分别写出在循环链队上进行插入和删除操作的算法。

5.一个双向栈S是在同一向量空间内实现的两个栈,它们的栈底分别设在向量空间的两端。

试为此双向栈设计初始化InitStack(S)、入栈Push(S,i,x)和出栈Pop(S,i)等算法,其中i为0或1,用以表示栈号。

6.Ackerman函数定义如下:

请写出递归算法。

        n+1   当m=0时

AKM(m,n)=AKM(m-1,1)当m≠0,n=0时

        AKM(m-1,AKM(m,n-1))当m≠0,n≠0时

7.假设循环队列中只设rear和quelen来分别指示队尾元素的位置和队中元素的个数,试给出判别此循环队列的队满条件,并写出相应的入队和出队算法,要求出队时需返回队头元素。

8.回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。

试写一个算法判定给定的字符向量是否为回文。

(提示:

将一半字符入栈) 

9.利用栈的基本操作,写一个将栈S中所有结点均删去的算法voidClearStack(SeqStack*S),并说明S为何要作为指针参数?

 

10.利用栈的基本操作,写一个返回S中结点个数的算法intStackSize(SeqStackS),并说明S为何不作为指针参数?

 

11.设计算法判断一个算术表达式的圆括号是否正确配对。

(提示:

对表达式进行扫描,凡遇到'('就进栈,遇')'就退掉栈顶的'(',表达式被扫描完毕,栈应为空。

 

12.用少用一个元素空间的方法来区别循环队列的队空和队满,试为其设计置空队,判队空,判队满、出队、入队及取队头元素等六个基本操作的算法。

 

13.对于循环向量中的循环队列,写出求队列长度的公式。

 

14.写算法,借助于栈将一个单链表置逆。

 

一、填空题

二、1.向量、栈和队列都是线性结构,可以在向量的任何位置插入和删除元素;对于栈只能在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。

2.栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。

不允许插入和删除运算的一端称为栈底。

3.队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。

4.在一个循环队列中,队首指针指向队首元素的前一个位置。

5.在具有n个单元的循环队列中,队满时共有n-1个元素。

6.向栈中压入元素的操作是先存入元素,后移动栈顶指针。

7.从循环队列中删除一个元素时,其操作是先移动队首指针,后取出元素。

8.带表头结点的空循环双向链表的长度等于0。

解:

 

二、判断正误(判断下列概念的正确性,并作出简要的说明。

三、(×)1.线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。

错,线性表是逻辑结构概念,可以顺序存储或链式存储,与元素数据类型无关。

(×)2.在表结构中最常用的是线性表,栈和队列不太常用。

错,不一定吧?

调用子程序或函数常用,CPU中也用队列。

(√)3.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。

(√)4.对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。

正确,都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。

(×)5.栈和链表是两种不同的数据结构。

错,栈是逻辑结构的概念,是特殊殊线性表,而链表是存储结构概念,二者不是同类项。

(×)6.栈和队列是一种非线性数据结构。

错,他们都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。

(√)7.栈和队列的存储方式既可是顺序方式,也可是链接方式。

(√)8.两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。

(×)9.队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。

错,后半句不对。

(×)10.一个栈的输入序列是12345,则栈的输出序列不可能是12345。

错,有可能。

三、单项选择题(每小题1分,共20分)

(B)1.栈中元素的进出原则是

A.先进先出B.后进先出C.栈空则进D.栈满则出

(C)2.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为

A.iB.n=iC.n-i+1D.不确定

解释:

当p1=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的(事实上题目已经表明了),那么输入顺序必定是1,2,3,…,n,则出栈的序列是n,…,3,2,1。

(若不要求顺序出栈,则输出序列不确定)

(B)3.判定一个栈ST(最多元素为m0)为空的条件是

A.ST->top<>0B.ST->top=0C.ST->top<>m0D.ST->top=m0

(A)4.判定一个队列QU(最多元素为m0)为满队列的条件是

A.QU->rear-QU->front==m0B.QU->rear-QU->front-1==m0C.QU->front==QU->rearD.QU->front==QU->rear+1

解:

队满条件是元素个数为m0。

由于约定满队时队首指针与队尾指针相差1,所以不必再减1了,应当选A。

当然,更正确的答案应该取模,即:

QU->front==(QU->rear+1)%m0

(D)5.数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为

(A)r-f;(B)(n+f-r)%n;

(C)n+r-f;(D)(n+r-f)%n

6.

设有4个数据元素a1、a2、a3和a4,对他们分别进行栈操作或队操作。

在进栈或进队操作时,按a1、a2、a3、a4次序每次进入一个元素。

假设栈或队的初始状态都是空。

现要进行的栈操作是进栈两次,出栈一次,再进栈两次,出栈一次;这时,第一次出栈得到的元素是A,第二次出栈得到的元素是B是;类似地,考虑对这四个数据元素进行的队操作是进队两次,出队一次,再进队两次,出队一次;这时,第一次出队得到的元素是C,第二次出队得到的元素是D。

经操作后,最后在栈中或队中的元素还有E个。

供选择的答案:

A~D:

①a1②a2③a3④a4

E:

①1②2③3④0

答:

ABCDE=2,4,1,2,2

7.从供选择的答案中,选出应填入下面叙述?

内的最确切的解答,把相应编号写在答卷的对应栏内。

栈是一种线性表,它的特点是A。

设用一维数组A[1,…,n]来表示一个栈,A[n]为栈底,用整型变量T指示当前栈顶位置,A[T]为栈顶元素。

往栈中推入(PUSH)一个新元素时,变量T的值B;从栈中弹出(POP)一个元素时,变量T的值C。

设栈空时,有输入序列a,b,c,经过PUSH,POP,PUSH,PUSH,POP操作后,从栈中弹出的元素的序列是D,变量T的值是E。

供选择的答案:

A:

①先进先出②后进先出③进优于出④出优于进⑤随机进出

B,C:

①加1②减1③不变④清0⑤加2⑥减2

D:

①a,b②b,c③c,a④b,a⑤c,b⑥a,c

E:

①n+1②n+2③n④n-1⑤n-2

答案:

ABCDE=2,2,1,6,4

注意,向地址的高端生长,称为向上生成堆栈;向地址低端生长叫向下生成堆栈,本题中底部为n,向地址的低端递减生成,称为向下生成堆栈。

8.从供选择的答案中,选出应填入下面叙述?

内的最确切的解答,把相应编号写在答卷的对应栏内。

在做进栈运算时,应先判别栈是否A;在做退栈运算时,应先判别栈是否B。

当栈中元素为n个,做进栈运算时发生上溢,则说明该栈的最大容量为C。

为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的D分别设在这片内存空间的两端,这样,只有当E时,才产生上溢。

供选择的答案:

A,B:

①空②满③上溢④下溢

C:

①n-1②n③n+1④n/2

D:

①长度②深度③栈顶④栈底

E:

①两个栈的栈顶同时到达栈空间的中心点②其中一个栈的栈顶到达栈空间的中心点

③两个栈的栈顶在达栈空间的某一位置相遇④两个栈均不空,且一个栈的栈顶到达另一个栈的栈底

答案:

ABCDE=2,1,2,4,3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1