第三章栈和队列练习题

合集下载

数据结构第三章堆栈和队列测试题及答案

数据结构第三章堆栈和队列测试题及答案

堆栈和队列测试题一、选择题1. 对于栈操作数据的原则是(B)。

A. 先进先出B. 后进先出C. 后进后出D. 不分顺序2. 在做进栈运算时,应先判别栈是否( B),在做退栈运算时应先判别栈是否( A)。

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

为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的( D )分别设在这片内存空间的两端。

①, ②: A. 空 B. 满 C. 上溢 D. 下溢③: A. n-1 B. n C. n+1 D.n/2④: A. 长度 B. 深度 C. 栈顶 D. 栈底3. 一个栈的输入序列依次为1,2,3,…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是(B)。

A. 不确定B. n-i+1C. iD. n-i4. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是( D )。

A. i-j-1B. i-jC. j-i+1D. 不确定的5. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,p N,若p N是n,则pi是( D )。

A. iB. n-iC. n-i+1D. 不确定6.有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?( C )A. 5 4 3 6 1 2B. 4 5 3 1 2 6C. 3 4 6 5 2 1D. 2 3 4 1 5 67. 设栈的输入序列是1,2,3,4,则( D )不可能是其出栈序列。

A. 1,2,4,3,B. 2,1,3,4,C. 1,4,3,2,D. 4,3,1,2,E. 3,2,1,4,8. 一个栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈的输出序列的是( B )。

A. 2 3 4 1 5B. 5 4 1 3 2C. 2 3 1 4 5D. 1 5 4 3 29. 设一个栈的输入序列是1,2,3,4,5,则下列序列中,是栈的合法输出序列的是(D)。

栈和队列_习题

栈和队列_习题

第三章栈和队列一、单项选择题1.当利用大小为N的数组顺序存储一个栈时,假定用top=N表示栈空,则向这个栈入栈时,首先应执行( )语句修改top指针。

A. top++B. top--C. top=0D. top=N-12.假定利用数组a[N]顺序存储一个栈,用top表示栈顶指针,top= -1表示栈空,并已知栈未满,当元素X入栈时执行的操作为( )。

A. a[--top]=XB. a[top--]=XC. a[++top]=XD. a[top++]=X3.假定利用数组a[N]顺序存储一个栈,用top表示栈顶指针,top=-1表示栈空,并已知栈未空,当退栈并返回栈顶元素执行的操作为( )。

A. return a[--top]B. return a[top--]C. return a[++top]D. return a[top++]4.假定一个链栈的栈顶指针用top表示,每个节点的结构为data域和next指针域,当p所指向的结点进栈时,执行的操作为()A. p->next=top;top=top->nextB. top=p;p->next=topC. p->next=top->nextD. p->next=top;top=p5.假定一个链栈的栈顶指针用top表示,每个节点的结构为data域和next指针域,当执行退栈时,执行的操作为()A. top->next=topB. top=top->dataC. top=top->nextD. top->next=top->next->next6.若让元素1,2,3,4依次进栈,则出栈次序不可能出现( )种情况。

A.3,2,1,4B.2,1,4,3C.4,3,2,1D.1,4,2,37. 在一个循环队列中,队首指针指向队首元素的( )位置。

A. 前一个B. 后一个C. 当前D. 最后7. 在一个链队中,假设f与r分别为队首和队尾指针,则插入s所指结点的运算时( )A.f->next=s;f=sB.r->next=s;r=sC.s->next=r;r=sD.s->next=f;f=s8. 假定利用数组a[N]循环顺序存储一个队列,用f和r分别表示队首和队尾指针,并已知队未满,当元素X入队时执行的操作为( )。

栈和队列习题

栈和队列习题

第三章栈和队列练习题一、单项选择题1.一个顺序栈一旦被声明,其占用空间的大小()。

A.已固定B.可以改变C.不能固定D.动态变化2.链栈和顺序栈相比,有一个比较明显的缺点,即()。

A.插入操作更加方便B.通常不会出现栈满的情况C.不会出现栈空的情况D.删除操作更加方便3.用单链表表示的链式队列的队头在链表的()位置。

A.链头B.链尾C.链中D.任意位置4.在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印数据缓冲区,主机将要输出的数据依次写入缓冲区中,而打印机则从缓冲区中取出数据打印,该缓冲区应该是一个()结构。

A.堆栈B.队列C.数组D.先性表5.若已知一个栈的入栈序列是1,2,3,…,30,其输出序列是p1,p2,p3,…p n,若p1=30,则p10为()。

A.11 B.20 C.19 D.216.循环队列A[m] 存放其元素,用front和rear分别表示队头及队尾,则循环队列满的条件是()。

A.(rear+1)%m=front B.rear =front+1C.rear=front D.(rear+1)%m-1=front7.在一个栈顶指针为top的链栈中,将一个p指针所指的结点入栈,应执行()。

A.top->next=p; B.p->next=top->next; top->next=p;C.p->next=top; top=p; D.p->next=top->next; top=top->next;8.在一个栈顶指针为top的链栈中删除一个结点时,用x保存被删结点的值,则执行()。

A.x=top;top=top->next; B.x=top->data;C.top=top->next; x=top->data; D.x=top->data; top=top->next;9.表达式a*(b+c)-d的后缀表达式是()。

第三章栈和队列习题

第三章栈和队列习题

第三章栈和队列习题第三章栈和队列一,选择1. 对于栈操作数据的原则是()。

A. 先进先出B. 后进先出C. 后进后出D. 不分顺序 3. 最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。

A. (rear+1) MOD n=frontB. rear=frontC.rear+1=front D. (rear-l) MOD n=front4当利用大小为n的数组顺序存储一个栈时,假定用top= =n表示栈空,则向这个栈插入一个元素时首先应执行语句修改top指针。

A.top++ B.top-- C.top=0 D.top5. 若已知一个栈的入栈序列是1,2,3,?,n,其输出序列为p1,p2,p3,?,pN,若pN是n,则pi是( )。

A. iB. n-iC. n-i+1D. 不确定 6. 一个递归算法必须包括()。

A. 递归部分B. 终止条件和递归部分C. 迭代部分D.终止条件和迭代部分 7. 执行完下列语句段后,i值为:()int f(int x){ return ((x>0) ? x* f(x-1):2);} int i ; i =f(f(1));A.2 B. 4 C. 8 D. 无限递归8. 设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是( )。

A. 6 B. 4 C. 3 D. 2 9. 栈和队列的共同点是()。

A. 都是先进先出B. 都是先进后出C. 只允许在端点处插入和删除元素 D. 没有共同点10. 设计一个判别表达式中左,右括号是否配对出现的算法,采用()数据结构最佳。

A.线性表的顺序存储结构 B. 队列 C. 线性表的链式存储结构 D. 栈 11. 用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时( )。

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

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

第3章栈和队列一、选择题:1.设一数列的输入顺序为1,2,3,4,5,6,通过栈操作不可能排成的输出序列为( ) (A)3,2,5,6,4,1 (B)l,5,4,6,2,3(C)2,4,3,5,1,6 (D)4,5,3,6,2,12.设循环队列Q[l…n—1]的首尾指针为f和r,当插入元素时尾指针r加1,首指针f总是指在队列中第一个元素的前一个位置,则队列中元素计数为( )。

(A)r一f (B)n一(r一f)(C)(r—f十n)%n (D)(f一r十n)%n3.若有一个栈的输入序列是l,2,…,n,输出序列的第一个元素是n,则第i个输出元素是( )。

(A) n-i (B) n-i-1 (C) n-i+1 (D) 不确定4.设有一个栈,元素的进栈次序为A,B,C,D,E,下列( )是不可能的出栈序列(A)A,B,C,D,E (B)B,C,D,E,A(C)E,A,B,C,D (D)E,D,C,B,A5.队列操作的原则是( )。

(A)先进先出 (B)后进先出(c)只能进行插入 (D)只能进行删除二.程序填空:己知STACK表示栈的数据结构,push为将一个值为e的元素进栈,若成功返回1,否则返回0。

完成以下程序。

typedef struct {int data[100];int top; /* 栈顶元素的下标 */}STACK;int push(STACK *s, int e){if(___ __) return 0;s->top++;___ _____=e;return 1;}三、编程题:判断一个算术表达式的圆括号是否正确配对。

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

栈和队列习题及答案

栈和队列习题及答案

栈和队列习题及答案第三章栈和队列⼀、选择题1、⼀个栈的输⼊序列为:a,b,c,d,e,则栈的不可能输出的序列是()。

A. a,b,c,d,eB. d,e,c,b,aC. d,c,e,a,bD. e,d,c,b,a2、判断⼀个循环队列Q(最多n个元素)为满的条件是()。

A. Q->rear==Q->frontB. Q->rear==Q->front+1C. Q->front==(Q->rear+1)%nD. Q->front==(Q->rear-1)%n3、设计⼀个判别表达式中括号是否配对的算法,采⽤()数据结构最佳。

A. 顺序表B. 链表C. 队列D. 栈4、带头结点的单链表head为空的判定条件是()。

A. head==NULLB. head->next==NULLC. head->next!=NULLD. head!=NULL5、⼀个栈的输⼊序列为:1,2,3,4,则栈的不可能输出的序列是()。

A. 1243B. 2134C. 1432D. 4312E. 32146、若⽤⼀个⼤⼩为6的数组来实现循环队列,且当rear和front的值分别为0,3。

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

A. 1和5B. 2和4C. 4和2D. 5和17、队列的插⼊操作是在()。

A. 队尾B. 队头C. 队列任意位置D. 队头元素后8、循环队列的队头和队尾指针分别为front和rear,则判断循环队列为空的条件是()。

A. front==rearB. front==0C. rear==0D. front=rear+19、⼀个顺序栈S,其栈顶指针为top,则将元素e⼊栈的操作是()。

A. *S->top=e;S->top++;B. S->top++;*S->top=e;C. *S->top=eD. S->top=e;10、表达式a*(b+c)-d的后缀表达式是()。

数据结构第三章栈和队列练习及答案

数据结构第三章栈和队列练习及答案

一、选择题一、选择题1、栈中存取数据的原则()、栈中存取数据的原则()A 、先进先出B 、先进后出C 、后进后出D 、随意进出、随意进出2、队列中存取数据的原则()、队列中存取数据的原则() A 、先进先出 B 、后进先出 C 、先进后出 D 、随意进出、随意进出3、插入和删除只能在一端进行的线性表,称为()、插入和删除只能在一端进行的线性表,称为()A 、队列B 、循环队列C 、栈D 、循环栈、循环栈4、在栈中,出栈操作的时间复杂度为()、在栈中,出栈操作的时间复杂度为()A 、O (1)B 、O (log 2n )C 、O (n )D 、O (n 2)5、设长度为n 的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为()() A 、O (1) B 、O (log 2n ) C 、O (n ) D 、O (n 2)6、设长度为n 的链队列用单循环链表表示,若只设头指针,则出队操作的时间复杂度为的链队列用单循环链表表示,若只设头指针,则出队操作的时间复杂度为()() A 、O (1) B 、O (log 2n ) C 、O (n ) D 、O (n 2)7、一个线性表的第一个元素的存储地址是100,每个元素的长度是2,则第5个元素的地址是()是() A 、110 B 、108 C 、100 D 、1208、一个栈的入栈序列是a,b,c,d,e ,则栈的不可能的输出序列是(),则栈的不可能的输出序列是()A 、edcbaB 、decbaC 、dceabD 、abcde9、若已知一个栈的入栈序列是1,2,3,……,n ,其输出序列是p1,p2,p3,……,pn ,若p1=n ,则pi 为()为()A 、iB 、n=iC 、n-i+1D 、不确定、不确定10、判断一个栈ST (最多元素m0)为空的条件是())为空的条件是()A 、ST->top==0B 、ST->top==-1C 、ST->top!=m0D 、ST->top==m0 11、判断一个栈ST (最多元素m0)为满的条件是())为满的条件是()A 、ST->top!=0B 、ST->top==0C 、ST->top!=m0D 、ST->top==m0 12、判断一个循环队列QU (最多元素为m0)为空的条件是())为空的条件是() A 、QU.front==QU.rear B 、QU.front!=QU.rearC 、QU.front==(QU.rear+1)%m0D 、QU.front!=(QU.rear+1)%m013、判断一个循环队列QU (最多元素为m0)为满的条件是())为满的条件是()A 、QU.front==QU.rearB 、QU.front!=QU.rearC 、QU.front==(QU.rear+1)%m0D 、QU.front!=(QU.rear+1)%m0 14、循环队列用数组存放其元素值A[0,m-1],已知其头尾指针分别是rear 和front ,则当前队列的元素个数是()队列的元素个数是()A 、(rear-front+m)%mB 、rear-front+1C 、rear-front-1D 、rear-front 15、栈和队列的共同特点是()、栈和队列的共同特点是()A 、都是先进后出B 、都是先进先出、都是先进先出C 、只允许在端点处插入和删除D 、没有共同点、没有共同点二、填空题二、填空题1、设长度为n 的链队列用单循环链表表示,若只设头指针,则入队和出队操作的时间复杂度分别为(O(N))和(O(1));若又设尾指针,则入队和出队操作的时间复杂度分别为(O(1))和(O(1))。

第三章栈与队列 练习题

第三章栈与队列 练习题

第三章栈与队列练习题一、选择题1、栈结构通常采用的两种存储结构是( A )。

A、顺序存储结构和链表存储结构B、散列和索引C、链表存储结构和数组D、线性链表和非线性存储2、设栈ST用顺序存储结构表示,则栈ST为空的条件是(B)A、ST.top-ST.base<>0B、ST.top-ST.base==0C、ST.top-ST.base<>nD、ST.top-ST.base==n3、向一个栈顶指针为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;4、从一个栈顶指针为HS的链栈中删除一个结点,用x保存被删除结点的值,则执行(C)A、x=HS;HS=HS->next;B、HS=HS->next;x=HS->data;C、x=HS->data;HS=HS->next; D、s->next=Hs;Hs=HS->next;7、一个队列的入列序列是1,2,3,4,则队列的输出序列是(B )//尾插入元素,头删除元素。

A、4,3,2,1B、1,2,3,4C、1,4,3,2D、3,2,4,19、循环队列SQ采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front和rear,则判定此循环队列为满的条件是(C)//不懂啊!!!A、Q.front==Q.rearB、Q.front!=Q.rearC、Q.front==(Q.rear+1)%nD、Q.front!=(Q.rear+1)%n11、用单链表表示的链式队列的队头在链表的(A)位置A、链头B、链尾C、链中12、判定一个链队列Q(最多元素为n个)为空的条件是( A)A、Q.front==Q.rearB、Q.front!=Q.rearC、Q.front==(Q.rear+1)%nD、Q.front!=(Q.rear+1)%n14、在一个链队列Q中,删除一个结点需要执行的指令是(C)A、Q.rear=Q.front->next;B、Q.rear->next=Q.rear->next->next;C、Q.front->next=Q.front->next->next; D、Q.front=Q.rear->next;15、用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时(D)A、仅修改队头指针B、仅修改队尾指针C、队头尾指针都要修改D、队头尾指针都可能要修改。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章栈和队列练习题
一、单项选择题
1.一个顺序栈一旦被声明,其占用空间的大小()。

A.已固定B.可以改变C.不能固定D.动态变化
2.链栈和顺序栈相比,有一个比较明显的缺点,即()。

A.插入操作更加方便B.通常不会出现栈满的情况
C.不会出现栈空的情况D.删除操作更加方便
3.用单链表表示的链式队列的队头在链表的()位置。

A.链头B.链尾C.链中D.任意位置
4.在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印数据缓冲区,主机将要输出的数据依次写入缓冲区中,而打印机则从缓冲区中取出数据打印,该缓冲区应该是一个()结构。

A.堆栈B.队列C.数组D.先性表
5.若已知一个栈的入栈序列是1,2,3,…,30,其输出序列是p1,p2,p3,…p n,若p1=30,则p10为()。

A.11 B.20 C.19 D.21
6.循环队列A[m] 存放其元素,用front和rear分别表示队头及队尾,则循环队列满的条件是()。

A.(rear+1)%m=front B.rear =front+1
C.rear=front D.(rear+1)%m-1=front
7.在一个栈顶指针为top的链栈中,将一个p指针所指的结点入栈,应执行()。

A.top->next=p; B.p->next=top->next; top->next=p;
C.p->next=top; top=p; D.p->next=top->next; top=top->next;
8.在一个栈顶指针为top的链栈中删除一个结点时,用x保存被删结点的值,则执行()。

A.x=top;top=top->next; B.x=top->data;
C.top=top->next; x=top->data; D.x=top->data; top=top->next;
9.表达式a*(b+c)-d的后缀表达式是()。

A.abcd*+- B.abc+*d-
C.abc*++d- D.-+*abcd
10.在一个链队中,设front和rear分别为队首和队尾指针,则插入p所指结点时,应执行()。

A.front->next=p;front=p; B.rear->next=p;rear=p;
C.p->next=rear;rear=p; D.p->next=front;front=p;
11.栈的插入和删除操作在()进行。

A.栈底B.栈顶C.任意位置D.指定位置
12.利用数组a[N]顺序存储一个栈时,用top标识栈顶指针,用top== -1表示栈空,并已知栈未满,当元素x进行进栈时执行的操作是()。

A.a[--top]=x; B.a[top --]=x; C.a[++top]=x; D.a[top++]=x;
13.若让元素1,2,3依次进栈,则出栈次序不可能出现()的情况。

A.3,2,1 B.2,1,3 C.3,1,2 D.1,3,2
14.一个递归算法必须包括()。

A.递归部分B.终止条件和递归部分
C.迭代部分D.迭代部分和递归部分
15.在一个顺序循环队列中,队尾指针指向队尾元素的()位置。

A.前一个B.后一个C.当前D.最后
二、填空题
1.向顺序栈插入新元素分为三步:第一步进行判断,判断条件
是;第二步是修改;第三步是把新元素赋给。

同样从顺序栈删除元素分为三步:第一步进行判断,判断条件是。

第二步是把;第三步。

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

3.循环队列的引入,目的是为了克服。

4.判断一个循环队列LU(最多元素为m0)为空的条件是。

5.在将中缀表达式转换成后缀表达式和计算后缀表达式的算法中,都需要使用栈,对于前者,进入栈中的元素为表达式中的,而对于后者,进入栈的元素为,中缀表达式(a+b)/c-(f-d/c)所对应的后缀表达式是。

6.一个顺序循环队列存于一维数组a[Max]中,假设队头指针和队尾指针分别为front和rear,则判断队空的条件为,判断队满的条件为。

7.一个顺序栈存储于一维数组a[0…N-1]中,栈顶指针用top表示,当栈顶指针等
于时,则为空栈,当栈顶指针等于时,则为满栈。

8.一个容量为15的循环队列中,若头指针front=5,尾指针rear=9,则该循环队列中共
有个元素。

9.栈又称为表,队列又称为表。

10.在一个链栈中,若栈顶指针等于NULL则为;在一个链队中,若队首指针与队尾指针的值相同,则表示该队为或该队。

11.后缀表达式“45*32+-”的值为。

三、问答题
1.假定有四个元素A、B、C、D,按所列次序进栈,试写出所有可能的出栈列,注意,每一个元素进栈后都允许出栈,如ACDB就是一种出栈序列。

2.简述在栈的栈顶插入一个元素的操作过程。

3.简述链栈中插入一个元素的操作过程。

四、算法设计题
1.编写把十进制正整数转换为十六进制数输出的算法。

2.裴波那契(Fibonacci)数列的定义为:它的第一项和第二项均为1,以后各项为其前两项之和。

若裴波那契数列中的第n项用Fid(n)表示,则计算公式为:
Fib(n)=1 (n=1或n=2)
Fib(n)= Fib(n-1)+Fib(n-2) (n>=2)
试编写计算Fib(n)的递归算法。

3.在栈顶指针为HS的链栈中,写出计算该链栈中结点个数的函数。

4.在HQ的链队中,编写算法求链队中结点个数。

相关文档
最新文档