- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构和算法 作者:小甲鱼 让编程改变世界 Change the world by program 疑问解释 上节课我们讲解栈的结构,我们是这样声明的: typedef int ElemType; typedef struct { ElemType *base; ElemType *top; int stackSize; }sqStack; 有些朋友提出了疑问:怎么没有data元素存放数据?怎么会有两个ElemType元素? 疑问解释 其实如果小甲鱼按照套路出牌,我们完全可以这样子声明: typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int top; // 用于标注栈顶的位置 int stackSize; } 疑问解释 但是呢,小甲鱼要考虑到大家希望学习到的是“不变应万变”的能力,所以,这次有些朋友没反应过来^_^ 好吧,如果理解的朋友接下来的两分钟视频可以撸过,小甲鱼画两个图给可能还不理解的朋友解释下,因为比较重要,所以大家不要嫌弃我罗嗦哈,就两分钟T_T 疑问解释 我们课堂的定义方法: (ElemType* base 和 ElemType* top) E D C B A base top 字符F入栈 F E D C B A base top 疑问解释 按照传统套路: int top(用于索引数组) E D C B A (top=4) F E D C B A (top=5) (top=-1) 栈的其他操作 上节课我们介绍了柯尔特半自动手枪,介绍了栈相关的基本操作:入栈和出栈。 除了以上介绍外,对栈还有一些其他的操作,例如清空一个栈,销毁一个栈,计算栈的当前容量等。 我们这节课的安排就这些! 哦还有,利用栈的原理,给大家讲解一道例题。 题目:利用栈的特点,将用户输入的二进制数转换为十进制数。(大家可以先思考) 清空一个栈 所谓清空一个栈,就是将栈中的元素全部作废,但栈本身物理空间并不发生改变(不是销毁)。 因此我们只要将s-top的内容赋值为s-base即可,这样s-base等于s-top,也就表明这个栈是空的了。这个原理跟高级格式化只是但单纯地清空文件列表而没有覆盖硬盘的原理是一样的。 代码清单: ClearStack(sqStack *s){ s-top = s-base; } 销毁一个栈 销毁一个栈与清空一个栈不同,销毁一个栈是要释放掉该栈所占据的物理内存空间,因此不要把销毁一个栈与清空一个栈这两种操作混淆。 代码清单: XXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXO 销毁一个栈 DestroyStack(sqStack *s){ int i, len; len = s-stackSize; for( i=0; i len; i++ ){ free( s-base ); s-base++; } s-base = s-top = NULL; s-stackSize = 0; } 计算栈的当前容量 计算栈的当前容量也就是计算栈中元素的个数,因此只要返回s.top-s.base即可。 注意,栈的最大容量是指该栈占据内存空间的大小,其值是s.stackSize,它与栈的当前容量不是一个概念哦。 代码清单: int StackLen(sqStack s) { return(s.top – s.base); // 初学者需要重点讲解 } 实例分析 题目:利用栈的数据结构特点,将二进制转换为十进制数。 分析:地球人都知道,二进制数是计算机数据的存储形式,它是由一串0和1组成的,每个二进制数转换成相应的十进制数方法如下: (XnXn-1……X3X2X1)2 = X1*2^0+X2*2^1+…+Xn*2^(n-1) 一个二进制数要转换为相应的十进制数,就是从最低位起用每一位去乘以对应位的积,也就是说用第n位去乘以2^(n-1),然后全部加起来。 实例分析 由于栈具有后进先出的特性,例如我们输样的二进制数,如图: 1 0 0 1 0 0 1 1 base top
文档评论(0)