一教学内容栈和队列的定义及特点栈的顺序存储.ppt
《一教学内容栈和队列的定义及特点栈的顺序存储.ppt》由会员分享,可在线阅读,更多相关《一教学内容栈和队列的定义及特点栈的顺序存储.ppt(59页珍藏版)》请在三一办公上搜索。
1、一、教学内容:1、栈和队列的定义及特点;2、栈的顺序存储表示和链接存储表示;3、队列的顺序存储表示;队列的链接存储表示;4、栈和队列的应用举例。,第3章 栈和队列,二、教学要求:了解递归的概念和递归过程的实现;掌握栈和队列的定义、表示、实现和应用;掌握栈的顺序存储结构和链式存储结构以及相应操作的实现;掌握队列的顺序存储结构(循环队列)和链式存储结构的实现;熟练掌握链式栈和顺序队列的操作算法。,目录,3.1 栈 3.1.1 栈的定义 3.1.2 顺序栈的表示与实现 3.1.3 链式栈的表示与实现 3.2 栈的应用举例 3.2.1 数制转换 3.2.4 迷宫求解 3.2.5 表达式求值*3.3 栈
2、和递归的实现 3.4 队列 3.4.1抽象数据类型队列的定义 3.4.2 链队列-队列的链式表示与实现 3.4.3 循环队列-队列的顺序表示与实现本章小结,3.1 栈(stack)3.1.1 栈的定义:限定仅在表尾进行插入或删除操作的线性表.栈顶(top):线性表的表尾端,即可操作端。栈底(base):线性表的表头。特点:先进后出(FILO)或后进先出(LIFO),3.1.2 栈的顺序存储结构顺序栈实现:一维数组sM,base=0,栈空,栈顶指针top,指向实际栈顶后的空位置,初值为0,进栈,A,出栈,栈满,B,C,D,E,F,设数组维数为Mtop=0,栈空,此时出栈,则下溢(underflo
3、w)top=M,栈满,此时入栈,则上溢(overflow),栈空,top=0,base=0,base=0,栈的抽象数据类型定义,ADT Stack 数据对象:D=ai|ai属于ElemSet,(i=1,2,n,n0)数据关系:R1=ai-1,ai|ai-1,ai属于D,(i=2,3,n)约定an为栈顶,a1为栈底。基本操作:InitStack(/出栈 StackTraverse(S,visit()ADT Stack,栈的顺序存储结构(顺序栈)表示:,#define STACK_INIT_SIZE 100;#define STACKINCREMENT 10;typedef char SElemT
4、ype;typedef struct/顺序栈定义 SElemType*base;/栈底指针 SElemType*top;/栈顶指针int stacksize;/当前已分配的全部存储空间 SqStack;,顺序栈的基本运算:,顺序栈的基本操作,初始化压栈出栈清空栈判栈是否为空判栈是否为满取栈顶元素多个栈的共享空间,分析:初始化就是建立一个空栈,栈中不含任何元素,此时栈顶指针top为0,表示栈空。,示意图,void InitStack(SqStack,实现算法,算法:InitStack(S)初始化:,分析:进栈需要判断是否会出现“溢出”,若栈不满,则元素进栈时,栈顶指针做加一操作,元素进栈。实现算
5、法:void Push(SqStack,算法:Push(&S,e)压栈,元素入栈示意图,分析:如果顺序栈不为空,此时执行出栈操作,栈顶指针做减一操作,指向原栈顶的后继元素。如果对空栈执行出栈操作,应提示错误信息并终止程序运行。实现算法:Status Pop(SqStack,算法:Pop(&S,&e)出栈,栈空,下溢,分析:清空栈,就是把一个栈置成空栈。即不论数组中是否存有数据,只要将栈顶指针top指向栈底处,就表示栈空。实现算法:void ClearStack(SqStack,算法:ClearStack(&S)清空栈,分析:通过判断栈顶指针来判断栈是否为空。栈顶指针top与栈底指针base指向
6、相同,表示栈为空,返回TRUE;否则返回FALSE。实现算法:Status StackEmpty(SqStack S)/若栈S为空栈,则返回TRUE,否则返回FALSE if(S.top=S.base)return TRUE;else return FALSE;,算法:StackEmpty(&s)判栈是否为空,分析:通过判断栈顶指针与栈底指针之间的元素个数是否达到了最大容量判断栈是否为满。栈为满,返回TRUE;否则返回FALSE。实现算法:Status StackFull(SqStack S)if(S.top-S.base=S.StackSize)return TRUE;/判栈满else re
7、turn FALSE;,算法:StackFull(s)判栈是否为满,分析:栈顶指针直接指向栈顶元素。需要注意空栈的情况。实现算法:Status GetTop(SqStack S,SElemType,算法:GetTop(s,&e)取栈顶元素,结论:顺序栈的入栈和出栈操作,实际上对应的是顺序表的表尾插入和表尾删除操作。所以入栈和出栈操作的时间复杂度都为O(1)。,顺序栈的操作演示,实例:栈使用的完整C程序实例,Q1:对于一个栈,给出输入项A、B、C,如果输入项序列由ABC组成,试给出所有可能的输出序列,能否产生CAB输出序列。,Q2:如果一个栈的输入序列为123456,能否得到435612和135
8、426的出栈序列?,栈的共享存储单元(可选)问题:有时,在一个程序设计中,需要使用多个同一类型的栈,这时候,可能会产生一个栈空间过小,容量发生溢出,而另一个栈空间过大,造成大量存储单元浪费的现象。解决方法:为了充分利用各个栈的存储空间,这时可以采用多个栈共享存储单元,即给多个栈分配一个足够大的存储空间,让多个栈实现存储空间优势互补。,两个共享存储单元顺序栈的操作演示,实例:在程序中定义两个栈,(1)定义共享栈数据结构#define MAX 100int stackMAX;int top1=base1=0,top2=base2=MAX-1;,栈1的操作:入栈top1执行加1的操作;出栈top1执
9、行减1的操作;栈2的操作:入栈top2执行减1的操作;出栈top2执行加1的操作;栈满条件:top1top2,(2)共享进栈算法 void push1(int x)if(top1top2)printf(“overflow”);else stacktop1=x;top1+;void push2(int x)if(top1top2)printf(“overflow”);else stacktop2=x;top2-;,(3)共享出栈算法 int pop1()if top1=0)printf(“underflow”);return(NULL);top1-;return(stacktop1);int p
10、op2()if(top2=MAX-1)printf(“underflow”);return(NULL):top2+;return(stacktop2);,3.1.3 链栈(可选),定义:栈的链式存储通常用单链表实现,此时链表的头指针为栈顶指针,定义为top,链表第一个结点为栈顶结点。当头指针为NULL时,表示当前栈为空栈。,链栈示意图:,特点:链式栈无栈满问题,空间可扩充 插入与删除仅在栈顶处执行 链式栈的栈顶在链头 适合于多栈操作,栈的链接存储结构定义:,typedef struct node ElemType data;struct node*next;LNode,*LinkStack;,
11、分析:链式存储时,空栈即为空单链表,其栈顶指针值为NULL。实现算法:void InitStack(LinkStack 注意:空单链表是带表头结点的空单链表。,算法:InitStack(S)初始化,分析:链栈的入栈操作就是单链表的表头插入。实现算法:LinkStack*PushLStack(LinkStack*top,ElemType x)LinkStack*p;p(LinkStack*)malloc(sizeof(LinkStack);p-datax;p-nexttop;return p;,算法:PushLStack(S)链栈的进栈算法,分析:如果是空栈,提示出错信息并退出;否则,栈顶元素出
12、栈,即删除单链表的第一个结点。实现算法:linkstack*PopLStack(LinkStack*top,ElemType*datap)LinkStack*p;if(top=NULL)printf(“under flown”);return NULL;else*dataptop-data;ptop;toptop-next;free(p);return top;,算法:PopLStack(S)链栈的出栈算法,分析:如果是空栈,提示出错信息并退出;否则,返回单链表的第一个结点的值。实现算法:(略),算法:GetTop(S)取栈顶的元素,算法:StackEmpty(S)判栈是否为空,分析:通过判断
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学内容 队列 定义 特点 顺序 存储
链接地址:https://www.31ppt.com/p-5608575.html