栈(C语言实现).docVIP

  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文档。上传文档
查看更多
西北师范大学地环学院地理信息系 数据结构实验讲义 二 栈 C语言实现 张长城 2011-2-8 [顺序表构造栈] 一 栈的基本原理分析 作为栈这种数据结构,数据是进行所谓的先进后出操作,但栈在操作中,并不需要在中间插入删除操作、一般也不需要在进栈数据中查找什么,这种情况下,恰恰是顺序表可以完成的非常好的场合,所以栈经常是用一个简单的数组即可完成。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #includestdio.h int s[100]; int top=0; void push(int e) { s[top]=e; top++; } int pop() { top--; return s[top]; } main() { int i; for(i=0;i10;i++) push(i); for(i=0;i10;i++) printf(%d\n,pop()); } 最简单的栈程序,见s0.c 这个程序就能完成最简单的栈的程序,原理也很简单。 对栈的应用,比如把10进制数1348转换成8进制,则过程是: 商 余 1348/8 168 4 168/8 21 0 21/8 2 5 2/8 0 2 这个结果就是2504,但从计算步骤上看:它的结果次序是反的,是4、0、5、2,如果把余数的结果先保存进栈,则出栈恰好是正确的结果。 略微修改s0.c就可完成这个工作。这个算法适合任何进制数据转换。 1 2 3 4 5 6 7 8 9 10 11 12 main() { int N=1348; while(N) { push(N%8); N=N/8; } while(top0) printf(%d,pop()); printf(\n); } 最简单的栈应用程序,见s0.c 但这个程序有很大的问题: 1 仅仅有一个栈空间,程序如果要用多个栈、则要说明很多s[]、top之类的变量; 2 这个栈也仅仅能进出int类型的数据,如果是多种类型数据组成的表格,则不能处理; 所以上述程序仅是个原理示范性的程序,在更加广泛的情况下不能用,它太简单了。 要对任意类型的表进行栈操作,那就找C#的泛型或者JavaScript吧,在C这里,我们依然最一个简单的特定的表格进行栈处理,这个表就是: struct ElemType { char c; int iData; long lData; char sData[20]; }; 这是个包含字符、整数、长整数、字符串的表,表本身或许没什么现实意义。根据栈的原理,我们知道设计栈不需要链表、顺序表已经足够好了。所以设计一个表示栈的表就是: struct sqStack { struct ElemType *base,*top; int Count,Size; }; 这个表中*base指针代表栈空间的首地址;*top代表栈空间的栈顶地址; Count代表进栈数据元素的个数,也就是说进栈数据有多少行; Size代表栈的最大空间,也就是说栈最大能容纳多少行数据。 这个表实际相当于顺序表的目录表,它能使访问栈更加容易。所以编程的整体路线也将同顺序表、链表中做的那样:不断补充函数。 1 栈的初试化 所谓栈的初始化,就是构造一个指定空间的存储单元,并且给出这片空间的首地址,这个手段在顺序表、链表的编程中已经很熟悉了。 如果指定栈的空间是Size,那么就意味着为ElemType这样的表申请Size行的存储空间,写成C语言就是: struct ElemType *p; p=(struct ElemType *)malloc(sizeof(struct ElemType)*Size); 当然,要把这个结果存储到栈目录表seqStack中,所以: struct seqStack *s; s=(struct seqStack *)malloc(sizeof(struct seqStack)); s-base =p;s-top=p;s-Count =0;s-Size =Size; 注意编程要点:这里的表s 保存的最重要数据就是:当前栈中数据的行数Count、以及栈的最大容量。当然,在空栈的情况下,栈顶指针和栈的存储空间首地址是一致的。整个函数就是: 1 2 3 4 5 6 7 8 9 struct s

文档评论(0)

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

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

1亿VIP精品文档

相关文档