数据结构第三章学习教案.pptx
《数据结构第三章学习教案.pptx》由会员分享,可在线阅读,更多相关《数据结构第三章学习教案.pptx(93页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构数据结构(sh j ji u)第三章第三章第一页,共93页。第三章第三章 栈和队列栈和队列(duli)(duli)3.1 3.1 栈栈3.2 3.2 栈的应用栈的应用(yngyng)(yngyng)举例举例3.3 3.3 队列队列第1页/共93页第二页,共93页。3.1栈栈一、栈的定义一、栈的定义二、抽象数据类型栈的定义二、抽象数据类型栈的定义三、栈的表示和实现三、栈的表示和实现四、栈的应用四、栈的应用(yngyng)举例举例第2页/共93页第三页,共93页。一、一、栈的定义栈的定义(dngy)1 1定义定义栈栈(Stack)(Stack)是一种特殊的线性表,其插入和删除操作均在表的一
2、端是一种特殊的线性表,其插入和删除操作均在表的一端(ydun)(ydun)进行,是一种运算受限的线性表。进行,是一种运算受限的线性表。栈顶栈顶(top)(top)允许插入和删除的一端允许插入和删除的一端(ydun)(ydun),又称表尾。,又称表尾。栈底栈底(bottom)(bottom)栈的另一端栈的另一端(ydun)(ydun),又称表头。,又称表头。若给栈若给栈S=(a1,a2ai,an)S=(a1,a2ai,an),则,则a1 a1 为栈底元素,为栈底元素,an an 为栈顶元素,如图所示。为栈顶元素,如图所示。进栈进栈(push)(push)在栈顶插入一个元素,在栈顶插入一个元素,又
3、称入栈或压入。又称入栈或压入。出栈出栈(pop)(pop)在栈顶删除一个元素,在栈顶删除一个元素,又称退栈或弹出。又称退栈或弹出。空栈空栈栈中没有元素栈中没有元素(n=0)(n=0)。3.3.1 1栈栈第3页/共93页第四页,共93页。2 2栈的特点栈的特点(tdin)(tdin)后进先出后进先出(Last In First Out(Last In First Out,简称,简称LIFO)LIFO)。又称栈为后进先出表又称栈为后进先出表(简称简称LIFOLIFO结构结构)。一、一、栈的定义栈的定义(dngy)3.13.1栈栈第4页/共93页第五页,共93页。对栈的操作除了在栈顶进行插入和删除外
4、,还有栈的初始化、判空及取栈顶元素等。对栈的操作除了在栈顶进行插入和删除外,还有栈的初始化、判空及取栈顶元素等。其抽象数据类型定义如下:其抽象数据类型定义如下:ADT Stack ADT Stack 数据对象:数据对象:D=ai|aiElemSetD=ai|aiElemSet,i=1,2ni=1,2n,n0n0 数据关系:数据关系:R=ai-1R=|ai-1ai|ai-1,aiDaiD,i=2,3,ni=2,3,n 基本操作:基本操作:InitStack(&s)InitStack(&s)操作结果操作结果(ji gu)(ji gu):构造一个空栈:构造一个空栈s s。DestroyStack(&
5、s)DestroyStack(&s)操作结果操作结果(ji gu)(ji gu):栈:栈s s被销毁。被销毁。ClearStack(&s)ClearStack(&s)操作结果操作结果(ji gu)(ji gu):将:将s s清为空栈。清为空栈。二、二、抽象数据类型栈的定义抽象数据类型栈的定义(dngy)3.13.1栈栈第5页/共93页第六页,共93页。StackEmpty(s)StackEmpty(s)操作结果操作结果(ji gu)(ji gu):若:若s s为空栈,则返回为空栈,则返回TRUETRUE,否则,否则FALSEFALSE。StackLength(s)StackLength(s)操
6、作结果操作结果(ji gu)(ji gu):返回:返回s s的元素个数,即栈的长度。的元素个数,即栈的长度。GetTop(s,&e)GetTop(s,&e)操作结果操作结果(ji gu)(ji gu):用:用e e返回返回s s的栈顶元素。的栈顶元素。Push(&s,e)Push(&s,e)操作结果操作结果(ji gu)(ji gu):插入元素:插入元素e e为新的栈顶元素。为新的栈顶元素。Pop(&s,&e)Pop(&s,&e)操作结果操作结果(ji gu)(ji gu):删除:删除s s的栈顶元素,并用的栈顶元素,并用e e返回其值。返回其值。StackTrasverse(s,visit(
7、)StackTrasverse(s,visit()操作结果操作结果(ji gu)(ji gu):从栈底到栈顶依次对:从栈底到栈顶依次对s s的每个数据元素调用的每个数据元素调用 函数函数visit()visit()。一旦。一旦visit()visit()失败,则操作失效。失败,则操作失效。ADT StackADT Stack二、二、抽象数据类型栈的定义抽象数据类型栈的定义(dngy)3.13.1栈栈第6页/共93页第七页,共93页。两种存储表示方式:顺序存储和链式存储。两种存储表示方式:顺序存储和链式存储。1.1.栈的顺序存储及其基本操作的实现栈的顺序存储及其基本操作的实现(1)(1)栈的顺序
8、存储是利用一块连续的存储单元栈的顺序存储是利用一块连续的存储单元(cn ch dn yun)(cn ch dn yun)依次存放栈中的数据元素,并附一个指针依次存放栈中的数据元素,并附一个指针toptop指示当前栈顶。指示当前栈顶。采用顺序存储方式存储的栈称为顺序栈。采用顺序存储方式存储的栈称为顺序栈。(2)C(2)C语言描述顺序栈:语言描述顺序栈:用一维数组和一个栈顶指针用一维数组和一个栈顶指针Typedef struct Typedef struct elemtype stackMaxSize;elemtype stackMaxSize;int top;int top;stacktype;
9、stacktype;43210-1空栈空栈topatopbctop三、三、栈的表示栈的表示(biosh)和实现和实现3.13.1栈栈第7页/共93页第八页,共93页。用一个栈顶指针和一个栈底指针以及一个初始的存储空间用一个栈顶指针和一个栈底指针以及一个初始的存储空间#define STACK_INIT_SIZE 100#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define STACKINCREMENT 10typedef structtypedef struct selemtype*base;selemtype*base;sele
10、mtype*top;selemtype*top;int stacksize;int stacksize;sqstack;sqstack;连续的存储空间连续的存储空间 栈顶指针指示栈顶元素当前栈顶指针指示栈顶元素当前(dngqin)(dngqin)位置位置(用栈顶指针动态地反映栈中元素的变化情况用栈顶指针动态地反映栈中元素的变化情况)basetop空栈空栈baseatoptopb三、三、栈的表示栈的表示(biosh)和实现和实现3.3.1 1栈栈第8页/共93页第九页,共93页。(3)(3)基本操作的算法基本操作的算法(sun f)(sun f)用一维数组和一个栈顶指针用一维数组和一个栈顶指针A
11、 A定义一个栈定义一个栈设栈中数据类型为整型,用设栈中数据类型为整型,用stackstack数组存放栈中数据元素,定义一个栈类型数组存放栈中数据元素,定义一个栈类型stacktypestacktype:typedef int elemtype;typedef int elemtype;#define MaxSize 100;#define MaxSize 100;Typedef struct Typedef struct elemtype stackMaxSize;elemtype stackMaxSize;int top;int top;stacktype;stacktype;三、三、栈的表
12、示栈的表示(biosh)和实现和实现3.13.1栈栈第9页/共93页第十页,共93页。B B初始化栈:初始化栈:initstack(s)initstack(s)建立建立(jinl)(jinl)一个空栈一个空栈s s,实际上是将栈顶指针指向,实际上是将栈顶指针指向-1-1。Void initstack(stacktype*s)Void initstack(stacktype*s)s-top=-1;s-top=-1;C C判断栈是否为空栈:判断栈是否为空栈:stackempty(s)stackempty(s)若栈若栈s s为空则返回为空则返回1 1,否则返回,否则返回0 0。Int stackem
13、pty(stacktype*s)Int stackempty(stacktype*s)if(s-top=-1)return(1);if(s-top=-1)return(1);else return(0);else return(0);top空栈空栈三、三、栈的表示栈的表示(biosh)和实现和实现3.13.1栈栈第10页/共93页第十一页,共93页。D D进栈:进栈:push(s,x)push(s,x)将元素将元素x x 插入到栈插入到栈s s中。若栈满则显示相应中。若栈满则显示相应(xingyng)(xingyng)信息,否则指针信息,否则指针toptop增增1 1,将,将x x送入栈顶指针
14、所在位置。送入栈顶指针所在位置。Void push(stacktype*s,elemtype x)Void push(stacktype*s,elemtype x)if(s-top=MaxSize-1)if(s-top=MaxSize-1)printf(“stack overflown”);printf(“stack overflown”);else else s-top+;s-stacks-top=x;s-top+;s-stacks-top=x;三、三、栈的表示栈的表示(biosh)和实现和实现3.13.1栈栈第11页/共93页第十二页,共93页。E E出栈:出栈:pop(s)pop(s)从
15、栈中删除栈顶元素。若栈空则显示从栈中删除栈顶元素。若栈空则显示(xinsh)(xinsh)相应信息,否则栈指针减相应信息,否则栈指针减1 1,即栈顶为下一个元素的位置。,即栈顶为下一个元素的位置。elemtype pop(stacktype*s)elemtype pop(stacktype*s)elemtype e;elemtype e;if(s-top=-1)printf(“stack underflown”);if(s-top=-1)printf(“stack underflown”);else e=s-stacks-top;s-top-;else e=s-stacks-top;s-top
16、-;return e;return e;三、三、栈的表示栈的表示(biosh)和实现和实现3.13.1栈栈第12页/共93页第十三页,共93页。toptopatopbtopcabtopc进栈进栈出栈出栈ctopebtop三、三、栈的表示栈的表示(biosh)和实现和实现3.3.1 1栈栈第13页/共93页第十四页,共93页。F F取栈顶元素:取栈顶元素:gettop(s)gettop(s)若栈为空则显示相应信息,否则返回栈顶元素,保持栈顶指针不变。若栈为空则显示相应信息,否则返回栈顶元素,保持栈顶指针不变。注意:与弹出操作注意:与弹出操作(cozu)(cozu)的区别的区别Elemtype g
17、ettop(stacktype*s)Elemtype gettop(stacktype*s)if(s-top=-1)printf(“stack emptyn”);if(s-top=-1)printf(“stack emptyn”);else return(s-stacks-top);else return(s-stacks-top);G.G.显示栈中元素:显示栈中元素:display(s)display(s)void display(stacktype*s)void display(stacktype*s)int i;int i;printf(“stack data:”)printf(“sta
18、ck data:”)for(i=s-top;i=0,i-)for(i=s-top;i=0,i-)printf(“%d”,s-stacki);printf(“%d”,s-stacki);printf(“n”);printf(“n”);三、三、栈的表示栈的表示(biosh)和实现和实现3.13.1栈栈第14页/共93页第十五页,共93页。用一个栈顶指针和一个栈底指针以及用一个栈顶指针和一个栈底指针以及(yj)(yj)一个初始的存储空间一个初始的存储空间A.A.定义一个栈定义一个栈#define STACK_INIT_SIZE 100#define STACK_INIT_SIZE 100#defin
19、e STACKINCREMENT 10#define STACKINCREMENT 10typedef structtypedef struct selemtype*base;/selemtype*base;/栈底指针栈底指针 selemtype*top;/selemtype*top;/栈顶指针栈顶指针 int stacksize;/int stacksize;/当前已分配存储空间,元素个数当前已分配存储空间,元素个数 sqstack;sqstack;三、三、栈的表示栈的表示(biosh)和实现和实现3.3.1 1栈栈第15页/共93页第十六页,共93页。B.初始化栈:初始化栈:initsta
20、ck(s)构造构造(guzo)一个空栈一个空栈s,即,即s.top=s.basevoidinitstack(sqstack*s)s-base=(selemtype*(malloc(stack_inti_size*sizeof(selemtype);if(!s-base)printf(“fail!n”);elses-top=s-base;s-stacksize=stack_init_size;三、三、栈的表示栈的表示(biosh)和实现和实现3.13.1栈栈第16页/共93页第十七页,共93页。C C判断栈是否为空栈:判断栈是否为空栈:stackempty(s)stackempty(s)若栈若栈
21、s s为空则返回为空则返回1 1,否则返回,否则返回0 0。Int stackempty(sqstack*s)Int stackempty(sqstack*s)if(s-top=s-base)return(1);if(s-top=s-base)return(1);else return(0);else return(0);D.D.取栈顶元素取栈顶元素(yun s)(yun s):gettop(s)gettop(s)若栈为空则显示相应信息,否则返回栈顶元素若栈为空则显示相应信息,否则返回栈顶元素(yun s)(yun s),保持栈顶指针不变。,保持栈顶指针不变。selemtype gettop(
22、sqstack*s)selemtype gettop(sqstack*s)if(s-top=s-base)printf(“stack emptyn”);if(s-top=s-base)printf(“stack emptyn”);else return(*(s-top-1);else return(*(s-top-1);三、三、栈的表示栈的表示(biosh)和实现和实现3.13.1栈栈第17页/共93页第十八页,共93页。E.E.进栈:进栈:push(s,x)push(s,x)将元素将元素x x 插入到栈插入到栈s s中。若栈满则追加中。若栈满则追加(zhuji)(zhuji)存储空间,否则将
23、存储空间,否则将x x送入栈顶,指针送入栈顶,指针toptop增增1 1。Void push(sqstack*s,elemtype x)Void push(sqstack*s,elemtype x)if(s-top-s-base=s-stacksize)if(s-top-s-base=s-stacksize)s-base=(selemtype*)realloc(sbase,(s.stacksize+s-base=(selemtype*)realloc(sbase,(s.stacksize+STACKINCREMENT)*sizeof(selemtype);STACKINCREMENT)*siz
24、eof(selemtype);s-top=s-base+s-stacksize;s-top=s-base+s-stacksize;s-stacksize+=STACKINCREMENT;s-stacksize+=STACKINCREMENT;*s-top+=x;*s-top+=x;/栈栈满满的的判判断断(pndun)/重新定义重新定义(dngy)栈空间栈空间/新栈顶新栈顶/进栈进栈三三、栈的表示和实现栈的表示和实现3.3.1 1栈栈第18页/共93页第十九页,共93页。F.F.出栈:出栈:pop(s)pop(s)从栈中删除栈顶元素。若栈空则显示相应信息,否则栈指针从栈中删除栈顶元素。若栈空则显
25、示相应信息,否则栈指针(zhzhn)(zhzhn)减减1 1,即栈顶为下一个元素的位置。,即栈顶为下一个元素的位置。selemtype pop(stacktype*s)selemtype pop(stacktype*s)selemtype e;selemtype e;if(s-top=s-base)if(s-top=s-base)printf(“stack underflown”);printf(“stack underflown”);else else s-top-;s-top-;e=*s-top;e=*s-top;return e;return e;三、三、栈的表示栈的表示(biosh)和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第三 学习 教案
限制150内