739第三章 栈和队列.ppt
《739第三章 栈和队列.ppt》由会员分享,可在线阅读,更多相关《739第三章 栈和队列.ppt(61页珍藏版)》请在三一办公上搜索。
1、栈的概念栈的存储结构栈的操作算法栈的应用队列的概念队列的存储结构与操作算法队列的操作算法队列的应用,第三章 栈和队列,3.1 栈(Stack)的概念,只允许在一端插入和删除的表允许插入和删除 的一端称为栈顶(top),另一端称 为栈底(bottom)特点 后进先出(LIFO),进栈示例,出栈示例,例:假定有4个元素A,B,C,D,按所列次序进栈,试写出所有可能的出栈序列。注意,每一个元素进栈后都允许出栈,如ACDB就是一种出栈序列。解:可能的出栈序列有ABCD,ABDC,ACBD,ACDB,ADCB,BACD,BADC,BCAD,BCDA,BDCA,CBAD,CBDA,CDBA,DCBA。,栈
2、的基本操作,1、初始化2、进栈PUSH3、出栈POP4、取栈顶元素GetTop5、判栈是否非空,3.2 栈的存储结构,顺序存储-顺序栈链式存储-链栈,template class SeqStack T dataMaxSize;/存放栈元素 int top;/栈顶指针public:SeqStack();/构造函数 void Push(T x);/入栈 T Pop();/出栈 T Top();/取栈顶元素 bool Empty();/判断栈是否为空;,链式栈的存储,链式栈无栈满问题,空间可扩充插入与删除仅在栈顶处执行链式栈的栈顶在链头,template class LinkStack Node*t
3、op;/栈顶指针public:LinkStack();/构造函数 LinkStack();/析构函数 void Push(T x);/入栈 T Pop();/出栈 T Top();/取栈顶元素 bool Empty();/判断链栈是否为空栈;,3.3 栈的操作算法,1.顺序栈的操作算法2.链式栈的操作算法,1 顺序栈的操作算法,顺序栈的初始化 template SeqStack:SeqStack()top=-1;,(2)顺序栈的入栈操作,template void SeqStack:Push(T x)if(top=MaxSize-1)cerr上溢;exit(1);top+;datatop=x;
4、,(3)顺序栈的出栈操作,template T SeqStack:Pop()if(top=-1)cerr下溢;exit(1);x=datatop;top-;return x;,(4)取栈顶元素操作,template T SeqStack:Top()if(top=-1)cerr下溢;exit(1);return datatop;,(5)判断顺序栈是否为空,template bool SeqStack:Empty()return top=-1;,2 链栈的操作算法,(6)链栈初始化 template LinkStack:LinkStack()top=NULL;,链栈入栈操作 template vo
5、id LinkStack:Push(T x)s=new Node;s-data=x;s-next=top;top=s;,(8)链栈出栈操作template T LinkStack:Pop()if(top=NULL)cerrdata;p=top;top=top-next;delete p;return x;,(9)取栈顶元素操作,template T LinkStack:Top()if(top=NULL)cerrdata;,(10)判断链栈是否为空,template bool LinkStack:Empty()return top=NULL;,(11)链栈的析构函数template LinkSt
6、ack:LinkStack()p=top;while(p)q=p;p=p-next;delete q;top=NULL;,思考:两个栈共享同一段内容空间,为了使得空间利用率最高,应如何分配栈空间?-两个堆栈共享空间,0,maxsize-1,lefttop,righttop,3.4 栈的应用举例1.栈的应用之一:递归调用例:Hanoi塔问题.void Hanoi(int n,char a,char b,char c)if(n=1)Move(a,c);else Hanoi(n-1,a,c,b);Move(a,c);Hanoi(n-1,b,a,c);一定要搞清执行过程,2.栈的应用之二:算术表达式求
7、值,表达式求值是程序设计语言编译中的一个最基本问题。它的实现需要借助栈来完成。这里介绍一种简单直观的算法,即“算符优先法”。输入包含+、*、/、圆括号和正整数组成的中缀算术表达式,以“”作为表达式结束符。计算该表达式的运算结果。,运算优先级,当前运算符,栈顶运算符,算法思想:为实现算符优先算法,使用两个工作栈。1.运算符OPTR栈,用以寄存运算符;2.操作数OPND栈,用以寄存操作数 或运算结果。,(1)首先置操作数栈OPND为空栈,表达式起始符“”为运算符的栈底元素;(2)从左到右扫描,依次读入中缀表达式中的每个字符,依次读入表达式中每个字符,若是操作数,则进OPND栈,若是运算符,则与OP
8、TR栈的栈顶运算符进行比较,作相应操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均为“”)。,若读到的是操作符(c),则应与操作符栈的栈顶元素(pre_op)进行比较,会出现以下三种情况:若pre_opc,则pre_op出栈,并在操作数栈中退栈2次,依次得到操作数b和a,然后进行a pre_op b运算,并将运算的结果压入操作数栈中。(举例),算法描述,double Expression_Eval()SeqStack OPTR;/运算符栈SeqStack OPND;/运算数栈OPTR.Push();ch=getchar();,while(ch!=|OPTR.Top()!=
9、)if(!InOPTR(ch,OP)OPND.Push(ch);ch=getchar();/读到的是操作数则入栈else/读到的是操作符 pre_op=OPTR.Top();switch(Precede(pre_op,ch)case:/情况 OPTR.Push(ch);ch=getchar();break;,case=:/情况OPTR.Pop();ch=getchar();break;case:/情况b=OPND.Pop();a=OPND.Pop();pre_op=OPTR.Pop();OPND.Push(Operate(a,pre_op,b);break;return OPND.Top();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 739第三章 栈和队列 739 第三 队列
链接地址:https://www.31ppt.com/p-5633821.html