PTA第三章栈和队列练习题教学提纲

合集下载

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

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

数据结构第三章栈和队列练习及答案⼀、选择题1、栈中存取数据的原则()A、先进先出B、先进后出C、后进后出D、随意进出2、队列中存取数据的原则()A、先进先出B、后进先出C、先进后出D、随意进出3、插⼊和删除只能在⼀端进⾏的线性表,称为()A、队列B、循环队列C、栈D、循环栈4、在栈中,出栈操作的时间复杂度为()A、O(1)B、O(log2n)C、O(n)D、O(n2)5、设长度为n的链队列⽤单循环链表表⽰,若只设头指针,则⼊队操作的时间复杂度为()A、O(1)B、O(log2n)C、O(n)D、O(n2)6、设长度为n的链队列⽤单循环链表表⽰,若只设头指针,则出队操作的时间复杂度为()A、O(1)B、O(log2n)C、O(n)D、O(n2)7、⼀个线性表的第⼀个元素的存储地址是100,每个元素的长度是2,则第5个元素的地址是()A、110B、108C、100D、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==m011、判断⼀个栈ST(最多元素m0)为满的条件是()A、ST->top!=0B、ST->top==0C、ST->top!=m0D、ST->top==m012、判断⼀个循环队列QU(最多元素为m0)为空的条件是()A、QU.front==QU.rearB、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)%m014、循环队列⽤数组存放其元素值A[0,m-1],已知其头尾指针分别是rear和front,则当前队列的元素个数是()A、(rear-front+m)%mB、rear-front+1C、rear-front-1D、rear-front15、栈和队列的共同特点是()A、都是先进后出B、都是先进先出C、只允许在端点处插⼊和删除D、没有共同点⼆、填空题1、设长度为n的链队列⽤单循环链表表⽰,若只设头指针,则⼊队和出队操作的时间复杂度分别为(O(N))和(O(1));若⼜设尾指针,则⼊队和出队操作的时间复杂度分别为(O(1))和(O(1))。

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

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

《数据结构》第三章堆栈和队列习题基本概念题: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 编写一个顺序优先级队列的出队列操作算法,要求不考虑相同优先级时的先进先出原则。

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

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

第三章栈、队列和数组一、名词解释: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.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。

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

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

第三章栈、队列和数组一、名词解释: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.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。

数据结构第三章 栈和队列

数据结构第三章  栈和队列

计 3467
433
算 433
54
顺 54
6

6
0
3
低输
1

6

6
高序
所以:(3467)10 =(6613)8
28
算法思想:当N>0时重复1,2 1. 若 N≠0,则将N % r 压入栈s中 ,执行2;
若N=0,将栈s的内容依次出栈, 算法结束。 2. 用N / r 代替 N
29
【算法3-10】数制转换算法一
队满时 m=maxsize,队空时m=0
front rear
data
0
a1
1
a2
2
a3


n-1
an


Max-1
Top=-1,B、A出栈
13
顺序栈的主要运算
• 特殊情况表示: • 栈空:top == -1 • 栈满:top == maxsize-1
• 运算实现: • 入栈:若栈不满 s->top++ ; • 出栈:若栈不空 s->top-- ;
14
⑴ 置空栈
【算法3-1】栈的初始化算法 SeqStack *Init_SeqStack(){
若空则出错 (2)获取栈顶元素 x (3)栈顶指针减1
int Pop_SeqStack(SeqStack *s,DataType x){ if (Empty_SeqStack(s)) return 0; //栈空不能出栈,返回错误代码0 else { x=s->data[s->top]; //保存栈顶元素值
typedef struct {
datatype data[maxsize];

PTA第三章栈与队列

PTA第三章栈与队列

PTA第三章栈与队列⼀、判断题1.若⼀个栈的输⼊序列为1,2,3,……,N,输出序列的第⼀个元素为i,则第j个输出的元素是j-i-1 (×)解析:应该是不确定的,不能保证数字出栈后不会再⼊栈2.所谓“循环队列”是指⽤单向循环链表或者循环数组表⽰的队列(×)解析:循环队列指的是后者,⽤数组表⽰的队列,利⽤求余数运算使得头尾相接3.在对不带头结点的链队列做出队操作时,不会改变头指针的值(×)解析:会改变头指针的值,变成相连指针的值4.不论是⼊队列操作还是⼊栈操作,在顺序存储结构上都需要考虑“溢出”的情况(√)解析:因为存储空间是有限的5.队列和栈都是运算受限的线性表,只允许在表的两端进⾏运算(×)解析:前半句对,后半句中栈只能在⼀段进⾏操作,只有队列才是在两端进⾏操作6.栈和队列的存储⽅式,既可以是顺序⽅式,也可以是链式⽅式(√)7.循环队列也存在着空间溢出问题(√)解析:循环队列的存储空间也是有限的8.循环队列执⾏出队操作时会引起⼤量元素的移动(×)9.栈是插⼊和删除只能在⼀端进⾏的线性表;队列是插⼊在⼀端进⾏,删除在另⼀端进⾏的线性表(√)10.在n个元素连续进栈以后,他们的出栈顺序和进栈顺序⼀定正好相反(√)11.环形队列中有多少个元素可以根据队⾸指针和队尾指针的值来计算(√)12.栈和队列的插⼊和删除操作特殊,所以,栈和队列是⾮线性结构(×)13.序列{1,2,3,4,5}依次⼊栈,则不可能得到{3,4,1,2,5}的出栈序列(√)14.队列中允许插⼊的⼀端叫队头,允许删除的⼀端叫队尾(×)解析:正好相反,允许插⼊的⼀端叫队尾,允许删除的⼀端叫队头,前头后尾⼆、单选题2-1.若⽤⼤⼩为6的数组来实现循环队列,且当前front和rear的值分别为0和4。

当从队列中删除两个元素,再加⼊两个两个元素后,front和rear的值分别为多少:A.2和0B.2和2C.2和4D.2和6解析:初始化创建空队列时,令front=rear=0,每当插⼊新的队列尾元素时,rear增1,每当删除⼀个队列⾸元素时,front增1。

PTA第三章栈和队列练习题

PTA第三章栈和队列练习题

1-1通过对堆栈S 操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。

输出的序列为:123。

(2分)TF 作者: DS 课程组单位: 浙江大学 1-2在用数组表示的循环队列中,front 值一定小于等于rear 值。

(1分)TF 作者: DS 课程组单位: 浙江大学 1-3若一个栈的输入序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。

(2分)TF 作者: 徐镜春单位: 浙江大学 1-4If keys are pushed onto a stack in the order {1, 2, 3, 4, 5}, then it is impossible to obtain the output sequence {3, 4, 1, 2, 5}. (2分)TF 作者: 徐镜春单位: 浙江大学 1-5所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。

(1分)TF 作者: DS 课程组单位: 浙江大学 1-6An algorithm to check for balancing symbols in an expression uses a stack to store the symbols. (1分)T F 2-1设栈S 和队列Q 的初始状态均为空,元素a 、b 、c 、d 、e 、f 、g 依次进入栈S 。

若每个元素出栈后立即进入队列Q ,且7个元素出队的顺序是b 、d 、c 、f 、e 、a 、g ,则栈S 的容量至少是: (2分)1. 12. 23. 34. 4作者: DS课程组单位: 浙江大学2-2若元素a、b、c、d、e、f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈工作,则不可能得到的出栈序列是?(2分)1. b c a e f d2. c b d a e f3. d c e b f a4. a f e d c b作者: DS课程组单位: 浙江大学2-3设一个栈的输入序列是1、2、3、4、5,则下列序列中,是栈的合法输出序列的是?(2分)1. 3 2 1 5 42. 5 1 2 3 43. 4 5 1 3 24. 4 3 1 2 51.PPPOOOPPOPPOOO2.POPOPOPPOPPOOO3.POPPOOPPOPOOPO4.POPPOOPPOPPOOO作者: DS课程组单位: 浙江大学2-5设一个堆栈的入栈顺序是1、2、3、4、5。

大学《数据结构》第三章:栈和队列-第一节-栈

大学《数据结构》第三章:栈和队列-第一节-栈

第一节栈
一、栈的定义及其运算
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 设将整数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种排列中,哪些序列是可以通过相应的入出栈操作得到的。

3.2 链栈中为何不设置头结点?答:链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。

3.3 循环队列的优点是什么? 如何判别它的空和满?答:循环队列的优点是:它可以克服顺序队列的"假上溢"现象,能够使存储队列的向量空间得到充分的利用。

判别循环队列的"空"或"满"不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。

二是少用一个元素的空间。

每次入队前测试入队后头尾指针是否会重合,如果会重合就认为队列已满。

三是设置一计数器记录队列中元素总数,不仅可判别空或满,还可以得到队列中元素的个数。

3.4 设长度为n的链队用单循环链表表示,若设头指针,则入队出队操作的时间为何? 若只设尾指针呢?答:当只设头指针时,出队的时间为1,而入队的时间需要n,因为每次入队均需从头指针开始查找,找到最后一个元素时方可进行入队操作。

若只设尾指针,则出入队时间均为1。

因为是循环链表,尾指针所指的下一个元素就是头指针所指元素,所以出队时不需要遍历整个队列。

3.5 指出下述程序段的功能是什么?(1) void Demo1(SeqStack *S){int i; arr[64] ; n=0 ;while ( StackEmpty(S)) arr[n++]=Pop(S);for (i=0, i< n; i++) Push(S, arr[i]);} //Demo1(2) SeqStack S1, S2, tmp;DataType x;...//假设栈tmp和S2已做过初始化while ( ! StackEmpty (&S1)){x=Pop(&S1) ;Push(&tmp,x);}while ( ! StackEmpty (&tmp) ){x=Pop( &tmp);Push( &S1,x);Push( &S2, x);}(3) void Demo2( SeqStack *S, int m){ // 设DataType 为int 型SeqStack T; int i;InitStack (&T);while (! StackEmpty( S))if(( i=Pop(S)) !=m) Push( &T,i);while (! StackEmpty( &T)){i=Pop(&T); Push(S,i);}}(4)void Demo3( CirQueue *Q){ // 设DataType 为int 型int x; SeqStack S;InitStack( &S);while (! QueueEmpty( Q )){x=DeQueue( Q); Push( &S,x);}while (! StackEmpty( &s)){ x=Pop(&S); EnQueue( Q,x );}}// Demo3(5) CirQueue Q1, Q2; // 设DataType 为int 型int x, i , m = 0;... // 设Q1已有内容,Q2已初始化过while ( ! QueueEmpty( &Q1) ){ x=DeQueue( &Q1 ) ; EnQueue(&Q2, x); m++;}for (i=0; i< n; i++){ x=DeQueue(&Q2) ;EnQueue( &Q1, x) ; EnQueue( &Q2, x);}二、算法设计题3.6 回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。

数据结构第三章-栈和队列(严蔚敏)

数据结构第三章-栈和队列(严蔚敏)

}
s
top
top
…... 栈底 ^
x
24
出栈算法
LinkStack Pop_LinkStack (LinkStack DataType *x) { StackNode *p; if (top= =NULL)return NULL; else {*x = top->data; p = top; top = top->next; top top free (p); a return top;} p } x a top,
11
顺序栈
栈的顺序存储结构简称为顺序栈,是利用一组地址 连续的存储单元依次存放自栈底到栈顶的数据元素,同 时附设指针top指向实际栈顶后的空位置。
12
顺序表和顺序栈的操作区别
以线性表 S= (a1 , a2 , …. , an-1 , an )为例 顺序栈S an+1 高地址 顺序表S 高地址 表尾 an an …… …… S[i] ai ai …… …… a2 低地址 a1 a2 低地址 表头 a1 栈顶top 栈顶top
Stacksize 指示栈的当前可使用的最大容量。栈的初始化操作为: 按设定的初始分配量进行第一次存储分配; base可称为栈底指针,在顺序栈中它始终指向栈底的位置,若 base的值为NULL,则表明栈结构不存在。 top为栈顶指针,其初值指向栈底,即top=base可作为栈空的标 记; 每当插入新的栈顶元素时(入栈),堆栈指针top先压后加 (S[top++]=an+1); ; 删除栈顶元素时(出栈),堆栈指针top先减后弹
B
A
19
顺序栈入栈 int push(SqStack &s, SElemType e){ if (s.top-s.base>=s.stacksize){//栈满的判断 s.base=(SElemTYpe*) realloc(s.base,s.stacksize+ STACKINCREMENT)*sizeof(SElemType)); if (!s.base) exit (OVERFLOW); s.top=s.base+s.stacksize; s.stacksize+=STACKINCREMENT; top } *s.top++=e; //入栈( *s.top=e; *s.top++); return OK; } base

第3章 栈和队列(期末复习含习题)

第3章 栈和队列(期末复习含习题)

第二章栈和队列考点一:栈的定义只允许在表的末端进行插入和删除的线性表。

考点二:进栈、退栈(重点:P.90.只考顺序栈,链式栈不考)(1)动态顺序存储表示:◆结点进栈:首先将数据元素保存到栈顶(top所指的当前位置),然后执行top加1,使top 指向栈顶的下一个存储位置;◆结点出栈:首先执行top减1,使top指向栈顶元素的存储位置,然后将栈顶元素取出。

(2)静态顺序存储表示:◆结点进栈:首先执行top加1,使top指向新的栈顶位置,然后将数据元素保存到栈顶(top 所指的当前位置)。

◆结点出栈:首先把top指向的栈顶元素取出,然后执行top减1,使top指向新的栈顶位置。

若栈的数组有Maxsize个元素,则top=Maxsize-1时栈满。

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

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

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

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

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

供选择的答案:A~D:①a1 ②a2 ③a3 ④a4E:①1 ②2 ③3 ④0答:ABCDE=2, 4, 1, 2, 2(C)2.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为A.i B.n=i C.n-i+1 D.不确定解释:当p1=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的(事实上题目已经表明了),那么输入顺序必定是1,2,3,…,n,则出栈的序列是n,…,3,2,1。

(若不要求顺序出栈,则输出序列不确定)考点三、四:递归过程和递归栈(重点:P105(请结合P。

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

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

3.4简述以下算法的功能
(2) status algo2(Stack S , int e){ Stack T ; int d ; InitStack(T); while (! StackEmpty(S)){ Pop(S,d); if (d!=e) Push(T,d); } while(!Stackempty(T)){ Pop(T,d); Push(S,d); } }
习题课
第3章 栈和队列
3.1
(1)如果进站的车厢序列为123,则可能得到 的出站车厢序列是什么? (2)如果进站的车厢序列为123456,则能否 得到435612和135426出站序列,并请说 明为什么不能得到或如何得到。
(1) 123 , 132 , 213 , 231 , 321 (2) 435612不能得到(6出站时,12必须在站中,只能出站成21,无法 得到12) 135426可以 1S1X2S3S3X4S5S5X4X2X6S6X
3.28 带头指针的循环链表表示队列,并且 只设一个指针指向队尾结点,编写队列初始 化、入队列和出队列算法
typedef struct QNode{ QElemTypቤተ መጻሕፍቲ ባይዱ data; Struct Qnode *next; }QNode,*QueuePtr; typedef struct { QueuePtr rear; }LinkQueue;
3.4简述以下算法的功能
(1)status algol(Stack S){ int I,n,A[255]; n = 0; while (!Stackempty(S)) {n++;Pop(S,A[n]);} for (i=1 ; i<=n ; i++) Push(S,A[i]); }

《数据结构》习题集:第3章栈和队列

《数据结构》习题集:第3章栈和队列

《数据结构》习题集:第3章栈和队列第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、队头尾指针都可能要修改。

第三章+栈和队列(参考答案)

第三章+栈和队列(参考答案)

第三章栈和队列一、判断题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]为栈顶元素。

《数据结构》习题汇编03 第三章 栈和队列 试题上课讲义

《数据结构》习题汇编03 第三章 栈和队列 试题上课讲义

《数据结构》习题汇编03第三章栈和队列试题第三章栈和队列试题一、单项选择题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是指向栈顶的指针。

PTA第三章栈和队列理解练习知识题

PTA第三章栈和队列理解练习知识题

1-1通过对堆栈S操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。

输出的序列为:123。

(2分)T F作者: DS课程组单位: 浙江大学1-2在用数组表示的循环队列中,front值一定小于等于rear值。

(1分)T F作者: DS课程组单位: 浙江大学1-3若一个栈的输入序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。

(2分)T F作者: 徐镜春单位: 浙江大学1-4If keys are pushed onto a stack in the order {1, 2, 3, 4, 5}, then it is impossible to obtain the output sequence {3, 4, 1, 2, 5}. (2分)T F作者: 徐镜春单位: 浙江大学1-5所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。

(1分)T F作者: DS课程组单位: 浙江大学1-6An algorithm to check for balancing symbols in an expression uses a stack to store the symbols. (1分)T F2-1设栈S和队列Q的初始状态均为空,元素a、b、c、d、e、f、g依次进入栈S。

若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是b、d、c、f、e、a、g,则栈S的容量至少是:(2分)1. 12. 23. 34. 4作者: DS课程组单位: 浙江大学2-2若元素a、b、c、d、e、f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈工作,则不可能得到的出栈序列是?(2分)1. b c a e f d2. c b d a e f3. d c e b f a4. a f e d c b作者: DS课程组单位: 浙江大学2-3设一个栈的输入序列是1、2、3、4、5,则下列序列中,是栈的合法输出序列的是?(2分)1. 3 2 1 5 42. 5 1 2 3 43. 4 5 1 3 24. 4 3 1 2 51.PPPOOOPPOPPOOO2.POPOPOPPOPPOOO3.POPPOOPPOPOOPO4.POPPOOPPOPPOOO作者: DS课程组单位: 浙江大学2-5设一个堆栈的入栈顺序是1、2、3、4、5。

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

1-1通过对堆栈S 操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。

输出的序列为:123。

(2分)TF 作者: DS 课程组单位: 浙江大学 1-2在用数组表示的循环队列中,front 值一定小于等于rear 值。

(1分)TF 作者: DS 课程组单位: 浙江大学 1-3若一个栈的输入序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。

(2分)TF 作者: 徐镜春单位: 浙江大学 1-4If keys are pushed onto a stack in the order {1, 2, 3, 4, 5}, then it is impossible to obtain the output sequence {3, 4, 1, 2, 5}. (2分)TF 作者: 徐镜春单位: 浙江大学 1-5所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。

(1分)TF 作者: DS 课程组单位: 浙江大学 1-6An algorithm to check for balancing symbols in an expression uses a stack to store the symbols. (1分)T F 2-1设栈S 和队列Q 的初始状态均为空,元素a 、b 、c 、d 、e 、f 、g 依次进入栈S 。

若每个元素出栈后立即进入队列Q ,且7个元素出队的顺序是b 、d 、c 、f 、e 、a 、g ,则栈S 的容量至少是: (2分)1. 12. 23. 34. 4作者: DS课程组单位: 浙江大学2-2若元素a、b、c、d、e、f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈工作,则不可能得到的出栈序列是?(2分)1. b c a e f d2. c b d a e f3. d c e b f a4. a f e d c b作者: DS课程组单位: 浙江大学2-3设一个栈的输入序列是1、2、3、4、5,则下列序列中,是栈的合法输出序列的是?(2分)1. 3 2 1 5 42. 5 1 2 3 43. 4 5 1 3 24. 4 3 1 2 51.PPPOOOPPOPPOOO2.POPOPOPPOPPOOO3.POPPOOPPOPOOPO4.POPPOOPPOPPOOO作者: DS课程组单位: 浙江大学2-5设一个堆栈的入栈顺序是1、2、3、4、5。

若第一个出栈的元素是4,则最后一个出栈的元素必定是:(2分)1. 12. 33. 54.1或者5作者: DS课程组单位: 浙江大学2-6为解决计算机主机与打印机之间速度不匹配问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。

该缓冲区的逻辑结构应该是?(1分)1.堆栈2.队列3.树4.图作者: DS课程组单位: 浙江大学2-7某队列允许在其两端进行入队操作,但仅允许在一端进行出队操作。

若元素a、b、c、d、e依次入此队列后再进行出队操作,则不可能得到的出队序列是:(2分)1. b a c d e2. d b a c e3. e c b a d4. d b c a e1.2和02.2和23.2和44.2和6作者: DS课程组单位: 浙江大学2-10以下不是栈的基本运算的是( )。

(2分)1.删除栈顶元素2.删除栈底元素3.判断栈是否为空4.将栈置为空栈作者: 严冰单位: 浙江大学城市学院在一个链队列中,front和rear分别为头指针和尾指针,则插入一个结点s的操作为()。

(2分)1.front=front->next2.s->next=rear;rear=s3.rear->next=s;rear=s;4.s->next=front;front=s;作者: 杨斌单位: 枣庄学院2-12依次在初始为空的队列中插入元素a,b,c,d以后,紧接着做了两次删除操作,此时的队头元素是()。

(2分)1. a2. b3. c4. d作者: 杨斌单位: 枣庄学院2-13当用大小为N的数组存储顺序循环队列时,该队列的最大长度为()。

(2分)1.N2.N-13.N+14.N+2作者: 杨斌单位: 枣庄学院判断一个循环队列QU(最多元素为MaxSize)为空的条件是()。

(2分)1.QU.front == QU.rear2.QU.front != QU.rear3.QU.front == (QU.rear + 1) % MaxSize4.QU.front != (QU.rear + 1) % MaxSize作者: 严冰单位: 浙江大学城市学院2-15(neuDS)在队列中存取数据元素的原则是()。

(2分)1.先进先出2.先进后出3.后进先出4.没有限制作者: 徐婉珍单位: 浙江大学2-16循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是()。

(2分)1.(rear-front+m)%m2.rear-front3.rear-front-14.rear-front作者: 杨斌单位: 枣庄学院2-17若以1234作为双端队列的输入序列,则既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的是()。

(2分)1.12342.41323.42314.4213作者: 杨斌单位: 枣庄学院2-18(neuDS)在链栈中,进行出栈操作时( )。

(2分)1.需要判断栈是否满2.需要判断栈是否为空3.需要判断栈元素的类型4.无需对栈作任何操作作者: 徐婉珍单位: 广东东软学院2-19(neuDS)在栈中存取数据的原则是()。

(2分)1.先进先出2.先进后出3.后进后出4.没有限制作者: 徐婉珍单位: 广东东软学院2-20链式栈与顺序栈相比,一个比较明显的优点是()。

(2分)1.插入操作更加方便2.通常不会出现栈满的情况3.不会出现栈空的情况4.删除操作更加方便作者: 严冰单位: 浙江大学城市学院2-21若(a-b)*(c+d)是中序表达式,则其后序表达式是()。

(2分)1.abcd+*-2.ab-cd+*3.ab-*cd+4.a-bcd+*1.PPPOOO2.POPOPO3.POPPOO4.PPOOPO作者: DS课程组单位: 浙江大学2-23现有队列Q 与栈S,初始时Q 中的元素依次是{ 1, 2, 3, 4, 5, 6 }(1在队头),S 为空。

若允许下列3种操作:(1)出队并输出出队元素;(2)出队并将出队元素入栈;(3)出栈并输出出栈元素,则不能得到的输出序列是:(2分)1.1, 2, 5, 6, 4, 32.2, 3, 4, 5, 6, 13.3, 4, 5, 6, 1, 24.6, 5, 4, 3, 2, 1作者: 考研真题单位: 浙江大学2-24Supposed that a, b, c, d, e and f are pushed onto a stack in the given order. Assume that pushing and popping can be done alternatively, but no consecutive three poppings are allowed. Then among the following, the impossible popping sequence is: (2分)1. b c a e f d2. c b d a e f3. d c e b f a4. a f e d c b作者: DS课程组单位: 浙江大学2-25Given an empty stack S and an empty queue Q. Push elements {1, 2, 3, 4, 5, 6, 7} one by one onto S. If each element that is popped from S is enqueued onto Q immediately, and if the dequeue sequence is {4, 5, 7, 6, 3, 2, 1}, then the minimum size of S must be: (2分)1. 22. 33. 44. 5作者: Martin Ester单位: 浙江大学2-26Given the pushing sequence of a stack as {6, 5, 4, 3, 2, 1}. Among the following, the impossible popping sequence is: (2分)1. 2 3 4 1 5 62. 3 4 6 5 2 13. 5 4 3 6 1 24. 4 5 3 1 2 6作者: DS课程组单位: 浙江大学2-27下列关于栈的叙述中,错误的是:(2分)1.采用非递归方式重写递归程序时必须使用栈2.函数调用时,系统要用栈保存必要的信息3.只要确定了入栈次序,即可确定出栈次序4.栈是一种受限的线性表,允许在其两端进行操作1.仅12.仅1、2、3精品文档精品文档3.仅 1、3、4 4. 仅 2、3、4201712190218 李文超 61.0 F(2.0) F(1.0) T(2.0) T(2.0) F(1.0) T(1.0) C(2.0) D(2.0) A(2.0) D(2.0) D(2.0) B(1.0) D(2.0) A(2.0) B(2.0) C(2.0) C(2.0) B(2.0) A(2.0) A(2.0) A(2.0) C(2.0) B(2.0) B(2.0) B(2.0) B(2.0) C(3.0)A(2.0) C D(2.0) D(2.0) B(2.0) C(2.0)。

相关文档
最新文档