- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 栈和队列
申燕萍
2014年 2月 7日
本章要点
栈的定义和结构特点
栈的顺序存储表示和基本操作的实现。
栈的链式存储表示和基本操作的实现。
队列的定义和结构特点
队列的顺序存储表示和基本操作的实现。
队列的链式存储表示和基本操作的实现。
栈和队列的简单应用。
4.1 “回文识别”案例导入
“回文识别”引例:回文是指顺着读或者倒过来读均相同的字符序列,如“123321”、“abcba”和“abba”均是回文,但“hello”不是回文。迄今为止,最为经典的中文回文当属“上海自来水来自海上”,英文中比较知名的回文句子“Dot saw I was Tod”,翻译成中文是“Dot把我看成是Tod了”。
思考:要判断一个字符串是否为回文,实质上就是要判断一个字符串逆序以后是否还与原来的字符串一模一样,那么如何实现字符串逆序呢?利用栈来实现是行之有效的方法之一。
4.2 栈
4.2.1 栈的定义
栈(stack)是限定在表的一端进行插入或删除操作的线性表。插入元素的操作称为入栈,删除元素的操作称为出栈。在任何时候,都只有栈顶元素才能出栈。换句话说,栈的修改是按先进后出、后进先出的原则进行的,如图4-1所示。
图4-1 栈的示意图
因此,栈又称为先进后出(First In Last Out)表,简称FILO表,或后进先出(Last In First Out)表,简称为LIFO表。通常将允许进行插入或删除操作的一端称为栈顶(top),被固定的另一端称为栈底(bottom)。不含数据元素的栈称为空栈。
图4-2演示了A,B,C,D四个字母进栈和出栈的情况。注意观察栈顶位置的变化过程。
图4-2 栈顶指针和栈中元素的变化
4.2.2 栈的基本操作
下面介绍栈的基本操作,其它操作可以通过调用基本操作方便地实现。
1. 初始化栈 Init_Stack(S) 设置一个空栈S
2. 入栈 Push_Stack(S,x) 在栈顶插入一个元素x
3. 出栈 Pop_Stack(S) 栈s非空时,删除栈顶元素
4. 获取栈顶元素 GetTop_Stack(S) 读取栈顶元素的值
5. 判栈空Stack_Empty (S) 当栈s为空时返回1
6. 栈置空 Clear_Stack(s) 栈置空操作
7. 求栈长StackLength(S) 求栈的长度。
4.2.3 顺序栈及其基本操作的实现
和一般线性表类似,栈的存储方式有顺序存储和链式存储两种。栈的基本操作算法必须结合存储结构来具体实现。
采用顺序存储结构的栈简称为顺序栈,是用一组连续的存储单元依次存放栈中的每个元素。通常用一个一维数组和一个标记栈顶元素位置的变量来实现栈的顺序存储。习惯将数组起始端作为栈底。如图4-3所示。
图4-3顺序栈
顺序栈用类C语言类型定义如下:
#define MAX_STACK 100
typedef struct
{
DataType data[MAX_STACK];
int top;
}Se_Stack;
然后,可以定义一个指向顺序栈的指针s:
Se_Stack *s;
说明:顺序栈被定义为一个结构体类型,它包括两个域,data是一个一维数组,用于存储栈中数据元素,MAX_STACK 为顺序栈的容量。top为标志栈顶元素位置的变量,常用整型表示,取值范围为0 ~(MAX_STACK-1)。
空栈: s-top=0;
栈满: s-top= MAX_STACK-1;
入栈操作: s-top++;s-data[s-top]=x;
出栈操作: x=s-data[s-top];s-top—;
与顺序栈相关的关键操作有:
下面给出栈的基本运算在顺序栈上的实现算法。
初始化空栈Init_Stack()
【算法4.1】初始化顺序栈
Se_Stack *Init_Stack()
{
Se_Stack *s;
s=( Se_Stack *)malloc(sizeof(Se_Stack));
s-top= 0;
return s;
}
2. 判空栈IsNull_Stack(s)
【算法4.2】判栈空
int IsNull_Stack(Se_Stack *s)
{
if (s-top==0) return 1;
else return 0;
}
3. 入栈操作Push_Stack (s, x)
图4-4 入栈算法
【算法4.3】入栈操作
Int Push_Stack (Se_Stack *s, DataType x)
{
if (s-top==MAX_ST
您可能关注的文档
- 市场营销调研教学资料 2015 chapter 13 描述统计与样本量确定.ppt
- 市场营销调研教学资料 2015 chapter 15.ppt
- 市场营销调研教学资料 2015chapter14假设检验数据分析.ppt
- 市场营销调研教学资料 SPSS入门第二课.doc
- 市场营销调研教学资料 SPSS入门第六课T检验与方差分析.docx
- 市场营销调研教学资料 SPSS入门第五课卡方分析.docx
- 市场营销调研教学资料 SPSS入门第一课:制作频次分布图.doc
- 市场营销调研教学资料 从Z检验到T检验到F检验.doc
- 市场营销调研教学资料 第十三章描述统计学习要点及作业 2.doc
- 市场营销调研教学资料 第十四章假设检验.doc
最近下载
- 草果栽培技术.ppt VIP
- 药物设计软件:Schrodinger二次开发_(16).Schrodinger插件开发与使用.docx VIP
- 浙江省9+1高中联盟2024-2025学年高二上学期11月期中考试物理试题(含答案).docx VIP
- 教育研究导论(宁虹主编)笔记.pdf VIP
- 药物设计软件:Schrodinger二次开发_(15).自定义分子力场与参数化.docx VIP
- 2019年高铁动车广告,高铁车身广告,高铁广告价格.pdf VIP
- 高考数学考点题型全归纳.pdf VIP
- 万华化学安全管理实践.pdf VIP
- 丹纳赫DBS管理系统.pptx VIP
- 金属焊接软件:SYSWELD二次开发_(6).焊接热源模型开发.docx VIP
文档评论(0)