栈对分课堂作业

合集下载

栈和队列练习1

栈和队列练习1

第三章栈和队列一、选择题部分1. 一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是(C)。

(A) edcba(B)decba(C)dceab (D)abcde2.栈结构通常采用的两种存储结构是(A)。

(A)线性存储结构和链表存储结构(B)散列方式和索引方式(C)链表存储结构和数组(D)线性存储结构和非线性存储结构3.判定一个顺序栈ST(最多元素为m0)为空的条件是( B)。

(A) ST-〉top!=0 (B)ST-〉top==0(C)ST-〉top!=m0 (D)ST-〉top=m04.判定一个栈ST(最多元素为m0)为栈满的条件是( C)。

(A)ST-〉top!=0 (B)ST-〉top==0(C)ST-〉top==m0(D)ST-〉top==m0-15.一个队列的入列序列是1,2,3,4,则队列的输出序列是( B)。

(A)4,3,2,1(B)1,2,3,4(C)1,4,3,2(D)3,2,4,16.循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear 则当前队列中的元素个数是(B )(A)(rear-front+m)%m (B) rear-front+1 (C)rear-front-1(D)rear-front7.栈和队列的共同点是(C )(A)都是先进后出(B)都是先进先出(C)只允许在端点处插入和删除元素(D)没有共同点8.表达式a*(b+c)-d的后缀表达式是(B)。

(A)abcd*+-(B)abc+*d- (C)abc*+d-(D)-+*abcd9.4个元素a1,a2,a3和a4依次通过一个栈,在a4进栈前,栈的状态,则不可能的出栈序是(C)(A)a4,a3,a2,a1 (B)a3,a2,a4,a1(C)a3,a1,a4,a2 (D)a3,a4,a2,a110.以数组Q[0..m-1]存放循环队列中的元素,变量rear和qulen分别指示循环队列中队尾元素的实际位置和当前队列中元素的个数,队列第一个元素的实际位置是( D )(A)rear-qulen (B)rear-qulen+m(C)m-qulen (D)(1+rear+m-qulen)% m二、填空题部分1.栈的特点是(先进后出),队列的特点是(先进先出)。

数据结构1-6章习题

数据结构1-6章习题

算法与数据结构》第 1-6 章课堂测验(双号)一、选择题1、 已知一个栈的进栈序列是1,2,3,…,n,其输出序列是p i ,p 2,…,p n ,若p i =n,则 p i 的值。

( c )(A) i (B) n-i (C) n-i+1 (D) 不确定2、 设n 个元素进栈序列是1,2,3,…,n,其输出序列是p i ,p 2,…,p n ,若p i =3,则p 2 的值。

( c )(A) 一定是 2 (B) 一定是 1 (C) 不可能是 1 (D) 以上都不对3、 若一棵二叉树具有 10 个度为 2的结点,5 个度为 1 的结点,则度为 0 的结点 个数是( b )A.6B.11C.15D. 不确定4、 在下述结论中,正确的是( d ) ① 只有一个结点的二叉树的度为 0; ② 二叉树的度为 2;③ 二叉树的左右子树可任意交换 ;④ 深度为K 的完全二叉树的结点个数小于或等于深度相同的满二叉树。

A.①②③B. ②③④C. ②④D. ①④5、一棵树高为 K 的完全二 叉树至少有()个结点。

( a )A.2 k- 1 k-1 B.2k-1+1 k-1 C.2 k-1D.2k二、简答题1 简述下列术语:线性表,顺序表,链表。

2线性表:最常用且最简单的一种数据结构。

一个线性表是 n 个数据元素的有限序列。

3 顺序表:是指用一组连续的存储单元一次存储线性表中的数据元素。

物理结构和逻辑 结构都相邻。

4链表:逻辑结构相邻的数据元素物理结构不一定相邻。

采用指针的形式连接起来。

2何时选用顺序表,何时选用链表作为线性表的存储结构合适 ?各自的主要优 缺点是什么 ?不需要经常大量的修改表或需要随机存取的情况下可以选用顺序表; 相反需要经常大量的修改表,但不是频繁的随机存取的情况下可选用链式表。

3 链表所表示的元素是否有序 ?如有序,则有序性体现于何处 ?链表所表示的元素 是否一定要在物理上是相邻的 ?有序表的有序性又如何理解 ?答:有序。

天大数据结构_实验作业二_栈(顺序栈)+队列(循环队列)

天大数据结构_实验作业二_栈(顺序栈)+队列(循环队列)

实验作业二:栈(顺序栈)和队列(循环队列)1. 将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。

当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。

两个栈均从两端向中间增长。

当向第0号栈插入一个新元素时,使top[0]增1得到新的栈顶位置,当向第1号栈插入一个新元素时,使top[1]减1得到新的栈顶位置。

当top[0]+1 == top[1]时或top[0] == top[1]-1时,栈空间满,此时不能再向任一栈加入新的元素。

试定义这种双栈(Double Stack)结构的类定义,并实现判栈空、判栈满、插入、删除算法。

2. 求fibonacci数列算法,并比较。

(递归+非递归)(非递归方法可查阅其他资料)编写实习报告要求:一、需求分析二、概要设计1.抽象数据类型2.算法三、详细设计程序代码(注释)四、调试分析调试过程中所做的工作,时间复杂度等五、测试结果输入数据和输出数据示例六、说明(如果有)编程语言:C语言或C++语言实习报告提交方式:下次上机前,将实习报告(.doc)和源程序(.cpp)压缩成一个rar 文件,文件名称为学号_班级_姓名_第几次作业。

例如:3010216155_六班_张三_第二次作业.rar。

实习报告作为本课程的平时成绩。

抄袭、雷同,双方均为0分。

第一题:一、需求分析程序要求建立一个共享栈,分配一个存储空间,两个栈分别位于两头。

并实现对两个栈的插入,删除,和判断栈满和栈空。

栈的位置不同,所以要求对不同栈的插入和删除采用不同的算法。

二、概要设计1.抽象数据类型typedef struct {int *base;int *top;int stacksize;}stack;2.算法1.建立栈。

int instack(stack &s,stack &w,int length){s.base=(int *)malloc(length*sizeof(length));w.base=s.base+length;if(!s.base||!w.base) return 0;else{s.top=s.base;w.top=w.base;s.stacksize=length;w.stacksize=length;}return 1;}2.判断栈空。

DS博客作业02--栈和队列

DS博客作业02--栈和队列

DS博客作业02--栈和队列0.PTA得分截图1.本周学习总结(0-4分)1.1 总结栈和队列内容⼀.栈栈的定义栈是⼀种只能在⼀端进⾏插⼊或删除操作的线性表,俗称:后进先出。

表中允许进⾏插⼊、删除操作的⼀端称为栈顶。

栈的进栈出栈规则:1.栈顶出栈->栈底最后出栈;2.时进时出->元素未完全进栈时,即可出栈。

栈的分类:1.顺序栈利⽤⼀组地址连续的存储单元依次存放⾃栈底到栈顶的数据元素,同时附设指针 top 指⽰栈顶元素在顺序栈中的位置,附设指针 base 指⽰栈底的位置。

同样,应该采⽤可以动态增长存储容量的结构。

如果栈已经空了,再继续出栈操作,则发⽣元素下溢,如果栈满了,再继续⼊栈操作,则发⽣元素上溢。

栈底指针 base 初始为空,说明栈不存在,栈顶指针 top 初始指向 base,则说明栈空,元素⼊栈,则 top++,元素出栈,则 top--,故,栈顶指针指⽰的位置其实是栈顶元素的下⼀位(不是栈顶元素的位置)。

2.链栈其实就是链表的特殊情形,⼀个链表,带头结点,栈顶在表头,插⼊和删除(出栈和⼊栈)都在表头进⾏,也就是头插法建表和头删除元素的算法。

显然,链栈插⼊删除的效率较⾼,且能共享存储空间。

栈的基本运算InitStack(&s):初始化栈。

构造⼀个空栈s。

DestroyStack(&s):销毁栈。

释放栈s占⽤的存储空间。

StackEmpty(s):判断栈是否为空:若栈s为空,则返回真;否则返回假。

Push(&S,e):进栈。

将元素e插⼊到栈s中作为栈顶元素。

Pop(&s,&e):出栈。

从栈s中退出栈顶元素,并将其值赋给e。

GetTop(s,&e):取栈顶元素。

返回当前的栈顶元素,并将其值赋给e。

顺序栈的功能操作代码实现1.图像表⽰2.结构体定义typedef struct{ ElemType data[MaxSize];int top; //栈顶指针} Stack;typedef Stack *SqStack;3.基本运算<1>初始化栈initStack(&s)void InitStack(SqStack &s){ s=new Stack;s->top=-1;}<2>销毁栈ClearStack(&s)void DestroyStack(SqStack &s){ delete s;}<3>判断栈是否为空StackEmpty(s) bool StackEmpty(SqStack s){ return(s->top==-1);}<4>进栈Push(&s,e)bool Push(SqStack &s,ElemType e){ if (s->top==MaxSize-1)return false;s->top++; //栈顶指针增1s->data[s->top]=e;return true;}<5>出栈Pop(&s,&e)bool Pop(SqStack &s,ElemType &e){if (s->top==-1) //栈为空的情况,栈下溢出 return false;e=s->data[s->top];//取栈顶指针元素s->top--; //栈顶指针减1return true;}<6>取栈顶元素GetTop(s)bool GetTop(SqStack *s,ElemType &e) { if (s->top==-1) //栈为空的情况return false;e=s->data[s->top];return true;}4.顺序栈的四要素栈空条件:top=-1栈满条件:top=MaxSize-1进栈e操作:top++; st->data[top]=e 退栈操作:e=st->data[top]; top--;链栈的功能操作代码实现1.图像表⽰2.结构体定义typedef int ElemType;typedef struct linknode{ ElemType data; //数据域struct linknode *next; //指针域} LiNode,*LiStack3.基本运算<1>初始化栈initStack(&s)void InitStack(LiStack &s){ s=new LiNode;s->next=NULL;}<2>销毁栈ClearStack(&s)void DestroyStack(LiStack &s){ LiStack p;while (s!=NULL){ p=s;s=s->next;free(p);}}<3>判断栈是否为空StackEmpty(s)bool StackEmpty(LiStack s){return(s->next==NULL);}<4>进栈Push(&s,e)void Push(LiStack &s,ElemType e){ LiStack p;p=new LiNode;p->data=e; //新建元素e对应的节点*pp->next=s->next; //插⼊*p节点作为开始节点s->next=p;}<5>出栈Pop(&s,&e)bool Pop(LiStack &s,ElemType &e){ LiStack p;if (s->next==NULL) //栈空的情况return false;p=s->next; //p指向开始节点e=p->data;s->next=p->next; //删除*p节点free(p); //释放*p节点return true;}<6>取栈顶元素GetTop(s,e)bool GetTop(LiStack s,ElemType &e){ if (s->next==NULL) //栈空的情况return false;e=s->next->data;return true;}4.链栈的四要素栈空条件:s->next=NULL栈满条件:不考虑进栈e操作:结点插⼊到头结点后,链表头插法退栈操作:取出头结点之后结点的元素并删除之对于栈的C++模板类:stack#include<stack>1.stack<int> s:初始化栈,参数表⽰元素类型2.s.push(t):⼊栈元素t3.s.top():返回栈顶元素4.s.pop():出栈操作只是删除栈顶元素,并不返回该元素。

课堂练习2

课堂练习2

●基本概念●基本原理●基本方法灵活运用、融会贯通一.单项选择题1.一个栈的输入序列为12345,则下列序列中是栈的输出序列的是()。

A.23415B.54132C.31245D.142532.在线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。

A.单链表B.仅有头指针的单循环链表C.双链表D.仅有尾指针的单循环链表3.链表不具有的特点是()。

A.可随机访问任一元素B.插入、删除不需要移动元素C.不必事先估计存储空间D.所需空间与线性表长度成正比4.对二叉树从1开始进行连续编号,要求每个结点的编号大于其左右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用()次序的遍历实现编号。

A.先序B.中序C.后序D.从根开始的层次遍历5.某二叉树的先序序列和后序序列正好相反,则该二叉树一定是()的二叉树。

A.空或只有一个结点B.高度等于其结点数C.任一结点无左孩子D.任一结点无右孩子6.下列排序算法中,时间复杂度不受数据初始状态影响,恒为O(nlog2n)的是()。

A.堆排序B.冒泡排序C.直接选择排序D.快速排序7.任何一个无向连通图的最小生成树()。

A.只有一棵B.有一棵或多棵C.一定有多棵D.可能不存在8.下列序列中,()是执行第一趟快速排序后得到的序列(排序的关键字类型是字符串)。

A.[da,ax,eb,de,bb] ff [ha,gc]B.[cd,eb,ax,da] ff [ha,gc,bb]C.[gc,ax,eb,cd,bb] ff [da,ha]D.[ax,bb,cd,da] ff [eb,gc,ha]9.用n个键值构造一棵二叉排序树,最低高度为()。

A.n/2B.nC.⎣log2n⎦D. ⎣log2n⎦+110.折半查找法要求查找表中各元素的键值必须是()排列。

A.递增或递减B.递增C.递减D.无序11.对于键值序列{12,13,11,18,60,15,7,18,25,100},用筛选法建堆,必须从键值为()的结点开始。

栈的练习及答案

栈的练习及答案

1、顺序栈S,栈顶指针为top,则栈置空操作是s->top==-13、栈是一种特殊的___线性表______,又称为___后进先出线性表______.4、判定一个栈ST(最多元素为m0)为空的条件是ST->top= -18、队列是一种特殊的___线性表_____,允许插入的一端称为___队头____,•允许删除的一端称为__队尾____,所以队列又称为____先进先出________.10、栈的两个重要应用是____后进先出_______和___递归______.5. 在具有n个单元的循环队列中,队满时共有n-1个元素。

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

12、用数组A存放循环队列的元素值,若其头指针为front,尾指针为rear,则循环队列中当前元素个数为(rear-front+m)%m13、设循环队列Q头指针为front,尾指针为rear,队列的最大容量为M,写出循环队列队满和队空的判定条件判空:q->front = q->rear;判满:(q->rear + 1) % maxsize = q->front;14、设循环队列的容量为40(序号从0到39),现经过一系列的入队和出队运算后,有①front=11,rear=19; ②front=19,rear=11;问在这两种情况下,循环队列中各有元素多少个?公式:(N+r-f)%N 8,3223、设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的车站,具体写出这四辆列车开出车站的所有可能的顺序.(14)答:全进去再出:4,3,2,1进去三个之后再出:3214、3241,3421进去两个之后再出:2134、2143、2314、2341 2431进去一个之后再出:1234、1243、1324、1342、143211、栈和队列都是运算受到限制的特殊的线性表,栈和队列有何不同?栈是限定仅在表尾进行插入或删除的线性表,又称为后进先出的线性表. 队列是只允许在表的一端进行插入,而在另一端进行删除元素,又称先进先出的线性表1.按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,并仿照教材的格式,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:A-B×C/D二、判断正误(判断下列概念的正确性,并作出简要的说明。

栈和队列习题及答案

栈和队列习题及答案

栈和队列习题及答案第三章栈和队列⼀、选择题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 设将整数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 种排列中,哪些序列是可以通过相应的入出栈操作得到的。

答:(1)出栈序列为:1324(2) 不能得到1423 序列。

因为要得到14 的出栈序列,则应做Push(1),Pop(),Push(2),Push (3),Push(4),Pop()o这样,3在栈顶,2在栈底,所以不能得到23的出栈序列。

能得到1432 的出栈序列。

具体操作为:Push(1), Pop(),Push(2),Push(3),Push(4),Pop(),Pop(),Pop()(3) 在1,2 ,3 ,4 的24 种排列中,可通过相应入出栈操作得到的序列是:1234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3214,3241,3421,4321不能得到的序列是:1423,2413,3124,3142,3412,4123,4132,4213,4231,43123.2 链栈中为何不设置头结点? 答:链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。

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

栈与队列习题参考答案

栈与队列习题参考答案

习题三参考答案备注: 红色字体标明的是与书本内容有改动的内容。

一、选择题1.在栈中存取数据的原则是( B )。

A.先进先出 B. 先进后出C. 后进后出D. 没有限制2.若将整数1、2、3、4依次进栈,则不可能得到的出栈序列是( D )。

A.1234 B. 1324 C. 4321 D. 14233.在链栈中,进行出栈操作时(B )。

A.需要判断栈是否满 B. 需要判断栈是否为空C. 需要判断栈元素的类型D. 无需对栈作任何差别4.在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize,则顺序栈的判空条件是( A )。

A.top==0 B.top==-1 C. top==maxSize D.top==maxSize-15.在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize。

则顺序栈的判满的条件是( C )。

A.top==0 B.top==-1 C. top==maxSize D.top==maxSize-16.在队列中存取数据元素的原则是( A )。

A.先进先出 B. 先进后出C. 后进后出D. 没有限制7.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的判空条件是(A )。

A.front==rear B. front!=rearC. front==rear+1D. front==(rear+1)% maxSize8.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的判满条件是(D )。

A.front==rear B. front!=rearC. front==rear+1D. front==(rear+1)% maxSize9.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的长度是(C )。

栈与队列教学设计

栈与队列教学设计

数据结构(第三章)栈教学设计学院:班级:学号:姓名:栈教学设计课程名称:数据结构授课名称:栈一、教材分析:1、教材简介:名称《数据结构》(C语言版)教材简介严蔚敏吴伟民出版社清华大学出版社2、教材地位及作用:栈:第三章(3.1)基础位置,承上启下1.学生更加理解线性结构2.认识特殊的线性结构特点,学会选择运用二、学情分析:1、学生者分析:(1)学习特点:学生具有有较强的理解能力,对知识理解能力高于实际运用的掌握;(2)学习习惯:缺乏联系实际、创新能力,对实际应用知识不够重视。

2、学习需要分析:(1)已掌握:数据结构线性表的特点、顺序表、链表;(2)更需要:学生针对具体问题选择合适的存储结构,掌握更具有实际应用的线性结构——栈三、教学目标1、知识目标:(1)理解栈数据存储方式及特点(2)熟练掌握栈基本操作(3)理解栈满空的条件及表达方式2、技能目标:学会根据栈的特点针对具体问题正确选用相应的存储方式3、情感目标:激发学生对于实际问题去理解理论知识的意识和热情四、教学重点、难点、深化:重点:栈的数据储存方式即进栈出栈过程难点:栈的满与空判断条件及表达方式本节内容的深化:栈的递归调用五、教学方法:讲授教学法、互动教学法、演示教学法、回顾反思教学法教学手段:口头授课、应用多媒体授课方式: 讲授理论--动画演示--提问(可讨论)--启发引导--选用多媒体课件--课堂练习--回顾反思--课后习题教学媒介:多媒体结合板书六、课前准备:多媒体课件制作七、教学过程:授课时间:8分钟具体分配:1、课前回顾(1分钟)2、新课导入(1分钟)栈的定义及其相关概念(1分钟)3.课堂讲解(3分钟)4.课堂练习(1分钟)5.课堂总结(1分钟)6.作业布置(1分钟)教学流程及内容:教学环节教师活动学生活动设计目的课前回顾回顾(1)线性表四大特点(2)顺序表(3)链表(4)针对具体问题选择合适的存储结构相关重要知识配合教师回顾之前学习的知识学生回顾上节课知识,对知识的巩固,也是为本节课的内容掌握打下基础新课导入案例动画播放:网球进出杯子观看动画配合老师的提问及时互动用形象的动画设计,激发同学们对新课学习的兴趣课堂讲解讲解教学内容:(板书)一、栈的定义栈相关概念:栈顶栈底、进栈、出栈二、进栈、出栈具体过程演示与讲解,让同学理解栈栈满和栈空引导同学总结出栈的特点:后进先出一、认真听教师的讲解过程二、与教师积极互动,理解并掌握讲解知识同学参与课堂,提高学生自主性,使抽象的知识实例化、形象化,课堂练习提问两道选择题,提问:1、进栈时,先判别栈是否();出栈时,先判别栈是否();2、当栈中元素为n个,进栈时发生上溢,则说明该栈的最大容量为()思考并回答教师的问题对课堂效果及教学目标的检验,了解学生掌握情况,方便教师进行教学反思,也是弹性设计,时间不够可以当做作业布置下去课堂总结结合板书与课件对本节课内结合自己的笔帮助学生建立清晰栈满栈空判断条件及表达方式(2分钟)容做一个总结,告诉同学们本节课重点、难点 记、配合教师的板书、课件,对本节课知识进行回顾 的知识框架,让学生明确本节课重难点,在复习中做到心中有数作业布置基础题:1.请写出A 、B 、C 、D 四个元素进出栈的所有可能顺序 提高题:2复习C 语言中所学的汉诺塔递归调用内容受到启发自学栈的递归记下教师布置的作业,并明确作业要求 巩固本节课知识、举一反三,提高题用来强化知识点;并提高学生自主思考,合作学习的能力 八、设计反思: 解决方法解决方法解决方法九、板书设计:栈一、概述 四、数据储存方式 学生积极性不大 课堂气氛不活跃 1、增加互动环节 2、提高课堂趣味性学生对已学知识 不够扎实增加课堂回顾时间学生对新授知识接受效果差1、安排复习课2、提供作业补充及讲解后 进 先 出1、定义:2、概念:Top 、Base 、Push 、Pop 2、1、进栈&出栈2、栈空&栈满。

栈和队列思政小课堂理解

栈和队列思政小课堂理解

栈和队列思政小课堂理解栈和队列的定义、区别,存在的意义1、栈的定义(1)栈:栈实际上是一种线性表,它只允许在固定的一段进行插入或者删除元素,在进行数据插入或者删除的一段称之为栈顶,剩下的一端称之为栈顶。

其遵循的原则是后进先出。

(2)栈的核心操作:三大核心操作,入栈,出栈,取栈顶元素(3)对于栈的形象理解:子弹的弹夹我们一定见过,子弹在被压入的时候就相当于是一个个元素,而弹夹就相当于是栈。

先被压入的子弹是最后被打出的,先压入的元素是最后出来的,也就是后进先出。

2、队列的定义(1)队列:首先队列也是一种特殊的线性表,它允许在一端进行插入数据,在另一端进行删除数据的。

队列里边有队首,队尾,队首元素。

其遵循的原则是先进先出。

(2)队列的核心操作:三大核心操作分别是入队列,出队列,取队首元素。

(3)对于队列的形象理解:火车穿越隧道,火车的头相当于是队列的首,火车的尾相当于是队列的尾部。

火车在穿越隧道的时候,头部先进入隧道头部也先出隧道,尾部后进入尾部后出隧道。

队列也就是先入的元素先出队列,后进入的元素后出队列。

3、栈和队列的区别(1)栈和队列的出入方式不同:栈是后进先出、队列是先进先出。

(2)栈和队列在具体实现的时候操作的位置不同:因为栈是后进先出,它在一段进行操作;而队列是先进先出,实现的时候在两端进行。

在Java标准库中实现队列时是按照链表实现的。

4、栈和队列存在的意义上边我们提到过:栈和队列都是一种典型的线性表,都是基于线性表(顺序表和链表)来实现的,那么我们研究栈和队列的目的何在?因为在栈和队列定义后,只有那三种操作,而那三种操作都是最常用的,它支持的操作越少,我们在使用的时候关心的点也就越少,用起来就越不容易出错。

在计算机中“少即是多”,少意味着功能比较少、比较呆板。

多意味着功能很多,用的时候要操的心就越多,就越容易出错。

综上:栈和队列存在的意义就是减少线性表的基本操作,提取常用操作,让人们使用起来更方便,更不容易出错。

软件技术栈和队列习题3

软件技术栈和队列习题3

栈与队列典型例题一、单项选择题[例8-1]在一个具有n个单元的顺序栈中,假设以地址高端作为栈底,以top为栈顶指针,则向栈中压入一个元素时top的变化是( )。

A.top不变B.top=n C.top=top-1 D.top=top+1解析:本题答案为:C。

(例8-2) 一个栈的进栈序列是a,b,c,d,e,则不可能的出栈序列是( )。

A.edcba B.decba C。

dceab D.abcde解析:栈的特点是先进后出。

在选项C中,a、b、c、d进栈,d出栈,c出栈,e进栈,e出栈,此时栈中从栈顶到栈底应该是b、a,不可能a先出栈。

本题答案为:C。

[例8-3] 若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,p n,若p l=3,则p2为( )。

A.可能是2 B.不一定是2 C.可能是1 D.一定是1解析:当p1=3时,表示3最先出栈,前面l、2应该在栈中。

此时若出栈,则p2为2;此时若进栈,则p2可能为3,4,5,…,n的任何一个。

本题答案为:A。

[例8-4]若一个栈的输入序列为1,2,3,4,…,n,输出序列的第一个元素是n,则第i个输出元素是( )。

A.n—i B.n—i—1 C.i D.n—i+1解析:本题答案为:D。

(例8-5) 栈和队列的共同点是( )。

A.都是先进后出B.都是先进先出C.只允许在表端点处插入和删除元素D.没有共同点解析:栈和队列都是操作受限的线性表,只允许在表端点处进行插入和删除操作。

本题答案为:C。

(例8-6)向一个栈顶指针为top的链栈中插入一个s所指的结点时,操作语句序列为( )。

A.top—>next=top;B.s—>next=top—>next;top—>next=s;C.s—>next=top;top=s;D.s—>next=top;top=top—>next;解析:向链栈中插入一个结点,就是在不带头结点的单链表的表头插入一个结点。

栈和队列习题及答案

栈和队列习题及答案

栈和队列习题及答案【篇一:栈和队列练习题答案】xt>一、填空题1. 线性表、栈和队列都是结构,可以在线性表的在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。

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

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

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

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

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

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

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

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

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

错,有可能。

三、单项选择题(b)1.栈中元素的进出原则是A.先进先出B.后进先出C.栈空则进D.栈满则出(c)2.若已知一个栈的入栈序列是1,2,3,?,n,其输出序列为p1,p2,p3,?,pn,若p1=n,则pi为A.i B.n-iC.n-i+1 D.不确定解释:当p1=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的(事实上题目已经表明了),那么输入顺序必定是1,2,3,?,n,则出栈的序列是n,?,3,2,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 e:①1 ②2 ③ 3 ④ 0四、阅读理解1. 【严题集3.3②】写出下列程序段的输出结果(栈的元素类型selem type为char)。

栈和队列习题集【精选】

栈和队列习题集【精选】

栈和队列部分习题一、单项选择题1.栈的插入和删除操作在______进行。

A、栈顶B、栈底C、任意位置D、指定位置2.在栈中存取数据的原则是______。

A、先进先出B、后进先出C、后进后出D、随意进出3.当利用大小为N的数组顺序存储一个栈时,假定用top==N表示栈空,则向这个栈插入一个元素时,首先应执行______语句修改top指针。

A、top++;B、top--;C、top=0;D、top=N-1;4.判断一个由ST指向的栈(最多元素m0)为满的条件是______。

A、ST->top !=0B、ST->top= =0C、ST->top!=m0D、ST->top = =m0-15.对于顺序栈stack[0..m],假设栈底在stack[0]处,并用top指向栈顶元素之后的空位置,则判断栈空的条件是______。

A、top= = -1B、top= =0C、top= =1D、top==n-16.假定利用数组a[N+1]顺序存储一个栈,用top表示栈顶指针,用top=N+1表示栈空,该数组所存储的栈的最大长度为N,则表示栈满的条件为______。

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

A、a[--top]=x;B、a[top--]=x;C、a[++top]=x;D、a[top++]=x;8.假定利用数组a[N]顺序存储一个栈,用top表示栈顶指针,用top==-1表示栈空,并已知栈未空,当退栈并返回栈顶元素时所执行的操作为______。

A、return a[--top];B、return a[top--];C、return a[++top];D、return a[top++];9.假定一个链式栈的栈顶指针用top表示,该链式栈为空的条件______。

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-6 An 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、顺序栈S,栈顶指针为top,则栈置空操作是s->top==-13、栈是一种特殊的___线性表______,又称为___后进先出线性表______.4、判定一个栈ST(最多元素为m0)为空的条件是ST->top= -18、队列是一种特殊的___线性表_____,允许插入的一端称为___队头____,•允许删除的一端称为__队尾____,所以队列又称为____先进先出________.10、栈的两个重要应用是____后进先出_______和___递归______.5. 在具有n个单元的循环队列中,队满时共有n-1个元素。

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

12、用数组A存放循环队列的元素值,若其头指针为front,尾指针为rear,则循环队列中当前元素个数为(rear-front+m)%m13、设循环队列Q头指针为front,尾指针为rear,队列的最大容量为M,写出循环队列队满和队空的判定条件判空:q->front = q->rear;判满:(q->rear + 1) % maxsize = q->front;14、设循环队列的容量为40(序号从0到39),现经过一系列的入队和出队运算后,有①front=11,rear=19; ②front=19,rear=11;问在这两种情况下,循环队列中各有元素多少个?公式:(N+r-f)%N 8,3223、设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的车站,具体写出这四辆列车开出车站的所有可能的顺序.(14)答:全进去再出:4,3,2,1进去三个之后再出:3214、3241,3421进去两个之后再出:2134、2143、2314、2341 2431进去一个之后再出:1234、1243、1324、1342、143211、栈和队列都是运算受到限制的特殊的线性表,栈和队列有何不同?栈是限定仅在表尾进行插入或删除的线性表,又称为后进先出的线性表. 队列是只允许在表的一端进行插入,而在另一端进行删除元素,又称先进先出的线性表1.按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,并仿照教材的格式,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:A-B×C/D二、判断正误(判断下列概念的正确性,并作出简要的说明。

栈习题

栈习题

括号的匹配(表达式的合法性检查)【问题描述】假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以―@‖作为表达式的结束符。

请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回―YES‖;否则返回―NO‖。

假设表达式长度小于255,左圆括号少于20个。

编程求一个后缀表达式的值【问题描述】从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。

每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。

以@作为结束标志。

比如,16–9*(4+3)转换成后缀表达式为:16□9□4□3□+*–,在字符数组A中的形式为:栈中的变化情况:运行结果:-47模拟计算机处理算术表达式过程。

从键盘上输入算术表达式串(只含+、-、×、÷运算符,允许含括号),输出算术表达式的值。

设输入的表达式串是合法的。

提示:建立两个栈,一个是操作数栈(number),一个是运算符栈(symbol),根据运算符的优先级对两个栈进行相应的操作。

1、表达式括号匹配(stack.cpp)【问题描述】假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以―@‖作为表达式的结束符。

请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回―YES‖;否则返回―NO‖。

表达式长度小于255,左圆括号少于20个。

【输入文件】输入文件stack.in包括一行数据,即表达式,【输出文件】输出文件stack.out包括一行,即―YES‖或―NO‖。

【样例输入1】2*(x+y)/(1-x)@【样例输出1】YES【样例输入2】(25+x)*(a*(a+b+b)@【样例输出2】NO2、括弧匹配检验(check.cpp)【问题描述】假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([]())或[([][])]等为正确的匹配,[(])或([]()或( ( ) ) )均为错误的匹配。

3.3.1 栈的概念、特性与基本操作-教学设计(1)

3.3.1 栈的概念、特性与基本操作-教学设计(1)
如果个数为0则表示栈空。学生尝试使用列表自带函数和方法来实现括号匹配程序。
设计意图:
通过拓展知识学习,学生加深对栈操作的理解,增强代码实现能力。
五、课堂小结
教师总结本节课所学内容,并适当布置作业,让学生完成课后练习。
设计意图:
通过思维导图,再现本节课知识体系,帮助学生将知识进行梳理;通过布置课后练习,
实现过程,讲解CAB出栈顺序不可能实现的原因。
设计意图:
通过新旧知识的联结,对比学习队列与栈的特性,学生加深对栈的理解;通过具体问题,学习栈的基本操作,从而实现知识的内化。通过代码阅读、优化和问题思考,学生将知识进
行迁移;通过出栈顺序的讨论,加深并巩固对入栈、出栈的理解。
三、实例分析
实例1:进制转换
帮助学生进一步巩固所学知识,提高问题解决能力。
教学难点:
1. 抽象与建模、设计算法,用栈结构解决问题的过程,并用栈的基本操作进行编程实现。
教学过程
一、情境导入
根据收纳箱存放书本的动画实例,总结收纳箱中书本的取放有什么特点?并列举生活中
包含栈结构特点的实例。
设计意图:
以动画方式,激发学生的学习兴趣,感知生活中蕴含栈结构的实例,并总结生活中这些
事物的特点,引出本节课的学习内容栈。
教学设计
课程基本信息
课题

教学目标
1. 依据解决问题的需要,从问题中提炼出栈结构。
2. 能够总结出栈的特性,领会栈的相关操作。
3. 通过具体任务的实践活动,体验用栈解决问题的基本流程,逐步形成运用栈结构解决问题
的思维方式和学科方法。
教学内容
教学重点:
1. 从实际问题中,能恰当地选择栈结构,并总结栈的特性及基本操作。

栈练习题及答案

栈练习题及答案
【北京理工大学 2001 九、1 (6分)】
p=NULL; q=L; ; ;
while(q!=NULL) ( ! ) L=L->next { (1) ; q->next=p;p=q; ; ; (2)___ ; q=L } (3)_____; L=p a2 a3 a4 a5 ∧
L a1
p
q
q
e4 e1 e2 e1 e1 e3 e1 e3 e1
e6 e1 e5 e1 e5 e1 e5 e1 e1
设计一个算法,利用本章所学知识判定一个字符串是否是对称字符串。 设计一个算法,利用本章所学知识判定一个字符串是否是对称字符串。若 返回1;否则返回0。例如, 均为对称字符串。 是,返回 ;否则返回 。例如,“abcba”和“abba”均为对称字符串。 和 均为对称字符串
int {
fsame ( char
* str)
sqstack sq ; int same=1 ; initstack ( sq ) ; for ( i=0 ; *(str+i) !=‘\0’ ; i++); //计算字符串的长度 计算字符串的长度 for ( j=0; j< i/2 ; j++) push ( sq , *(str+j) ); //前半部分进栈 前半部分进栈 for ( j =( i+1)/2 ; j< i; j++) { // 出栈并比较 pop( sq , x); if ( x!= *( str+j) ) same=0; } if( empty( ls ) && (same = = 1) return 1; else return 0; }
♦ 下面是用c 语言编写的对不带头结点的单链表进行就地逆 下面是用c语言编写的对不带头结点 不带头结点的单链表进行就地逆

栈和队列-题库

栈和队列-题库

位置
(A)链头 (B)链尾 (C)链中
27.在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印数据缓冲区,主机
将要输出的数据依次写入该缓冲区,而打印机则从该缓冲区中取出数据打印.该缓冲区应该是
一个
结构.
(A)堆栈 (B)队列 (C)数组 (D)线性表
28.设栈的输入序列为 1,2,3,…,n,输出序列为 a1,a2,a3,…,an,若存在 1<=k<=n 使得 ak=n,则当 k<=i<=n 时,ai 为 (A)n-i+1 (B)n-(i-k) (C)不确定 29、若已知一个栈的入栈序列是 1,2,3,4….,n,其输出序列为 p1,p2,p3,p4,….,pn,若 p1=n,
是;类似地,考虑对这四个数据元
素进行的队操作是进队两次,出队一次,再进队两次,出队一次;这时,第一次出队得到的
元素是
,第二次出队得到的元素是
。经操作后,最后在栈中或队中的元素还

个。
供选择的答案:
A~D:①a1 ②a2 ③ a3 ④a4
E: ①1 ②2 ③ 3 ④ 0
24.从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在
答卷的对应栏内。
在做进栈运算时,应先判别栈是否 ;在做退栈运算时,应先判别栈是否 。当栈
中元素为 n 个,做进栈运算时发生上溢,则说明该栈的最大容量为 。
为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应
将两栈的 分别设在这片内存空间的两端,这样,只有当 时,才产生上溢。
B. rear- front-1==m0
C. front== rear
D. front== rear+1
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

栈作业
一、关于栈我们已经知道了哪些?
(一)填空题
1.栈是_______的线性表,其运算遵循_______的原则。

2._______是限定仅在表尾进行插入或删除操作的线性表。

3. 一个栈的输入序列是:1,2,3则不可能的栈输出序列是_______。

4. 设有一个空栈,栈顶指针为1000H(十六进制),现有输入序列为1,2,3,4,5,经过PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH之后,输出序列是_______,而栈顶指针值是_______H。

设栈为顺序栈,每个元素占4个字节。

5. 当两个栈共享一存储区时,利用一维数组stack(1,n)表示,两栈顶指针为top[1]与top[2],则当栈1空时,top[1]为_______,栈2空时,top[2]为_______,栈满时为_______。

6.用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为_______。

7. 顺序栈用data[1..n]存储数据,栈顶指针是top,则值为x的元素入栈的操作是_______。

8.表达式23+((12*3-2)/4+34*5/7)+108/9的后缀表达式是_______。

(二)判断题
1. 消除递归不一定需要使用栈。

()
2. 栈是实现过程和函数等子程序所必需的结构。

()
3. 两个栈共用静态存储空间,对头使用也存在空间溢出问题。

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

()
5.栈的存储方式,既可以是顺序方式,又可以是链式方式。

()
(三)选择题
1. 对于栈操作数据的原则是()。

A. 先进先出
B. 后进先出
C. 后进后出
D. 不分顺序
2. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是()。

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

A. i
B. n-i
C. n-i+1
D. 不确定
4. 某堆栈的输入序列为a, b,c ,d,下面的四个序列中,不可能是它的输出序列的是()。

A. a,c,b,d
B. b, c,d,a
C. c, d,b, a
D. d, c,a,b
5. 输入序列为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
6. 若一个栈以向量V[1..n]存储,初始栈顶指针top为n+1,则下面x进栈的正确操作是( )。

A.top:=top+1; V [top]:=x B. V [top]:=x; top:=top+1
C. top:=top-1; V [top]:=x
D. V [top]:=x; top:=top-1
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. 表达式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; (*^(-
9. 设计一个判别表达式中左,右括号是否配对出现的算法,采用()数据结构最佳。

A.线性表的顺序存储结构 B. 队列 C. 线性表的链式存储结构 D. 栈10.若元素a、b、c、d、e、f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈操作,则不可能得到的出栈序列是。

A. d c e b f a
B. c b d a e f
C. b c a e f d
D. a f e d c b
11.元素a,b,c,d,e依次进入初始为空的栈中,若元素进栈后可停留、可出栈,直到所有元素都出栈,则在所有可能的出栈序列中,以元素d开头的序列个数是。

A.3
B.4
C.5
D.6
12. 已知操作符包括‘+’、‘-’、‘*’、‘/’、‘(’和‘)’。

将中缀表达式a+b-a*((c+d)/e-f)+g转换为等价的后缀表达式ab+acd+e/f-*-g+时,用栈来存放暂时还不能确定运算次序的操作符,若栈初始时为空,则转换过程中同时保存在栈中的操作符的最大个数是。

A.5
B.7
C.8
D.11
13. 一个栈的入栈序列为1,2,3,…,n,其出栈序列是p1,p2,p3,……,pn。

若p2=3,则p3可能取值的个数是。

二、你掌握这些运用了吗?
1. 计算算术表达式的值时,可用两个栈作辅助工具。

对于给出的一个表达式,从左向右扫描它的字符,并将操作数放入栈S1中,运算符放入栈S2中,但每次扫描到运算符时,要把它同S2的栈顶运算符进行优先级比较,当扫描到的运算符的优先级不高于栈顶运算符的优先级时,取出栈S1的栈顶和次栈顶的两个元素,以及栈S2的栈顶运算符进行运算将结果放入栈S1中(得到的结果依次用T1、T2等表示)。

为方便比较,假设栈S2的初始栈顶为®(®运算符的优先级低于加、减、乘、除中任何一种运算)。

现假设要计算表达式: A-B*C/D+E/F。

写出栈S1和S2的变化过程。

2. 在某程序中,有两个栈共享一个一维数组空间SPACE[N],SPACE[0]、SPACE[N-1] 分别是两个栈的栈底。

(1)对栈1、栈2,试分别写出(元素x)入栈的主要语句和出栈的主要语句。

(2)对栈1、栈2,试分别写出栈满、栈空的条件。

三、试试算法分析与设计
1.设计一个算法,判断一个算术表达式中的括号是否配对。

算术表达式保存在带头结点的单循环链表中,每个结点有两个域:ch和link,其中ch域为字符类型。

2. 假设以I和O分别表示入栈和出栈操作。

栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。

(1)下面所示的序列中哪些是合法的?
A. IOIIOIOO
B. IOOIOIIO
C. IIIOIOIO
D. IIIOOIOO
(2)通过对(1)的分析,写出一个算法,判定所给的操作序列是否合法。

若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)。

3. 编写算法,将任意十进制数转换成二进制,要求采用栈实现。

相关文档
最新文档