[理学]第4章 栈和队列-1.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[理学]第4章 栈和队列-1

typedef struct { datatypedata[n]; int top1,top2; }dstack; 第*页 第4章 栈和队列 第4章 栈 和 队 列 4.1 栈 4.2 栈的应用 4.3 队列 4.4 队列的应用 4.1 栈 4.1.1 栈的定义 栈(stack)是限定仅在表尾一端进行插入或删除操作的线性表。 对于栈来说,允许进行插入或删除操作的一端称为栈顶(top),而另一端称为栈底(bottom)。不含元素的栈称为空栈。 假设有一个栈S=(a1,a2,…,an),a1先进栈,an最后进栈。称a1为栈底元素,an为栈顶元素。 如图4.1所示。出栈时只允许在栈顶进行,所以an先出栈,a1最后出栈。因此又称栈为后进先出(Last In First Out)的线性表,即LIFO结构。一个栈总是设有栈顶指针指向栈顶元素,通常用top表示。 图4.1 栈 进栈 退栈 a n … a 2 a 1 栈顶(top) 栈底(bottom) 栈的基本运算和操作有以下几种: (1)InitStack(S): 初始化操作,设定一个空栈。 (2)EmptyStack(S): 判空栈操作,若S为空栈,则返回值“true”,否则返回值“false”。 (3)Push(S,x): 入栈操作,在S栈顶插入一个元素X,栈顶位置由top指针指出。 (4)Pop(s): 出栈操作,若栈S不空,在栈顶删除一个元素。 (5)Gettop(S): 取栈顶元素操作,若栈S不空则取栈顶元素的值(栈顶元素不删除,top指针不改变)。 (6)ClearStack(S): 置栈空操作。已知S为栈,不论操作之前的栈是否为空栈,本操作的结果都是将S置为空栈。 栈的表示一般由两种: (1)静态的数组表示 以定长的数组来表示栈。 优点:处理方便。 缺点:静态的数组定义太大了,浪费资源;小了可能不够用。 (2)动态的链表表示 使用链表结构来表示一个栈。 优点:可以有效地利用内存空间。 缺点:处理复杂一些。 4.1.2 栈的顺序存储结构 栈的顺序存储结构亦称顺序栈。它是利用一批地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时设一个指针top指向栈顶元素的当前位置,请注意top在这里是一个整型变量。 通常用一维数组来实现栈的顺序存储。习惯上以数组小下标一端做栈底,当top=?-1时为空栈。 在元素进栈时指针top不断地加1,当top等于最大下标值时为栈满。存储结构描述为: #define maxsize 100 typedef int datatype; typedef struct { datatype data[maxsize]; int top; }seqstack; /*顺序栈的类型标识符*/ seqstack S; /*说明S是栈变量*/ 假设maxsize取值为6。 图4.2展示了顺序栈S中数据元素和栈顶指针的关系。 因为当top=-1为空栈,可利用有效空间为: S.elem[0],…,S.elem[5]。 图4-2 栈的顺序存储结构 (a)空栈 (b)插入A 1 2 3 4 5 S.top=-1 A S.top=0 0 图4-2 栈的顺序存储结构 (c)插入B、C、D (d)删除C、D 1 2 3 4 5 S.top=3 A S.top=1 0 A B C D D B C 1. 初始化栈 void InitStack(seqstack *s) /*构造一个空栈*/ { s-top=-1; } /*InitStack*/ 3. 进栈操作 void Push(seqstack *s, datatype e) { if(s-topmaxsize-1) { s-top++; s-data([s-top])=e; } else printf(“overflow!\n); /*栈满*/ }/* Push */ 4. 出栈操作 datatype Pop( seqstack *s) {if(Empty(s) { printf(“underflow!\n); return NULL;} /*栈空*/ else{ int e=s-data[s-top]; s-top--; return e; }

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档