数据结构第3章 栈与队列习题
《数据结构》第三章 堆栈和队列 习题

《数据结构》第三章堆栈和队列习题基本概念题:3-1 什么叫堆栈?什么叫队列?3-2 线性表、堆栈和队列这三种抽象数据类型有什么相同之处和不同之处?3-3 在顺序队列中,什么叫真溢出?什么叫假溢出?为什么顺序队列通常都采用顺序循环队列结构?3-4 什么叫优先级队列?优先级队列和队列有什么相同之处和不同之处?3-5 举例说明堆栈、队列和优先级队列的用途。
复杂概念题:3-6 设数据元素序列{a, b, c, d, e, f, g}的进堆栈操作和出堆栈操作可任意进行(排除堆栈为空时的出堆栈操作情况),下列哪些数据元素序列可由出堆栈序列得到:(1){d, e, c, f, b, g, a}; (2){f, e, g, d, a, c, b};(3){e, f, d, g, b, c, a}; (4){c, d, b, e, f, a, g}3-7 画出借助堆栈把下列中缀表达式转换成后缀表达式的过程:A * (B - D) + E / F3-8 对于一个堆栈,(1)如果输入序列由A,B,C,D组成,试给出全部可能的输出序列和不可能的输出序列。
(2)设有n个数据元素的序列顺序进栈,试给出可能的输出序列个数。
(3)设有n个数据元素的序列顺序进栈,试给出不可能的输出序列个数。
(4)以n=4为例,用(2)和(3)中得出的公式验证(1)的结论。
算法设计题:3-9 编写一个判断算术表达式中开括号和闭括号是否配对的算法。
3-10 给出采用设置标志位的方法解决“假溢出”问题的顺序循环队列的初始化操作、入队列操作和出队列操作的算法思想。
3-11 设计采用设置标志位方法解决“假溢出”问题的顺序循环队列的初始化操作、入队列操作和出队列操作的函数。
3-12 仿照例3-3,编程序判断一个字符序列是否是回文,要求采用链式队列和链式堆栈。
3-13 编程序判断一个字符序列是否是回文,要求只使用堆栈,不使用队列。
3-14 编写一个顺序优先级队列的出队列操作算法,要求不考虑相同优先级时的先进先出原则。
数据结构第三章栈和队列3习题

第三章栈和队列试题一、单项选择题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、尾递归的消除就不需用栈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.栈、栈顶、栈底、栈顶元素、空栈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章

第3章栈和队列一、选择题1. 栈中元素的进出原则是( )A.先进先出B.后进先出C.栈空则进D.栈满则出2. 已知一个栈的进栈序列为1, 2, …, n,其输出序列是p1, p2, … , p n ,若p1=n,则p i=()A. iB. n-iC. n-i+1D.不确定3. 一个栈的输入序列为:a b c d e,则下列不可能是栈的输出序列的是()。
A. b c d a eB. e d a c bC. b c a d eD. a e d c b4. 判定一个栈ST(最多元素为m0)为空的条件是( )A.ST->top<>0 B.ST->top=0 C.ST->top<>m0 D.ST->top=m0 5. 判定一个队列QU(最多元素为m0)为满队列的条件是( )A.QU->rear -QU->front = = m0 B.QU->rear -QU->front -1= = m0 C.QU->front = = QU->rear D.QU->front = = QU->rear+16.数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为( )A. r-fB.(n+f-r)% nC.n+r-fD.(n+r-f)% n7. 栈和队列的共同点是()。
A. 都是先进先出B. 都是先进后出C. 只允许在端点处插入和删除元素D. 没有共同点8. 用单链表表示的链式队列的队头在链表的()位置。
A.表头B.表尾C.中间9. 设计一个判别表达式中左,右括号是否配对出现的算法,采用()结构最佳。
A.线性表的顺序存储结构 B. 队列C. 线性表的链式存储结构D. 栈10. 用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时( )。
数据结构考研试题精选及答案第3章 栈和队列

第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. 对于栈操作数据的原则是()。
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章栈和队列自测卷答案姓名_____________ 班级 _________________一、填空题(每空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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3章栈与队列
一、单项选择题
1.元素A、B、C、D依次进顺序栈后,栈顶元素是,栈底元素是。
A.A B.B
C.C D.D
2.经过以下栈运算后,x的值是。
InitStack(s);Push(s,a);Push(s,b);Pop(s,x);GetTop(s,x);
A.a B.b
C.1 D.0
3.已知一个栈的进栈序列是ABC,出栈序列为CBA,经过的栈操作是。
A.push,pop,push,pop,push,pop B.push,push,push,pop,pop,pop
C.push,push,pop,pop,push,pop D.push,pop,push,push,pop,pop 4.设一个栈的输入序列为A、B、C、D,则借助一个栈所得到的序列是。
A.A,B,C,D B.D,C,B,A
C.A,C,D,B D.D,A,B,C
5.一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是。
A.edcba B.decba
C.dceab D.abcde
6.已知一个栈的进栈序列是1,2,3,……,n,其输出序列的第一个元素是i,则第j个出栈元素是。
A.i B.n-i
C.j-i+1 D.不确定
7.已知一个栈的进栈序列是1,2,3,……,n,其输出序列是p1,p2,…,Pn,若p1=n,则pi的值。
A.i B.n-i
C.n-i+1 D.不确定
8.设n个元素进栈序列是1,2,3,……,n,其输出序列是p1,p2,…,p n,若p1=3,则p2的值。
A.一定是2 B.一定是1
C.不可能是1 D.以上都不对
9.设n个元素进栈序列是p1,p2,…,p n,其输出序列是1,2,3,……,n,若p3=1,则p1的值。
A.可能是2 B.一定是1
C.不可能是2 D.不可能是3
10.设n个元素进栈序列是p1,p2,…,p n,其输出序列是1,2,3,……,n,若p3=3,则p1的值。
A.可能是2 B.一定是2
C.不可能是1 D.一定是1
11.设n个元素进栈序列是p1,p2,…,p n,其输出序列是1,2,3,……,n,若p n=1,则p i(1≤i≤n-1)的值。
A.n-i+1 B.n-i
C.i D.有多种可能
12.判定一个顺序栈S为空的条件为。
A.S.top= =S.base B.S.top!= S.base
C.S.top!= S.base+S.stacksize D.S.top= = S.base+S.stacksize 13.判定一个顺序栈S为栈满的条件是。
A.S.top-S.base= =S.stacksize B.S.top= = S.base
C.S.top-S.base!=S.stacksize D.S.top!= S.base
14.链栈与顺序栈相比有一个明显的优点,即。
A.插入操作方便B.通常不会出现栈满的情况
C.不会出现栈空的情况D.删除操作更加方便
15.最不适合用作链栈的链表是。
A.只有表头指针没有表尾指针的循环双链表
B.只有表尾指针没有表头指针的循环双链表
C.只有表尾指针没有表头指针的循环单链表
D.只有表头指针没有表尾指针的循环单链表
16.如果以链表作为栈的存储结构,则退链栈操作时。
A.必须判别链栈是否满B.判别链栈元素的类型
C.必须判别链栈是否空D.对链栈不作任何判别
17.向一个不带头结点的栈顶指针为1st的链栈中插入一个s所指结点时,则执行。
A.1st->next=s; B.s->next=1st->next;1st->next=s;
C.s->next=1st;1st=s; D.s->next=1st;1st->next;
18.从一个不带头结点的栈顶指针为S的链栈中删除一个结点时,用x保存被删除结点的值,则执行。
A.x=S; S = S ->next; B.x= S ->data;
C.S = S ->next;x= S ->data; D.x= S ->data; S = S ->next; 19.经过以下队列运算后,队头的元素是。
InitQueue(qu);enQueue(qu,a);enQueue(qu,b);enQueue(qu,c);deQueue(qu);
A.a B.b
C.1 D.0
20.经过以下队列的运算后,QueueEmpty(q) 的值是。
InitQueue(qu);enQueue(qu,a);enQueue(qu,b);deQueue(qu,x);deQueue(qu,y);
A.a B.b
C.1 D.0
21.元素A,B,C,D顺序连续进入队列qu后,队头元素是,队尾元素是。
A.A B.B
C.C D.D
22.一个队列的入队序列为1,2,3,4,则队列可能的输出序列是_______.
A.4,3,2,1 B.1,2,3,4
C.1,4,3,2 D.3,2,4,1
二、填空题
1.栈是一种具有特性的线性表。
2.顺序栈和链栈的区别仅在于不同。
3.如果栈的最大长度难以估计,则最好使用。
4.一个栈的输入序列是1,2,3,4,5,则栈的输出序列1,2,3,4,5是。
5.若用不带头结点的单链表来表示链栈S,则创建一个空栈所要执行的操作
是。
6.对于链栈S,进栈操作在端进行,出栈操作在端进行。
7.队列是一种具有特性的线性表。
8.顺序队列和链队列的区别仅在于的不同。
9.如果队列的最大长度难以估计,则最好使用__________。
三、判断题
1.顺序栈中元素值的大小是有序的。
2.在n个元素进栈后,它们的出栈顺序和进栈顺序一定正好相反。
3.栈顶元素和栈底元素有可能是同一个元素。
4.若用S[1~m]表示顺序栈的存储空间,则对栈的进栈,出栈操作最多只能进行m次。
5.栈是一种对进栈,出栈操作总次数作了限制的线性表。
6.空栈没有栈顶指针。
7.栈和队列都是限制存取端的线性表。
8.队列是一种对进队列,出队列操作的次序作了限制的线性表。
9.n个元素进队列的顺序和出队列的顺序总是一致的。
10.顺序队中有多少元素,可以根据队首指针的值和队尾指针的值来计算。
11.若用“队头指针的值和队尾指针的值相等”作为环形顺序队为空的标志,则在设臵一个空队列时,只需给队头指针和队尾指针赋同一个值,不管什么值都可以。
12.无论是顺序队列,还是链队列,入队和出队操作的时间复杂度都是O(1)。
13.队列的输入序列为1,2,3,…,n,输出序列为a1,a2,…,a n, 则a i<a i+1(1≤i≤n-1) 四、简答题
1.有5个元素,其进栈次序为A,B,C,D,E,在各种可能的出栈次序中,以元素C,D 最先出栈(即C第一个且D第二个出栈)的次序有哪几个?
2.设输入元素为1,2,3,P和A,入栈次序为1,2,3,P,A,元素经过栈后到达输出序列,当所有元素均到达输出序列后,有哪些序列可以作为高级语言的变量名?
3.设有一个数列的输入顺序为1,2,3,4,5,6,若采用栈结构,并以A和D分别表
示进栈和出栈操作,试问通过进栈和出栈操作的合法序列是什么?
(1)能否得到输出顺序为3,2,5,6,4,1的序列。
(2)能否得到输出顺序为1,5,4,6,2,3的序列。
4.简述线性表、栈和队列的异同。
5.设栈S和队列Q的初始状态都为空,元素a,b,c,d,e和f依次通过栈S,一个元素出栈后即进入队列Q,若6个元素的出队的序列是b,d,c,f,e,a,则栈S的容量至少应该存多少个元素。
五、算法设计题
1.用一个一维数组S(设大小为MaxSize)作为两个栈的共享空间。
请说明共享方法,栈满和栈空的判断条件,并用C/C++语言设计公用的初始化栈运算InitStack1(st)、判栈空运算StackEmpty1(st,i)、入栈运算Push(st,i,x)和出栈运算Pop(st,i,x),其中i为1或2,用于表示栈好,x为入栈或出栈元素。
2.设计一个算法,利用栈的InitStack( )、Push( )、Pop( )和StackEmpty( )等基本运算返回指定栈中栈底元素。
3.用不带头结点的单链表存储链栈,设计初始化栈、判断栈是否为空、进栈和出栈相应的算法。
4.在栈顶头结点为1st的链栈中,设计一个算法计算该栈中结点个数。