数据结构三章栈和队列.ppt
《数据结构三章栈和队列.ppt》由会员分享,可在线阅读,更多相关《数据结构三章栈和队列.ppt(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、中国科大数据结构数据结构三章栈和队列 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望本章内容3.1 栈3.2 栈的应用举例3.3 队列3-中国科大数据结构3.1 栈3.1.1 3.1.1 栈的定义栈的定义p栈(栈(stackstack):是限定仅在表尾进行插入和删除操作的线性表。又:是限定仅在表尾进行插入和删除操作的线性表。又称为称为后进先出后进先出(last in first outlast in first out)的线性表(简称)的线性表(简称LIFOLIF
2、O结构)。结构)。p栈顶(栈顶(toptop):栈表尾端。):栈表尾端。p栈底(栈底(bottombottom):栈表头端。):栈表头端。例:假设栈例:假设栈 S=(a S=(a1 1,a,a2 2,a,an n),则,则 a a1 1 称称为栈底元素,为栈底元素,a an n 为栈顶元素。栈中元素按为栈顶元素。栈中元素按a a1 1,a,a2 2,a,an n 的次序进栈,退栈的第一个元的次序进栈,退栈的第一个元素应为栈顶元素。如右图所示。素应为栈顶元素。如右图所示。出出栈 进栈 栈顶 an .a2 栈底底 a1 栈的示意的示意图3-中国科大数据结构3.1 栈3.1.2 3.1.2 栈的顺序
3、存储结构栈的顺序存储结构p定义:顺序栈(即栈的顺序存储结构):是利用一组地址连续的存定义:顺序栈(即栈的顺序存储结构):是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针储单元依次存放自栈底到栈顶的数据元素,同时附设指针toptop指示指示栈顶元素在顺序栈中的位置。栈顶元素在顺序栈中的位置。pC C语言描述语言描述typedef struct stack_tag typedef struct stack_tag elemtype*elem;elemtype*elem;/指向存放数据元素的内存块指向存放数据元素的内存块 int top;int top;/栈顶标识,栈顶标识,
4、elemtopelemtop是栈顶元素是栈顶元素 int size;int size;/栈的容量栈的容量 SQSTACK;SQSTACK;p图形表示图形表示topbottomtopbottomtopbottomAABCDE栈的顺序存储结构示意图栈的顺序存储结构示意图 3-中国科大数据结构3.1 栈1.初始化栈初始化栈intint InitSqstack(SQSTACK*S,int n)InitSqstack(SQSTACK*S,int n)/初始化顺序栈,栈的容量是初始化顺序栈,栈的容量是n n。成功则返回。成功则返回1 1,否则返回,否则返回0 0 S-elem=(elemtype*)mal
5、loc(n*sizeof(elemtype);S-elem=(elemtype*)malloc(n*sizeof(elemtype);/为数据元素分配内存为数据元素分配内存 if(S-elem=NULL)return 0;if(S-elem=NULL)return 0;/初始化失败初始化失败 S-size=n;S-size=n;/设置栈的容量设置栈的容量 S-top=-1;S-top=-1;/设置栈为空栈设置栈为空栈 return 1;return 1;2.2.销毁栈销毁栈void void DestroySqstack(SQSTACK*S)DestroySqstack(SQSTACK*S)/
6、释放栈所占有的内存释放栈所占有的内存 free(S-elem);free(S-elem);/释放内存,并设置为释放内存,并设置为NULLNULL S-elem=NULL;S-elem=NULL;S-top=-1;S-top=-1;/将其他成员设置成安全值将其他成员设置成安全值 S-size=0;S-size=0;3-中国科大数据结构3.1 栈3.入栈入栈int Push(SQSTACK*S,elemtype e)/在栈顶一端插入数据元素在栈顶一端插入数据元素e,操作成功,则返回,操作成功,则返回1,否则返回,否则返回0 if(IsSqstackFull(*S)return 0;/栈满,操作失败
7、栈满,操作失败 S-top+;/top增增1 S-elemS-top=e;/将将e赋值成新的栈顶赋值成新的栈顶 return 1;4.出栈出栈int Pop(SQSTACK*S,elemtype*e)/获取栈顶数据元素,并删除栈顶。操作成功,则返回获取栈顶数据元素,并删除栈顶。操作成功,则返回1,否则返回,否则返回0 if(IsSqstackEmpty(*S)return 0;/如果栈空,操作失败如果栈空,操作失败 *e=S-elemS-top;/获取栈顶元素获取栈顶元素 S-top-;/删除栈顶删除栈顶 return 1;3-中国科大数据结构3.1 栈5.判断栈空、栈满判断栈空、栈满int
8、IsSqstackEmpty(SQSTACK S)/如果栈空,则返回如果栈空,则返回1,否则返回,否则返回0 return S.top=-1;/top是栈顶标识,是是栈顶标识,是-1时表示空栈时表示空栈int IsSqstackFull(SQSTACK S)/如果栈满,则返回如果栈满,则返回1,否则返回,否则返回0 return S.top=S.size-1;/top作为作为elem的下标,其最大值是的下标,其最大值是size-1 3-中国科大数据结构3.1 栈3.1.3 栈的链式存储结构栈的链式存储结构 data next S 栈顶栈顶 栈底栈底 链栈示意图链栈示意图 3-中国科大数据结构3
9、.2 栈的应用举例3.2.1 数制转换数制转换十进制数十进制数N和其他和其他d进制数的转换是计算机实现计算的基本问进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个是辗转相除法:题,其解决方法很多,其中一个是辗转相除法:N=(N div d)d+N mod d(其中:(其中:div为整除运算,为整除运算,mod为求余运算)为求余运算)由于计算过程是从低位到高位顺序产生八进制数的各个数由于计算过程是从低位到高位顺序产生八进制数的各个数位,而输出应从高位到低位进行,恰好和计算过程相反。因此,若位,而输出应从高位到低位进行,恰好和计算过程相反。因此,若计算过程中得到八进制数的各位顺序进
10、栈,则按出栈序列打印输出计算过程中得到八进制数的各位顺序进栈,则按出栈序列打印输出的即为与输入对应的八进制数。的即为与输入对应的八进制数。例如:例如:(1348)10(2504)8,其运算过程如下:,其运算过程如下:NN div 8 N mod 8 1348 /168 余余 4 168 /21 余余 0 21 /2 余余 5 2 /0 余余 23-中国科大数据结构3.2 栈的应用举例p算法算法3.1如下:如下:void conversion()/输入一个非负十进制整数,转换成八进制数。输入一个非负十进制整数,转换成八进制数。InitStack(S);/构造空栈构造空栈scanf(“%d”,N)
11、;while(N)Push(S,N%8);N=N/8;while(!StackEmpty(s)Pop(S,e);printf(“%d”,e);/conversion3-中国科大数据结构3.2 栈的应用举例3.2.2 迷宫路径求解迷宫路径求解【任【任务描述】描述】给定某个迷定某个迷宫的布局及其入口和出口的坐的布局及其入口和出口的坐标(如(如图3_9所示,注所示,注意横坐意横坐标是从左向右的,但是是从左向右的,但是纵坐坐标是从上向下的),迷是从上向下的),迷宫中空白的地方中空白的地方可以走,阴影的部分表示可以走,阴影的部分表示墙壁,走不通。壁,走不通。设计算法找出从入口到出口的所算法找出从入口到出
12、口的所有路径。需要解决有路径。需要解决2个个问题:迷宫在计算机中如何表示。迷宫在计算机中如何表示。int maze 12=1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1 ;如何探索从入口到达出口的所有路径。如何探索从入口到达出口的所有路径。深度优先探索深度优先探索+回溯:从当前位置出发,向四个方向探索,如果发现
13、某方回溯:从当前位置出发,向四个方向探索,如果发现某方向的相邻位置可走,则走过去,将那个位置当作当前位置继续探索。这时向的相邻位置可走,则走过去,将那个位置当作当前位置继续探索。这时需要将原当前位置保存在栈中。如果四个方向都走不通,则退回到出发点需要将原当前位置保存在栈中。如果四个方向都走不通,则退回到出发点(栈顶中的位置)。走过的地方要打上(栈顶中的位置)。走过的地方要打上“已走标记已走标记”,回退时要将,回退时要将“已走已走”标记清除。标记清除。3-中国科大数据结构3.2 栈的应用举例typedef struct int x,y;/位置坐标位置坐标 int v;/探索方向探索方向 elem
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 三章栈 队列
限制150内