数据结构之栈和队列.ppt
《数据结构之栈和队列.ppt》由会员分享,可在线阅读,更多相关《数据结构之栈和队列.ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章第三章 栈和队列栈和队列栈和队列是两种特殊的线性表,是栈和队列是两种特殊的线性表,是操作受限操作受限的线性表,的线性表,称限定性称限定性DS3.1 栈(栈(stack)栈的定义和特点栈的定义和特点v定义:限定仅在定义:限定仅在表尾表尾进行插入或删除操作的线性表,表进行插入或删除操作的线性表,表尾尾栈顶栈顶,表头,表头栈底栈底,不含元素的空表称空栈,不含元素的空表称空栈v特点:先进后出(特点:先进后出(FILO)或后进先出(或后进先出(LIFO)ana1a2.栈底栈底栈顶栈顶.出栈出栈进栈进栈栈栈s=(a1,a2,an)#define STACK_INIT_SIZE 100;#define
2、 STACKINCREAMENT 10;typedef struct SELemType*base;SElemType *top;int stacksize;SqStack;栈的存储结构栈的存储结构v顺序栈顺序栈l实现:动态实现:动态栈顶指针栈顶指针top,指向实际栈顶指向实际栈顶后的空位置,初值为后的空位置,初值为top=basetop进栈进栈Atop出栈出栈栈满栈满BCDEFtop=base,栈空,栈空,此时出栈,则此时出栈,则下溢下溢(underflow)top-base=stacksize,栈满,此时入栈,栈满,此时入栈,需重新分配需重新分配空间,如空间分配失败空间,如空间分配失败则则
3、上溢上溢(overflow)toptoptoptoptoptoptoptoptoptoptop栈空栈空base=0123450栈空栈空top=0123450base123450ABCDEFbase算法算法v构造空栈构造空栈s sv返回栈顶元素返回栈顶元素 if(S.top=S.base)return ERROR;e=*(S.top-1);v进栈进栈 if(S.top S.base=S.StackSize)S.base=(ElemType*)realloc(S.base,S.stacksize+STACKINCREAMENT)*sizeof(ElemType);if(!S.base)exit(O
4、VERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREAMENT;*S.top+=e;v出栈出栈if(S.top=S.base)retuen ERROR;e=*-S.top;l入栈算法入栈算法l出栈算法出栈算法v链栈链栈栈顶栈顶栈顶栈顶 .topdata link栈底栈底l结点定义结点定义l入栈算法入栈算法l出栈算法出栈算法typedef struct node int data;struct node *next;JD;.栈底栈底toptopxptop .栈底栈底topqv数制转换:数制转换:(159)10=(237)8159819
5、82802 3 7 余余 7余余 3余余 2toptop7top73top732栈的应用栈的应用例例 把十进制数把十进制数159转换成八进制数转换成八进制数v括号匹配的检验括号匹配的检验 检检验验括括号号是是否否匹匹配配的的方方法法可可用用 期期待待的的急急迫迫程程度度 这这个个概概念念来描述。来描述。toptoptop(top(top(toptop例如考虑下列括号序列:例如考虑下列括号序列:(())1 2 3 4 5 6 1 2 3 4 5 6v回文游戏:顺读与逆读字符串一样(不含空格)回文游戏:顺读与逆读字符串一样(不含空格)dadtop1.读入字符串读入字符串2.去掉空格(原串)去掉空格
6、(原串)3.压入栈压入栈4.原串字符与出栈字符依次比较原串字符与出栈字符依次比较 若不等,非回文若不等,非回文 若直到栈空都相等,回文若直到栈空都相等,回文字符串:字符串:“madam im adam”v行编辑程序行编辑程序一一个个简简单单的的行行编编辑辑程程序序的的功功能能是是:接接受受用用户户从从终终端端输输入入的的程程序序或或数数据据,并并存入用户的数据区。存入用户的数据区。例例如如,可可用用一一个个退退格格符符“#”表表示示前前一一个个字字符符无无效效;可可用用一一个个退退行行符符“”,表示当前行中的字符均无效。,表示当前行中的字符均无效。例如,假设从终端接受了这样两行字符:例如,假设
7、从终端接受了这样两行字符:whli#ilr#e(s#*s)outchaputchar(*s=#+);则实际有效的是下列两行:则实际有效的是下列两行:while(*s)putchar(*s+);v迷宫问题迷宫问题(a)(a)迷宫的图形表示迷宫的图形表示(b)(b)迷宫的二维数组表示迷宫的二维数组表示 求解迷宫中一条路径的方法求解迷宫中一条路径的方法:从入口出发,沿某一方向进行探索,若能走通,从入口出发,沿某一方向进行探索,若能走通,则继续向前走;否则沿原路返回,换一方向再进行则继续向前走;否则沿原路返回,换一方向再进行探索,直到所有可能的通路都探索到为止。这类方探索,直到所有可能的通路都探索到为
8、止。这类方法统称法统称回溯法回溯法。用一个栈记录走过的位置,栈中每个元素包括用一个栈记录走过的位置,栈中每个元素包括三项,分别记录当前位置的行坐标、列坐标以及在该三项,分别记录当前位置的行坐标、列坐标以及在该位置上所选的方向(即位置上所选的方向(即directondirecton数组的下标值)数组的下标值)v表达式求值表达式求值 优先关系表优先关系表 3*(7+3*6/2-5)*(+/=3*(7+18/2-5)*(+-=3*(7+9-5)*(-=3*(16-5)*()=3*11输入:输入:3*(7+3*6/2-5#)运算对象栈运算对象栈运算符栈运算符栈3*(7+3*618/2916-51133
9、v表达式求值表达式求值l后缀表达式:后缀表达式:31 5 22-*70+l中缀表达式:中缀表达式:31*(5-22)+70l中缀表达式到后缀表达式的转换中缀表达式到后缀表达式的转换基本思想:顺序扫描中缀表达式,当读入一个运算分量基本思想:顺序扫描中缀表达式,当读入一个运算分量时就立即输出,而在读入一个运算符时,则判断其与栈顶时就立即输出,而在读入一个运算符时,则判断其与栈顶运算符的优先级,是右括号或优先级低于栈顶(乘除优于运算符的优先级,是右括号或优先级低于栈顶(乘除优于加法)则栈顶首先把它压入一个运算符栈中,一直等到它加法)则栈顶首先把它压入一个运算符栈中,一直等到它的两个运算分量都读到后,
10、才能把它输出,当扫描遇到一的两个运算分量都读到后,才能把它输出,当扫描遇到一个左括号时立即把它推入栈中,继续扫描直到右括号出现,个左括号时立即把它推入栈中,继续扫描直到右括号出现,括号内的表达式也按如上规则进行压栈和输出。括号内的表达式也按如上规则进行压栈和输出。注意:注意:括号不必输出括号不必输出。l后缀表达式求值:后缀表达式求值:使用一个存放运算分量的栈,求值过程顺序扫描后缀表达使用一个存放运算分量的栈,求值过程顺序扫描后缀表达式,每次遇到运算分量就把它推如栈中式,每次遇到运算分量就把它推如栈中,遇到运算符,就从,遇到运算符,就从栈中弹出两个运算分量进行运算,再打运算结果推入栈中。栈中弹出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 队列
限制150内