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

[工学]数据结构与算法_第四章.ppt

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

§4 栈和队列 § 4.1 栈 § 4.1.1 栈的定义 栈(stack)又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。 人们把对栈进行运算的一端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底。 向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素; 从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其下面的相邻元素成为新的栈顶元素。 由于栈的插入和删除运算仅在栈顶一端进行,后进栈的元素必定先出栈,所以又把栈称为后进先出表(Last In First Out, 简称LIFO)。 栈的物理存储可以用顺序存储结构,也可以用链式存储结构 栈中没有任何元素称为空栈。 假定一个栈S为(a,b,c),其中表尾的一端为栈顶,字符c为栈顶元素。若向S压入一个元素d,则S变为(a,b,c,d),此时字符d为栈顶元素;若接着从栈S中依次删除两个元素,则首先删除的是元素d,接着删除的是元素c,栈S变为(a,b),栈顶元素为b。 4.1.2 栈的数据类型和运算 栈的抽象数据类型中的数据部分为具有ElemType元素类型的一个栈,它可以采用任一种存储结构实现; 栈的操作部分应包括元素进栈、元素出栈、读取栈顶元素、检查栈是否为空等。 栈的主要操作及程序: (1) 初始化栈S,即把它置为空 void InitStack(S); (2) 新元素x进栈,即把x值插入到栈顶 void Push(S, ElemType x); (3) 删除栈顶元素并返回之 ElemType Pop(S); (4) 返回栈顶元素的值,不会改变栈的状态 ElemType Peek(S); (5) 判断栈S是否为空,若是则返回1表示真,否则返回0表示假 int EmptyStack(S); (6) 清除栈S中的所有元素,使之成为一个空栈 void ClearStack(S); 假定栈a的元素类型为int,下面为调用栈操作的一些例子。 (1) InitStack(a); //表示把栈a置空 (2) Push(a,18); //表示元素18进栈 (3) int x=46; Push(a,x); //表示x的值46进栈 (4) Push(a,x/3); //表示x除以3的整数值15进栈 (5) x=Pop(a); //表示栈顶元素15退栈并赋给x (6) printf(“%d”,Peek(a)); //表示读取当前栈顶元素46并输出 (7) Pop(a); //栈顶元素46出栈,返回值46自动丢失 (8) EmptyStack(a); //因此时栈a非空,所以返回的值false (9) printf(“%d\n”,Pop(a)); //栈顶元素18退栈并输出,此时栈已空 (10) x=EmptyStack(a); //因栈为空,返回true,接着把对应的整数值1赋给x §4.2 栈的顺序存储结构和操作实现 栈的顺序存储结构也称为顺序栈,它是一种运算受限的顺序表。 顺序栈具有栈的一切特点 §4.2.1 顺序栈的定义 1.利用普通数组加栈顶指针来实现栈的定义 栈的顺序存储结构需要使用一个数组和一个整型变量来实现,利用数组来顺序存储栈中的所有元素,利用整型变量来存储栈顶元素的下标位置。假定栈数组用stack[MaxSize]表示,指示栈顶位置的整型变量用top表示,则元素类型为ElemType的栈的顺序存储结构可定义为: ElemType stack[MaxSize]; int top; 其中,MaxSize为一个整型全局常量,需事先定义,由它确定顺序栈(即顺序存储的栈)的最大长度,又称为深度,即栈空间最多能够存储的元素个数;由于top用来指示栈顶元素的位置,所以把它称为栈顶指针。 2. 利用记录来实现栈的定义 假定该记录类型用StackSq表示,则定义为: struct StackSq { ElemType stack[MaxSize]; int top;

文档评论(0)

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

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

1亿VIP精品文档

相关文档