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

栈顺序存储结构顺序栈.doc

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

3.2 栈的顺序存储结构---顺序栈 栈的顺序存储结构简称顺序栈,它是运算受限的顺序表。顺序栈的存储结构是:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。 3.2.1 顺序栈的类型定义 类似于顺序表,用一维数组描述顺序栈中的数据元素的存储区域,并预设一个数组的最大空间。描述顺序栈的通常的习惯做法是以top=0表示空栈,鉴于C语言中数组的下标约定是从0开始,则当以C作描述语言时,如此设定会带来很大不便;另一方面,由于栈在使用过程中所需最大空间的大小很难估计,因此,一般来说,在初始化设空栈时不应限定栈的最大容量。一个较合理的做法是:先为栈分配一个基本容量,然后在应用过程中,当栈的空间不够使用时再逐段扩大。为此,可设定两个常量:STACKCSL(存储空间初始分配量)和STACKZL(存储空间分配增量)。下面给出顺序栈的类型定义: #includestdlib.h #define STACKCSL 64 /*顺序栈存储空间初始分配量*/ #define STACKZL 8 /*顺序栈存储空间分配增量*/ typedef int ElemType; /*栈元素的数据类型定义,它可以是任意的,具体问题时只需根据需要修改本定义语句即可*/ typedef struct { ElemType *top; /*栈顶指针*/ ElemType *bottom; /*栈底指针*/ int stacksize; /*当前已分配的存储空间,以栈元素为单位*/ }seqstack; /*顺序栈类型定义*/ seqstack *seqs; /*seqs是顺序栈类型指针*/ 其中,stacksize指示栈的当前可使用的最大容量,初始化栈时,stacksize的值等于STACKCSL,以后根据需要按分配增量STACKZL增长。 bottom是栈底指针,在顺序栈中,它始终指向栈底的位置,如果bottom的值等于NULL ,就意味着栈结构不存在。 top是栈顶指针,其初值指向栈底,也就是说top=bottom可作为栈空的标记。每当插入新的栈顶元素时,指针top增1;删除栈顶元素时,指针top减一。所以,非空栈中的栈顶指针始终在栈顶元素的下一个位置上。 图3.2表示了栈顶指针top和顺序栈中数据元素之间的对应关系。                                                    top                                       top                                                                               top                            bottom       bottom      bottom          (a)空栈 (b) 元素5、8、1进栈 (c)元素1出栈 top top top top bottom bottom bottom (d)元素4、3进栈 (e)元素3出栈 (f)栈满 图3.2 栈顶指针与数据元素的关系 3.2.2 基本运算的实现 上述顺序栈的类型定义以及本小节将介绍的基本运算操作均放在文件“seqstack.c”中,使用时需要用命令:#includeseqstack.c将其包含到具体的应用程序中去。 由于顺序栈的插入、删除只在栈顶进行,因此顺序栈的基本操作比顺序表要简单得多。在顺序栈上可以实现初始化栈、进栈、出栈、判栈空、取栈顶元素等几种基本运算,具体算法如下: 1. 初始化栈 该算法用于建立一个容量为STACKCSL的空顺序栈ss。建立时首先使用malloc函数进行内存储区的分配,并将所分配的存储区的起始地址赋给栈底指针bottom。如果bottom不为空,说明分配成功,否则说明分配失败。成功时进行置空栈的操作,失败则退出。具体算法如下: 算法3.1 void initstack (seqstack *ss) /*初始化一个顺序栈ss*/ { ss-bottom=(ElemType *)malloc(STACKCSL*sizeof(ElemType)); if(!ss-bottom) { printf(“初始化栈失败”);return;}; ss-top=ss-bottom; ss-stacksize= STACKCSL; printf(初始化栈成功!); } 2.进栈 该算法用于向顺序栈ss的栈顶插入一个元素x。算法首先判断栈是否已满,如果栈不满,就直接进行插入操作,否则就使用realloc函

文档评论(0)

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

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

1亿VIP精品文档

相关文档