网站大量收购独家精品文档,联系QQ:2885784924

数据结构(第3章)课件.ppt

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构(第3章)课件

第三章 栈和队列;3.1 栈;3.1.1 栈的定义及基本运算;;3.1.2 栈的存储实现和运算实现⒈顺序栈; 通常0下标端设为栈底,这样空栈时栈顶指针top=-1; 入栈时,栈顶指针加1,即s-top++; 出栈时,栈顶指针减1,即s-top--。栈操作的示意图如图所示。 图(a)是空栈,图(c)是A、B、C、D、E 5个元素依次入栈之后,图(d)是在图(c)之后E、D相继出栈,此时栈中还有3个元素,或许最近出栈的元素D、E仍然在原先的单元存储着,但top指针已经指向了新的栈顶,则元素D、E已不在栈中了。;⑴ 置空栈 首先建立栈空间,然后初始化栈顶指针。 SeqStack *Init_SeqStack( ) { SeqStack *s; s=malloc(sizeof(SeqStack)); s-top= -1; return s; };⑵判空栈 int Empty_SeqStack(SeqStack *s) { if (s-top= = -1) return 1; else return 0; };⑶入栈 int Push_SeqStack(SeqStack *s, datatype x) {if (s-top= =MAXSIZE-1) return 0; /*栈满不能入栈*/ else { s-top++; s-data[s-top]=x; return 1; } };⑷出栈 int Pop_SeqStack(SeqStack *s, datatype *x) { if (Empty_SeqStack(s)) return 0; /*栈空不能出栈 */ else { *x=s-data[s-top]; s-top--; return 1; } /*栈顶元素存入*x,返回*/ };⑸取栈顶元素 datatype Top_SeqStack(SeqStack *s) { if (Empty_SeqStack(s)) return 0; /*栈空*/ else return(s-data[s-top]); };几点说明: 1. 对于顺序栈,入栈时,首先判栈是否满了,栈满时,不能入栈; 否则出现空间溢出,引起错误,这种现象称为上溢。 栈满的条件为:s-top= =MAXSIZE-1 2. 出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空时常作为一种控制转移的条件。; 通常链栈用单链表表示,因此其结点结构与单链表的结构相同: typedef struct node { datatype data; struct node *next; }StackNode,* LinkStack; 说明top为栈顶指针: LinkStack top ; 因为栈中的主要运算是在栈顶插入、删除,???然在链表的头部做栈顶是最方便的,而且没有必要象单链表那样为了运算方便附加一个头结点。通常将链栈表示成图的形式。;⑴置空栈 LinkStack Init_LinkStack( ) { return NULL; } ⑵判栈空 int Empty_LinkStack(LinkStack top) { if (top==-1) return 1; else return 0; };⑶入栈 LinkStack Push_LinkStack(LinkStack top, datatype x) { StackNode *s; s=malloc(sizeof(StackNode)); s-data=x; s-next=top; top

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档