数据结构1800试题-第3章栈和队列
- 格式:doc
- 大小:232.50 KB
- 文档页数:15
第3章栈和队列一选择题1. 对于栈操作数据的原则是()。
【青岛大学 2001 五、2(2分)】A. 先进先出B. 后进先出C. 后进后出D. 不分顺序2. 在作进栈运算时,应先判别栈是否( ① ),在作退栈运算时应先判别栈是否( ② )。
当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为( ③ )。
为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的 ( ④ )分别设在这片内存空间的两端,这样,当( ⑤ )时,才产生上溢。
①, ②: A. 空 B. 满 C. 上溢 D. 下溢③: A. n-1 B. n C. n+1 D. n/2④: A. 长度 B. 深度 C. 栈顶 D. 栈底⑤: A. 两个栈的栈顶同时到达栈空间的中心点.B. 其中一个栈的栈顶到达栈空间的中心点.C. 两个栈的栈顶在栈空间的某一位置相遇.D. 两个栈均不空,且一个栈的栈顶到达另一个栈的栈底.【上海海运学院 1997 二、1(5分)】【上海海运学院 1999 二、1(5分)】3. 一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是()。
A. 不确定B. n-i+1C. iD. n-i【中山大学 1999 一、9(1分)】4. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是()。
A. i-j-1B. i-jC. j-i+1D. 不确定的【武汉大学 2000 二、3】5. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,p N,若p N是n,则p i是( )。
A. iB. n-iC. n-i+1D. 不确定【南京理工大学 2001 一、1(1.5分)】6. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?()A. 5 4 3 6 1 2B. 4 5 3 1 2 6C. 3 4 6 5 2 1D. 2 3 4 1 5 6【北方交通大学 2001 一、3(2分)】7. 设栈的输入序列是1,2,3,4,则()不可能是其出栈序列。
第三章栈、队列和数组一、名词解释:1.栈、栈顶、栈底、栈顶元素、空栈2.顺序栈3.链栈4.递归5.队列、队尾、队头6.顺序队7.循环队8.队满9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵二、填空题:1.栈修改的原则是_________或称________,因此,栈又称为________线性表。
在栈顶进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________或________。
2.栈的基本运算至少应包括________、________、________、________、________五种。
3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。
4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。
5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。
6.top=0表示________,此时作退栈运算,则产生“________”;top=sqstack_maxsize-1表示________,此时作进栈运算,则产生“________”。
7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。
int InitStack(SqStackTp *sq){ ________;return(1);}8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。
Int Push(SqStackTp *sq,DataType x){ if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);}else{________________:________________=x;return(1);}}9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。
第3章栈和队列一、选择题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 结点时,则执行( C )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;5.表达式a*(b+c)-d 的后缀表达式为( B )A、abcdd+-B、abc+*d-C、abc*+d-D、-+*abcd6.中缀表达式A-(B+C/D)*E 的后缀形式是( D )A、AB-C+D/E*B、ABC+D/E*C、ABCD/E*+-D、ABCD/+E*-7.一个队列的入列序列是1,2,3,4,则队列的输出序列是( B )A、4,3,2,1B、1,2,3,4C、1,4,3,2D、3,2,4,18.循环队列SQ 采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front 和rear,则判定此循环队列为空的条件是()A、Q.rear-Q.front==nB、Q.rear-Q.front-1==nC、Q.front==Q.rearD、Q.front==Q.rear+19.循环队列SQ 采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front 和rear,则判定此循环队列为满的条件是()A、Q.front==Q.rearB、Q.front!=Q.rearC、Q.front==(Q.rear+1)%nD、Q.front!=(Q.rear+1)%n10.若在一个大小为6 的数组上实现循环队列,且当前rear 和front 的值分别为0 和3,当从队列中删除一个元素,再加入两个元素后,rear 和front 的值分别为()A、1,5B、2, 4C、4,2D、5,111.用单链表表示的链式队列的队头在链表的()位置A、链头B、链尾C、链中12.判定一个链队列Q(最多元素为n 个)为空的条件是()A、Q.front==Q.rearB、Q.front!=Q.rearC、Q.front==(Q.rear+1)%nD、Q.front!=(Q.rear+1)%n13.在链队列Q 中,插入s 所指结点需顺序执行的指令是()A 、Q.front->next=s;f=s;B 、Q.rear->next=s;Q.rear=s;C 、s->next=Q.rear;Q.rear=s;D 、s->next=Q.front;Q.front=s;14.在一个链队列Q 中,删除一个结点需要执行的指令是()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.用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时()A、仅修改队头指针B、仅修改队尾指针C、队头尾指针都要修改D、队头尾指针都可能要修改。
第3章栈和队列习题1.选择题(1)若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在()种情况。
A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1(2)若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为()。
A.i B.n-i C.n-i+1 D.不确定(3)数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为()。
A.r-f B.(n+f-r)%n C.n+r-f D.(n+r-f)%n (4)链式栈结点为:(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。
A.x=top->data;top=top->link;B.top=top->link;x=top->link;C.x=top;top=top->link;D.x=top->link;(5)设有一个递归算法如下int fact(int n) { //n大于等于0if(n<=0) return 1;else return n*fact(n-1); }则计算fact(n)需要调用该函数的次数为()。
A. n+1 B. n-1 C.n D.n+2 (6)栈在()中有所应用。
A.递归调用B.函数调用C.表达式求值D.前三个选项都有(7)为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。
主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。
该缓冲区的逻辑结构应该是()。
A.队列 B.栈C.线性表D.有序表(8)设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是()。
数据结构-第3章栈和队列自测卷答案第3章栈和队列自测卷答案姓名 ___________ 班级__________________一、填空题(每空1分,共15分)1. 向量、栈和队列都是一线性一结构,可以在向量的任何_____ 位置插入和删除元素:对于栈只能在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。
2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。
不允许插入和删除运算的一端称为栈底_____ 。
3. ___ 队列—是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。
4. 在一个循环队列中,队首指针指向队首元素的_前一个____ 位置。
5. 在具有n个单元的循环队列中,队满时共有_n-1个元素6. 向栈中压入元素的操作是先移动栈顶指针,后存入元素。
7.从循环队列中删除一个元素时,其操作是先—移动队首指针 ,后 取出元素8■带表头结点的空循环双向链表的长度等于 ____ 0 __二、判断正误(判断下列概念的正确性,并作出简要的 说明。
) (每小题1分,共10分)( X ) 1.线性表的每个结点只能是一个简单类型, 而链表的每个结点可以是一个复杂类型。
错,线性表是逻辑结构概念,可以顺序存储或链式存储,与元素数据类型无关。
(X ) 2.在表结构中最常用的是线性表,栈和队 列不太常用。
错,不一定吧?调用子程序或函数常用, CPU 中也用队列。
(V ) 3.栈是一种对所有插入、删除操作限于在 表的一端进行的线性表,是一种后进先出型结构。
(V ) 4.对于不同的使用者,一个表结构既可以 是栈,也可以是队列,也可以是线性表。
正确,都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
(X ) 5.栈和链表是两种不同的数据结构。
错,栈是逻辑结构的概念,是特殊殊线性表,而链表是存储结构概念,二者不是同类项。
(X ) 6.栈和队列是一种非线性数据结构。
一、选择题一、选择题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、栈的定义
栈(Stack):是限定在表的一端进行插入和删除运算的线性表,通常将插入、删除的一端称为栈项(top),另一端称为栈底(bottom)。
不含元素的空表称为空栈。
栈的修改是按后进先出的原则进行的,因此,栈又称为后进先出(Last In First Out)的线性表,简称为LIFO表。
真题选解
(例题·填空题)1、如图所示,设输入元素的顺序是(A,B,C,D),通过栈的变换,在输出端可得到各种排列。
若输出序列的第一个元素为D,则输出序列为。
隐藏答案
【答案】DCBA
【解析】根据堆栈"先进后出"的原则,若输出序列的第一个元素为D,则ABCD入栈,输出序列为DCBA
2、栈的基本运算
(1)置空栈InitStack(&S):构造一个空栈S。
第3章栈和队列自测卷答案姓名___________ 班级 _______________一、填空题(每空1分,共15分)1. 向量、栈和队列都是—线性 _结构,可以在向量的 _任何____________ 位置插入和删除元素;对于栈只能在栈顶_插入和删除元素;对于队列只能在_队尾_插入和_队首_删除元素。
2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为二栈顶二。
不允许插入和删除运算的一端称为____ 底______ 。
3. 飞列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。
4. 在一个循环队列中,队首指针指向队首元素的_前一个 _位置。
5. 在具有n个单元的循环队列中,队满时共有n-1个元素。
6. 向栈中压入元素的操作是先移动栈顶指针,后_存入元素。
7. 从循环队列中删除一个元素时,其操作是先_移动队首指针,后取出元素。
8•带表头结点的空循环双向链表的长度等于_0 _____ 。
解::■、判断正误(判断下列概念的正确性,并作出简要的说明。
)(每小题1分,共10分)(x ) 1.线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
错,线性表是逻辑结构概念,可以顺序存储或链式存储,与元素数据类型无关。
(X ) 2.在表结构中最常用的是线性表,栈和队列不太常用。
错,不一定吧?调用子程序或函数常用,CPU中也用队列。
(V ) 3.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。
(V ) 4.对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。
正确,都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
(X ) 5.栈和链表是两种不同的数据结构。
错,栈是逻辑结构的概念,是特殊殊线性表,而链表是存储结构概念,二者不是同类项。
(X ) 6.栈和队列是一种非线性数据结构。
错,他们都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
03栈和队列【单选题】1. 设入栈先后顺序为a,b,c,且在入栈过程中可出栈,则不可能得到的出栈序列是(B)。
A、a,b,cB、c,a,bC、b,c,aD、b,a,c2. 栈是一种(B)的线性表。
A、先进先出B、后进先出C、随意进出3. 在一个可存放n个数据元素的顺序栈中,假设以高地址端为栈底,以top为栈顶指针,当向栈中压入一个数据元素时,top的变化是(D)。
A、不变B、top=nC、top++D、top--4. 设在一不带头结点的链队列中,front和rear分别为其队头和队尾指针,则删除一个结点的操作是(C)。
A、rear=front.nextB、rear=rear.nextC、front=front.nextD、front=rear.next5. 向一个栈顶指针为s且带头结点的链栈中插入一个p所指结点时,应执行(B)。
A、s.next=p;B、p.next=s.next;s.next=pC、p.next=s;s=p;D、p.next=s;s=s.next;6. 从一个栈顶指针为s且不带头结点的链栈中删除一个结点,用x保存被删结点的值,则执行(D)。
A、x=s;s=s.next;B、x=s.data;C、s=s.next;x=s.data;D、x=s.data;s=s.next;7. 设在一不带头结点的链队列中,front和rear分别为其队头和队尾指针,则插入p所指结点的操作是(B)。
A、front.next=p;front=p;B、rear.next=p;rear=p;C、p.next=rear;rear=p;D、p.next=front;front=p;8. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为(C)。
A、iB、n-iC、n-i+1D、不确定【计算题】1. 设入栈序列a、b、c、d,且在入栈的过程中允许出栈,试写出所有不可能得到的出栈序列。
第三章栈和队列答案二、判断题部分答案解释如下。
1、尾递归的消除就不需用栈2、这个数是前序序列为1,2,3,…,n,所能得到的不相似的二叉树的数目。
三、填空题1、操作受限(或限定仅在表尾进行插入和删除操作)后进先出2、栈3、3 1 24、23 100CH5、0 n+1 top[1]+1=top[2]6、两栈顶指针值相减的绝对值为1(或两栈顶指针相邻)。
7、(1)满 (2)空 (3)n (4)栈底 (5)两栈顶指针相邻(即值之差的绝对值为1)8、链式存储结构 9、S×SS×S×× 10、data[++top]=x;11、23.12.3*2-4/34.5*7/++108.9/+(注:表达式中的点(.)表示将数隔开,如23.12.3是三个数)12、假溢出时大量移动数据元素。
13、(M+1) MOD N (M+1)% N; 14、队列 15、先进先出 16、先进先出 17、s=(LinkedList)malloc(sizeof(LNode)); s->data=x;s->next=r->next;r->next=s;r=s;18、牺牲一个存储单元设标记19、(TAIL+1)MOD M=FRONT (数组下标0到M-1,若一定使用1到M,则取模为0者,值改取M20、sq.front=(sq.front+1)%(M+1);return(sq.data(sq.front));(sq.rear+1)%(M+1)==sq.front;21、栈 22、(rear-front+m)% m; 23、(R-P+N)% N;24、(1)a[i]或a[1] (2)a[i] (3)pop(s)或s[1];25、(1)PUSH(OPTR,w)(2)POP(OPTR)(3)PUSH(OPND,operate(a,theta,b))26、(1)T>0(2)i<n(3)T>0(4)top<n(5)top+1(6)true(7)i-1(8)top-1(9)T+w[i](10)false四、应用题1、栈是只准在一端进行插入和删除操作的线性表,允许插入和删除的一端叫栈顶,另一端叫栈底。
第三章栈和队列一、判断题1、链栈的初始化是指开辟足够多的结点,然后置栈顶指针为 NULL。
(×)2、递归定义的数据结构通常不需要用递归的算法来实现对它的操作。
(×)二、填空题1、向一个链式栈插入一个新结点时,首先把栈顶指针的值赋给新结点的指针域,然后把新结点的存储位置赋给___栈顶指针_____。
2、迷宫问题是一个回溯控制的问题,最好使用____栈______的方法来解决。
3、有如下递归过程:Void Print(int w){int i;if (w!=0){Print(w−1);for (i=1;i<=w;i++) printf(“%3d”,w);printf(“\n”);}}调用语句print(4)的结果是__________。
12 23 3 34 4 4 44、假设用循环单链表实现队列,若队列非空,且队尾指针为R, 则将新结点S加入队列时,需执行下面语句:_ S->next=R->next _________;___ R->next=S _______;R=S;三、选择题1、设有4个数据元素a1、a2、a3和a4,对他们分别进行栈操作或队操作。
在进栈或进队操作时,按a1、a2、a3、a4次序每次进入一个元素。
假设栈或队的初始状态都是空。
现要进行的栈操作是进栈两次,出栈一次,再进栈两次,出栈一次;这时,第一次出栈得到的元素是 A 2,第二次出栈得到的元素是 B 4;类似地,考虑对这四个数据元素进行的队操作是进队两次,出队一次,再进队两次,出队一次;这时,第一次出队得到的元素是 C 1,第二次出队得到的元素是 D 2。
经操作后,最后在栈中或队中的元素还有 E 2个。
供选择的答案:A~D:①a1 ②a2 ③ a3 ④a4E:①1 ②2 ③ 3 ④ 02、栈是一种线性表,它的特点是 A 2。
设用一维数组A[1,…,n]来表示一个栈,A[n]为栈底,用整型变量T指示当前栈顶位置,A[T]为栈顶元素。
栈和队列习题及答案第三章栈和队列⼀、选择题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的后缀表达式是()。
第3章栈和队列一选择题1. 对于栈操作数据的原则是()。
A. 先进先出B. 后进先出C. 后进后出D. 不分顺序2. 在作进栈运算时,应先判别栈是否( ① ),在作退栈运算时应先判别栈是否( ② )。
当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为( ③ )。
为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的 ( ④ )分别设在这片内存空间的两端,这样,当( ⑤ )时,才产生上溢。
①, ②: A. 空 B. 满 C. 上溢 D. 下溢③: A. n-1 B. n C. n+1 D. n/2④: A. 长度 B. 深度 C. 栈顶 D. 栈底⑤: A. 两个栈的栈顶同时到达栈空间的中心点.B. 其中一个栈的栈顶到达栈空间的中心点.C. 两个栈的栈顶在栈空间的某一位置相遇.D. 两个栈均不空,且一个栈的栈顶到达另一个栈的栈底.3. 一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是()。
A. 不确定B. n-i+1C. iD. n-i4. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是()。
A. i-j-1B. i-jC. j-i+1D. 不确定的5. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,p N,若p N是n,则p i是( )。
A. iB. n-iC. n-i+1D. 不确定6. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?()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,则()不可能是其出栈序列。
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,则下列序列中不可能是栈的输出序列的是()。
一、选择题1. A2. C3. B4. B5. A6. B7. C8. C9. B10. D11. B12. D13. B14. D15. A16. B17. D18. C19. C20. B21. B二、填空题1. 队列2. FILO FIFO3. 栈顶栈底4. 前一个位置;n-15. 尾首6. 队尾队头7. 线性表后进先出表8. s->next=h->next h=s9. q->front->next=NULLq->rear=q->front;10. stack三、判断题1. ×2. √3. √4. ×5. √6. √7. √8. √9. ×10. ×四、简答题1. 顺序队列的结构:typedef struct{datatype data[maxsize]int front rear;}sequeue;sequeue *sq;2. 解答:链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点3. (1)出栈序列为:1324(2)不能得到1423序列。
因为要得到14的出栈序列,则应做Push(1),Pop(),Push(2),Push(3),Push(4),Pop()。
这样,3在栈顶,2在栈底,所以不能得到23的出栈序列。
能得到1432的出栈序列。
具体操作为:Push(1), Pop(),Push(2),Push(3),Push(4),Pop(),Pop(),Pop()。
4. 用队列长度计算公式:(N+r-f)% N① L=(40+19-11)% 40=8 ② L=(40+11-19)% 40=325. 答:该算法的功能是:利用堆栈做辅助,将队列中的数据元素进行逆置。
6. 栈是仅允许在一端进行插入和删除的线性表,又称为后进先出表, 队列是允许在一端插入,在另一端删除的线性表,允许插入的一端的称为队尾,允许删除的一端称为队头,又称为先进先出表。
第三章栈和队列一、单项选择题参考答案: 1. A 2. B 3. C 4. A 5. B6. B7. D8. D9. C 10. A11. D 12. A 13. A 14. D 15. C二、填空题参考答案:1. 先进后出2. 先进先出3. 队尾,队头4. 栈顶指针5. 栈顶指针6. MaxSize-17. top==08. 空栈9. 栈顶指针10. p->link=top,top=p11. top=top->link 12. Q.front==Q.rear 13. (Q.rear+1)%MaxSize==Q.front14. 队尾指针15. 空,只含有一个结点16. front == rear && front != NULL或者front == rear && rear != NULL17. 两端18. 3x2+*5- 19. 15 20. 3三、判断题参考答案: 1. 是 2. 是 3. 否 4. 是 5. 是6. 否7. 否8. 是9. 否10. 否11. 否12. 是13. 否14. 是15. 否16. 否四、运算题参考答案:1.根据以上规则,给出计算中缀表达式a + b * c – d / e时两个栈的变化。
步扫描项项类型动作OPND栈OPTR栈0 OPTR栈与OPND栈初始化, ‘#’ 进OPTR栈,#取第一个符号1 a 操作数a进OPND栈, 取下一符号 a #2 + 操作符icp (‘+’ ) > isp (‘#’ ), 进OPTR栈, 取a # +下一符号3 b 操作数b进OPND栈, 取下一符号 a b # +a b # + *4 * 操作符icp (‘*’ ) > isp (‘+’ ), 进OPTR栈, 取下一符号5 c 操作数c进OPND栈, 取下一符号 a b c # + *a s1# +6 - 操作符icp (‘-’ ) < isp (‘*’ ), 退OPND栈‘c’,退OPND栈‘b’, 退OPTR栈‘*’, 计算 b * c→ s1,结果进OPND栈s2#7 同上同上ic p (‘-’ ) < isp (‘+’ ), 退OPND栈‘s’,1退OPND栈‘a’, 退OPTR栈‘+’, 计算 a * s1→s2, 结果进OPND栈8 同上同上icp (‘-’ ) > isp (‘#’ ), 进OPTR栈, 取下一符号s2# -9 d 操作数d进OPND栈, 取下一符号s2 d # -10 / 操作符icp (‘/’ ) > isp (‘-’ ), 进OPTR栈, 取下一符号s2 d # - /11 e 操作数e进OPND栈, 取下一符号s2 d e # - /12 # 操作符icp (‘#’ ) < isp (‘/’ ), 退OPND栈‘e’,退OPND栈‘d’, 退OPTR栈‘/’, 计算 d / e →s5, 结果进OPND栈s2 s3# -13 同上同上icp (‘#’ ) < isp (‘-’ ), 退OPND栈‘s3’,退OPND栈‘s2’, 退OPTR栈‘-’, 计算 s2– s3→s4, 结果进OPND栈s4#14 同上同上 icp (‘#’ ) == isp (‘#’ ), 退OPND栈‘s4’, 结束#2.利用运算符优先数,画出将中缀表达式a + b * c - d / e 改为后缀表达式时运算符栈OPTR的变化。
第三章栈和队列试题一、单项选择题1.栈的插入和删除操作在()进行。
A. 栈顶B. 栈底C. 任意位置D. 指定位置2.当利用大小为n的数组顺序存储一个栈时,假定用top==n表示栈空,则向这个栈插入一个元素时,首先应执行()语句修改top指针。
A. top++;B. top--;C. top = 0;D. top;3.若让元素1,2,3依次进栈,则出栈次序不可能出现()种情况。
A. 3, 2, 1B. 2, 1, 3C. 3, 1, 2D. 1, 3, 24.在一个顺序存储的循环队列中,队头指针指向队头元素的()位置。
A. 前一个B. 后一个C. 当前D. 后面5.当利用大小为n的数组顺序存储一个队列时,该队列的最大长度为()。
A. n-2B. n-1C. nD. n+16.从一个顺序存储的循环队列中删除一个元素时,需要()。
A. 队头指针加一B. 队头指针减一C. 取出队头指针所指的元素D. 取出队尾指针所指的元素7.假定一个顺序存储的循环队列的队头和队尾指针分别为front和rear,则判断队空的条件为()。
A. front+1 == rearB. rear+1 == frontC. front == 0D. front == rear8.假定一个链式队列的队头和队尾指针分别为front和rear,则判断队空的条件为()。
A. front == rearB. front != NULLC. rear != NULLD. front == NULL9.设链式栈中结点的结构为(data, link),且top是指向栈顶的指针。
若想在链式栈的栈顶插入一个由指针s所指的结点,则应执行操作()。
A. top->link = s;B.s->link = top->link; top->link = s;C. s->link = top; top = s;D. s->link = top; top = top->link;10.设链式栈中结点的结构为(data, link),且top是指向栈顶的指针。
第三章栈和队列:习题习题一、选择题1.栈和队列都是( )。
A.顺序存储的线性结构B.限制存取点的线性结构C.链接存储的线性结构 D.限制存取点的非线性结构2.一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是( )。
A. edcbaB. decbaC. dceabD. abcde3.若已知一个栈的入栈序列是l,2,3,…,n,其输出序列为p1,p2,p3,…,p n,若p =n,则P i为( )。
1A.iB. n-iC. n-i+lD.不确定4.循环队列SQ采用数组空间SQ.data[0,n-l]存放其元素值,已知其头尾指标分别是front 和rear,则当前队列中的元素个数是( )。
A. (rear-front+n)%nB. rear-front+lC. rear-front-lD. rear-front5.中缀表达式A-(B+C/D)*E的后缀形式是( )。
A. AB-C+D/E*B. ABC+D/E*C. ABCD/E*+-D. ABCD/+E*-6.一个队列的入列序列是1,2,3,4,则队列的输出序列是( )。
A.4,3,2,1 B.1,2,3,4C.1,4,3,2 D.3,2,4,17.若在一个大小为6的数组上实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为( )。
A.1和5B.2和4C.4和2D.5和l8.用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指标指向队尾结点,则在进行出队运算时( )。
A.仅修改队头指针B.仅修改队尾指针C.对头、队尾指针都要修改D.对头、对尾指针都可能要修改9.若进栈序列为a,b,c,则通过入出栈运算可能得到的a,b,c的不同排列个数为( )。
A.4B.5C.6D.710.设数组data[m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队运算后其头指针front值为( )。
第3章栈和队列一选择题1. 对于栈操作数据的原则是()。
【青岛大学 2001 五、2(2分)】A. 先进先出B. 后进先出C. 后进后出D. 不分顺序2. 在作进栈运算时,应先判别栈是否( ①满 ),在作退栈运算时应先判别栈是否( ②空 )。
当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为( ③ )。
为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的 ( ④ )分别设在这片内存空间的两端,这样,当( ⑤ )时,才产生上溢。
①, ②: A. 空 B. 满 C. 上溢 D. 下溢③: A. n-1 B. n C. n+1 D. n/2④: A. 长度 B. 深度 C. 栈顶 D. 栈底⑤: A. 两个栈的栈顶同时到达栈空间的中心点.B. 其中一个栈的栈顶到达栈空间的中心点.C. 两个栈的栈顶在栈空间的某一位置相遇.D. 两个栈均不空,且一个栈的栈顶到达另一个栈的栈底.【上海海运学院 1997 二、1(5分)】【上海海运学院 1999 二、1(5分)】3. 一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是()。
A. 不确定B. n-i+1C. iD. n-i【中山大学 1999 一、9(1分)】4. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是()。
A. i-j-1B. i-jC. j-i+1D. 不确定的【武汉大学 2000 二、3】5. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,p N,若p N是n,则p i是( )。
A. iB. n-iC. n-i+1D. 不确定【南京理工大学 2001 一、1(1.5分)】6. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?()A. 5 4 3 6 1 2B. 4 5 3 1 2 6C. 3 4 6 5 2 1D. 2 3 4 1 5 6【北方交通大学 2001 一、3(2分)】7. 设栈的输入序列是1,2,3,4,则()不可能是其出栈序列。
【中科院计算所2000一、10(2分)】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,则下列序列中不可能是栈的输出序列的是()。
A. 2 3 4 1 5B. 5 4 1 3 2C. 2 3 1 4 5D. 1 5 4 3 2【南开大学 2000 一、1】【山东大学 2001 二、4 (1分)】【北京理工大学 2000 一、2(2分)】9. 设一个栈的输入序列是 1,2,3,4,5,则下列序列中,是栈的合法输出序列的是()。
A. 5 1 2 3 4B. 4 5 1 3 2C. 4 3 1 2 5D. 3 2 1 5 4【合肥工业大学 2001 一、1(2分)】10. 某堆栈的输入序列为a, b,c ,d,下面的四个序列中,不可能是它的输出序列的是()。
A. a,c,b,dB. b, c,d,aC. c, d,b, aD. d, c,a,b【北京航空航天大学 2000 一、3(2分)】【北京邮电大学 1999 一、3(2分)】11. 设abcdef以所给的次序进栈,若在进栈操作时,允许退栈操作,则下面得不到的序列为()。
A.fedcba B. bcafed C. dcefba D. cabdef【南京理工大学 1996 一、9(2分)】12. 设有三个元素X,Y,Z顺序进栈(进的过程中允许出栈),下列得不到的出栈排列是( )。
A.XYZ B. YZX C. ZXY D. ZYX【南京理工大学 1997 一、5(2分)】13. 输入序列为ABC,可以变为CBA时,经过的栈操作为()【中山大学 1999 一、8(1分)】A. push,pop,push,pop,push,popB. push,push,push,pop,pop,popC. push,push,pop,pop,push,popD. push,pop,push,push,pop,pop14. 若一个栈以向量V[1..n]存储,初始栈顶指针top为n+1,则下面x进栈的正确操作是( )。
A.top:=top+1; V [top]:=x B. V [top]:=x; top:=top+1C. top:=top-1; V [top]:=xD. V [top]:=x; top:=top-1【南京理工大学 1998 一、13(2分)】15. 若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。
A. |top[2]-top[1]|=0B. top[1]+1=top[2]C. top[1]+top[2]=mD. top[1]=top[2]【南京理工大学 1999 一、14(1分)】16. 栈在()中应用。
【中山大学 1998 二、3(2分)】A. 递归调用B. 子程序调用C. 表达式求值D. A,B,C17. 一个递归算法必须包括()。
【武汉大学 2000 二、2】A. 递归部分B. 终止条件和递归部分C. 迭代部分D.终止条件和迭代部分18. 执行完下列语句段后,i值为:()【浙江大学 2000 一、6 (3分)】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. 无限递归19. 表达式a*(b+c)-d的后缀表达式是( )。
【南京理工大学 2001 一、2(1.5分)】A.abcd*+- B. abc+*d- C. abc*+d- D. -+*abcd20. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂。
A. 3,2,4,1,1;(*^(+*-B. 3,2,8;(*^-C. 3,2,4,2,2;(*^(-D. 3,2,8;(*^(-【青岛大学 2000 五、5(2分)】21. 设计一个判别表达式中左,右括号是否配对出现的算法,采用()数据结构最佳。
A.线性表的顺序存储结构 B. 队列 C. 线性表的链式存储结构 D.栈【西安电子科技大学 1996 一、6(2分)】22. 用链接方式存储的队列,在进行删除运算时()。
【北方交通大学 2001 一、12(2分)】A. 仅修改头指针B. 仅修改尾指针C. 头、尾指针都要修改D. 头、尾指针可能都要修改23. 用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时( )。
【北京理工大学 2001 六、3(2分)】A.仅修改队头指针 B. 仅修改队尾指针C. 队头、队尾指针都要修改D. 队头,队尾指针都可能要修改24. 递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。
A.队列 B.多维数组 C.栈 D. 线性表【福州大学 1998 一、1(2分)】25. 假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为()。
【北京工商大学 2001 一、2(3分)】A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%m D.(rear-front)%m26. 循环队列A[0..m-1]存放其元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是( )。
【南京理工大学 2001 一、5(1.5分)】A. (rear-front+m)%mB. rear-front+1C. rear-front-1D. rear-front27. 循环队列存储在数组A[0..m]中,则入队时的操作为()。
【中山大学 1999 一、6(1分)】A. rear=rear+1B. rear=(rear+1) mod (m-1)C. rear=(rear+1) mod mD. rear=(rear+1)mod(m+1)28. 若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( )【浙江大学1999 四、1(4分)】A. 1和 5B. 2和4C. 4和2D. 5和129. 已知输入序列为abcd 经过输出受限的双向队列后能得到的输出序列有()。
A. dacbB. cadbC. dbcaD. bdacE. 以上答案都不对【西安交通大学 1996 三、3 (3分)】30. 若以1234作为双端队列的输入序列,则既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列是( )。
【西安电子科技大学 1996 一、5(2分)】A. 1234B. 4132C. 4231D. 421331. 最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。
A. (rear+1) MOD n=frontB. rear=frontC.rear+1=front D. (rear-l) MOD n=front【南京理工大学 1999 一、16(2分)】32. 栈和队列的共同点是()。
【燕山大学 2001 一、1(2分)】A. 都是先进先出B. 都是先进后出C. 只允许在端点处插入和删除元素D. 没有共同点33. 栈的特点是(①先进后出),队列的特点是(先进先出②),栈和队列都是(③)。
若进栈序列为1,2,3,4 则(④)不可能是一个出栈序列(不一定全部进栈后再出栈);若进队列的序列为1,2,3,4 则(⑤)是一个出队列序列。
【北方交通大学1999 一、1(5分)】①, ②: A. 先进先出 B. 后进先出 C. 进优于出 D. 出优于进③: A.顺序存储的线性结构 B.链式存储的线性结构C.限制存取点的线性结构D.限制存取点的非线性结构④, ⑤: A. 3,2,1,4 B. 3,2,4,1 C. 4,2,3,1 D. 4,3,2,1 F. 1,2,3,4 G. 1,3,2,434. 栈和队都是()【南京理工大学 1997 一、3(2分)】A.顺序存储的线性结构 B. 链式存储的非线性结构C. 限制存取点的线性结构D. 限制存取点的非线性结构35. 设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是( )。