数据结构C语言栈和队列学习教案.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构C语言栈和队列学习教案.pptx》由会员分享,可在线阅读,更多相关《数据结构C语言栈和队列学习教案.pptx(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、会计学1数据结构数据结构(sh j ji u)C语言语言 栈和队列栈和队列第一页,共48页。第三章第三章 栈和队列栈和队列(duli)栈和队列栈和队列(duli)是两种重要的线性结构是两种重要的线性结构栈和队列栈和队列(duli)是操作受限的线性表是操作受限的线性表出出进进排队排队买票买票汉诺汉诺塔塔进进出出第1页/共48页第二页,共48页。第三章第三章 栈和队列栈和队列(duli)n n1.栈的概述n n2.栈的应用(yngyng)n n3.栈和递归的实现n n4.队列n n5.队列的应用(yngyng)第2页/共48页第三页,共48页。栈的概述栈的概述(i sh)1.栈的定义栈的定义栈是限
2、定仅在表尾进行插入栈是限定仅在表尾进行插入(ch r)或删除操作的线性或删除操作的线性表。表。通常,表头端称为栈底,表尾端称为栈顶。通常,表头端称为栈底,表尾端称为栈顶。出栈出栈进栈进栈a1为栈底元素为栈底元素an为栈顶元素为栈顶元素按按a1、a2、an顺序进栈顺序进栈按按an、a2、a1顺序出栈顺序出栈栈称为栈称为后进先出后进先出线性表线性表(LIFO)a1a2an.表头表头表尾表尾栈底栈底栈顶栈顶第3页/共48页第四页,共48页。1.栈的定义栈的定义主要主要(zhyo)基本操作基本操作包括包括:InitStack(&S)初始化初始化StackEmpty(S)判空判空GetTop(S,&e)
3、取栈顶取栈顶Push(&S,x)入栈入栈Pop(&S,&e)出栈出栈栈的概述栈的概述(i sh)第4页/共48页第五页,共48页。2.栈的表示栈的表示(biosh)和实现和实现 顺序栈顺序栈;链式栈;链式栈。1)顺序栈顺序栈ABCbasetop栈底指针栈底指针base栈顶指针栈顶指针top栈容量栈容量顺序顺序(shnx)栈类型数据结构的表示:栈类型数据结构的表示:typedef struct dataType *base;dataType *top;int stacksize;SqStack;栈的概述栈的概述栈的概述栈的概述(i sh)i sh)第5页/共48页第六页,共48页。空栈空栈ABC
4、basetop栈中有三个元素栈中有三个元素(yun s)ABCbasetopDE满栈满栈top=base第6页/共48页第七页,共48页。n n用数组来描述(mio sh)栈的结构:n ntypedef structn nn n datatype datamaxsize;n n int top;n n int base;n n seqstack;n nseqstack *s;第7页/共48页第八页,共48页。例例1 栈的初始化栈的初始化top=baseInitStack(seqstack&s)stop0;sbase0;第8页/共48页第九页,共48页。例例2 判断判断(pndun)栈空栈空to
5、p=baseInt StackEmpty(seqstack s)if(stopsbase)return true;else return false;第9页/共48页第十页,共48页。例例3 在栈中插入在栈中插入(ch r)元素元素 Atop=baseAbasetop=top+1datatype Push(seqstack*s,datatype x)if(s-top=maxsize)printf(“overflow”);return NULL;else s-datas-top=x;s-top+;return true;第10页/共48页第十一页,共48页。例例4 删除删除(shnch)栈顶元素
6、栈顶元素 AbaseAtoptop=top-1 datatype Pop(seqstack&s,datatype x)if(StackEmpty(s)printf(“underflow”);return NULL;else s-top-;x=s-datas-top;return(x);第11页/共48页第十二页,共48页。栈的概述栈的概述栈的概述栈的概述(i sh)i sh)n n当需要使用多个栈时,在数组空间允许的情况下,可以使多个栈共享同一个数组空间。其结构定义形式(xngsh)如下:n n typedef datatype int;n n#define maxsize 64n n typ
7、edef structn n n n datatype datamaxsize;n n int top1,top2;dstack;第12页/共48页第十三页,共48页。2.栈的表示栈的表示(biosh)和实现和实现2)链式栈)链式栈typedef struct node datatype data;struct node *next;*Linkstack;anan-10a1栈底栈底base栈顶栈顶top空栈空栈:top=base=NULL;栈的概述栈的概述栈的概述栈的概述(i sh)i sh)第13页/共48页第十四页,共48页。栈的概述栈的概述栈的概述栈的概述(i sh)i sh)n n2.
8、2.栈的表示栈的表示栈的表示栈的表示(bi(bi osh)osh)和实现和实现和实现和实现n n2 2)链式栈)链式栈)链式栈)链式栈n n 进栈:进栈:进栈:进栈:n nlinkstack*PushLinkStack(linkstack*top,datatype linkstack*PushLinkStack(linkstack*top,datatype w)w)n n linkstack*p;linkstack*p;n n p=(linkstack*)malloc(sizeof(linkstack);p=(linkstack*)malloc(sizeof(linkstack);n n p-
9、data=w;p-data=w;n n p-next=top;p-next=top;n n top=p;top=p;n n return p;return p;第14页/共48页第十五页,共48页。栈的概述栈的概述栈的概述栈的概述(i sh)i sh)n n2.2.栈的表示栈的表示栈的表示栈的表示(bi(bi osh)osh)和实现和实现和实现和实现n n2 2)链式栈)链式栈)链式栈)链式栈n n 出栈:出栈:出栈:出栈:n ndataType PopLinkStack(linkstack*top,datatype x)dataType PopLinkStack(linkstack*top,
10、datatype x)n n linkstack*p;linkstack*p;n n if(top=NULL)if(top=NULL)n n printf(“printf(“空栈!空栈!空栈!空栈!”);return NULL;”);return NULL;n n else elsen n x=top-data;x=top-data;n n p=top;p=top;n n top=top-next;top=top-next;n n free(p);free(p);n n return x;return x;第15页/共48页第十六页,共48页。栈的概述栈的概述栈的概述栈的概述(i sh)i s
11、h)n n2.2.栈的表示和实现栈的表示和实现栈的表示和实现栈的表示和实现(shxin)(shxin)n n2 2)链式栈)链式栈)链式栈)链式栈n n 置空栈:置空栈:置空栈:置空栈:n n void InitStack(linkstack*S)void InitStack(linkstack*S)n n S=NULL;S=NULL;n n 判空栈:判空栈:判空栈:判空栈:n nInt StackEmpty(linkstack*S)Int StackEmpty(linkstack*S)n n if(S=NULL)return 1;if(S=NULL)return 1;n n else ret
12、urn 0;else return 0;n n取栈顶元素:取栈顶元素:取栈顶元素:取栈顶元素:n ndatatype StackTop(linkstack*S)datatype StackTop(linkstack*S)n n if(StackEmpty(S)Error(“if(StackEmpty(S)Error(“空栈!空栈!空栈!空栈!”);retrun”);retrun NULL;NULL;n n return S-data;return S-data;返回返回(fnhu)第16页/共48页第十七页,共48页。栈的应用栈的应用(yngyng)n n常见的栈应用常见的栈应用常见的栈应用常
13、见的栈应用(yngyng)(yngyng)问题:问题:问题:问题:n n数制转换数制转换数制转换数制转换n n括号匹配的检验括号匹配的检验括号匹配的检验括号匹配的检验n n行编辑行编辑行编辑行编辑n n迷宫问题迷宫问题迷宫问题迷宫问题n n算术表达式求值算术表达式求值算术表达式求值算术表达式求值n n返回返回返回返回第17页/共48页第十八页,共48页。栈和递归的实现栈和递归的实现栈和递归的实现栈和递归的实现(shxin)(shxin)n n一、递归的定义一、递归的定义一、递归的定义一、递归的定义n n递归:一个事件或对象递归:一个事件或对象递归:一个事件或对象递归:一个事件或对象(duxin
14、g)(duxing)的部分由自己的部分由自己的部分由自己的部分由自己组成,或者按它自己来定义。组成,或者按它自己来定义。组成,或者按它自己来定义。组成,或者按它自己来定义。n n递归算法的组成:递归算法的组成:递归算法的组成:递归算法的组成:n n递推:将问题推到比原来问题简单的问题上递推:将问题推到比原来问题简单的问题上递推:将问题推到比原来问题简单的问题上递推:将问题推到比原来问题简单的问题上求解;求解;求解;求解;n n回归:当简单问题得解后再回归到原来的问回归:当简单问题得解后再回归到原来的问回归:当简单问题得解后再回归到原来的问回归:当简单问题得解后再回归到原来的问题上。题上。题上。
15、题上。n n常见递归算法:常见递归算法:常见递归算法:常见递归算法:n n直接递归:函数直接调用本身。直接递归:函数直接调用本身。直接递归:函数直接调用本身。直接递归:函数直接调用本身。n n间接递归:函数在调用其它函数的过程中又间接递归:函数在调用其它函数的过程中又间接递归:函数在调用其它函数的过程中又间接递归:函数在调用其它函数的过程中又调用其本身。调用其本身。调用其本身。调用其本身。第18页/共48页第十九页,共48页。栈和递归的实现栈和递归的实现栈和递归的实现栈和递归的实现(shxin)(shxin)n n二、常见的递归问题二、常见的递归问题二、常见的递归问题二、常见的递归问题n n1
16、.1.汉诺塔问题汉诺塔问题汉诺塔问题汉诺塔问题n n 要求:将大小不同的要求:将大小不同的要求:将大小不同的要求:将大小不同的n n个盘子移动到另外一个盘子移动到另外一个盘子移动到另外一个盘子移动到另外一根轴上,移动过程中必须保证根轴上,移动过程中必须保证根轴上,移动过程中必须保证根轴上,移动过程中必须保证(b(b ozhng)ozhng)小小小小的盘子在大的盘子的上方。的盘子在大的盘子的上方。的盘子在大的盘子的上方。的盘子在大的盘子的上方。n n算法思想:算法思想:算法思想:算法思想:n n将放在下面的将放在下面的将放在下面的将放在下面的n-1n-1个盘子从当前轴移动到个盘子从当前轴移动到个
17、盘子从当前轴移动到个盘子从当前轴移动到目的轴上;(即递归过程)目的轴上;(即递归过程)目的轴上;(即递归过程)目的轴上;(即递归过程)n n将最小的将最小的将最小的将最小的1 1个盘子移动到目的轴上。个盘子移动到目的轴上。个盘子移动到目的轴上。个盘子移动到目的轴上。n n p 5558 p 5558第19页/共48页第二十页,共48页。栈和递归的实现栈和递归的实现栈和递归的实现栈和递归的实现(shxin)(shxin)n n二、常见的递归问题二、常见的递归问题二、常见的递归问题二、常见的递归问题n n2.2.八皇后问题八皇后问题八皇后问题八皇后问题n n要求:在要求:在要求:在要求:在8888
18、的棋盘上放置八颗棋子,任意两颗不能在同一行的棋盘上放置八颗棋子,任意两颗不能在同一行的棋盘上放置八颗棋子,任意两颗不能在同一行的棋盘上放置八颗棋子,任意两颗不能在同一行或同一列或同一对角线上。或同一列或同一对角线上。或同一列或同一对角线上。或同一列或同一对角线上。n n算法思想:算法思想:算法思想:算法思想:n n先在棋盘中确定一个棋子的位置;先在棋盘中确定一个棋子的位置;先在棋盘中确定一个棋子的位置;先在棋盘中确定一个棋子的位置;n n在剩下可以下子在剩下可以下子在剩下可以下子在剩下可以下子(xi z(xi z)的位置里面再确定一个棋子的位的位置里面再确定一个棋子的位的位置里面再确定一个棋子
19、的位的位置里面再确定一个棋子的位置,要求位置满足上述规则;置,要求位置满足上述规则;置,要求位置满足上述规则;置,要求位置满足上述规则;n n如果此时棋子还没有放完,则继续上述第二步直到所有棋如果此时棋子还没有放完,则继续上述第二步直到所有棋如果此时棋子还没有放完,则继续上述第二步直到所有棋如果此时棋子还没有放完,则继续上述第二步直到所有棋子放完位置;子放完位置;子放完位置;子放完位置;n n如果棋子顺利放完,则该算法成功;反之,如果棋子顺利放完,则该算法成功;反之,如果棋子顺利放完,则该算法成功;反之,如果棋子顺利放完,则该算法成功;反之,n n 则要回溯,改变上一颗棋子的位置,直到所有则要
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言 队列 学习 教案
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内