- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构》第三章 第31页 3.入栈 入栈操作就是将新结点插入链表的第一个结点之前,操作时首先要生成新结点,然后在栈顶位置插入新结点。操作成功时返回1。 【算法3-13】: int LPush(LinkStack *top,DataType x) /* 链栈的入栈操作 */ { StackNode *p; p=(StackNode*)malloc(sizeof(StackNode)); /* 生成新结点 */ if(!p) { printf(入栈操作出错!\n); exit (-1); } p-data=x; p-next=*top; *top=p; return 1; } 《数据结构》第三章 第32页 4.出栈 出栈操作就是将链栈的第一个结点删除,将结点的元素赋值给x,并释放结点空间。操作成功时返回1。 【算法3-14】: int LPop(LinkStack *top,DataType *x) /* 链栈的出栈操作 */ { StackNode *p; if(!(*top)) { printf(栈已空!\n); exit (0); } p=*top; /* p指向栈顶元素*/ *top=p-next; /* 将栈顶结点从链上取下,即出栈*/ *x=p-data; /* 将栈顶元素值赋给指针x所指向的变量*/ free(p); /* 释放p指向的结点 */ return 1; } 《数据结构》第三章 第33页 5.取栈顶元素(读栈) 用x返回栈顶元素,操作成功时返回1。 【算法3-15】: int LGetPop(LinkStack top,DataType *x) /* 链栈的读栈操作 */ { if(!top) { printf(栈已空!\n); exit (0); } *x=top-data; /* 将栈顶元素值赋给指针x所指向的变量 */ return 1; } 《数据结构》第三章 第34页 1.时间性能:因为栈的所有操作都在栈顶进行,所以顺序栈和链栈的基本操作的算法都只需要常数阶的时间。 2.空间性能:顺序栈初始化时需要设定一个固定的长度,当数据元素过多时可能出现上溢现象,数据元素较少时存在空间浪费的现象。链栈只有在内存空间不足时才会出现栈满的问题,但因为每个元素结点都需要指针域,从而产生了结构性开销。 因此,栈的使用过程中如果元素个数变化较大宜选用链栈,反之,宜选用顺序栈。 3.1.4 顺序栈和链栈的比较 《数据结构》第三章 第35页 3.1.5.1 递归——阶乘问题 栈的一个重要应用就是在程序设计语言中实现递归。栈是嵌套调用机制的实现基础。 递归就是子程序(或函数)直接或间接调用自己的算法。也就是说,递归函数的调用是函数在执行过程中,进行多次的自我嵌套调用。递归算法是程序设计中的常用算法之一,它可以使程序设计简单精炼、结构清晰、容易实现。 递归通常用于解决结构自相似的问题,比如:台阶问题、汉诺塔问题、图的遍历等等。它本质上是将一个大问题转换为一个或几个小问题,再将小问题继续分解为更小的问题,直到小问题可以解决为止。因此,递归有两个组成部分:一是递归终止条件;二是递归模式。 3.1.5 栈的应用 栈是计算机软件中应用最广的数据结构之一。比如,程序递归的实现,程序在编译中的表达式求值、括号匹配等问题都是栈的应用。下面,介绍栈的几个应用实例。 《数据结构》第三章 第36页 过程调用的执行步骤为: 记录调用过程结束时的返回地址,以及前一次调用过程中的数据信息; 无条件转移到被调用过程的入口地址开始执行程序; 传递返回的数据信息; 取出返回地址,且无条件地转移到该地址,即返回到调用过程中去执行程序。 下面用一个典型的实例,分析一下递归算法。 《数据结构》第三章 第37页 【例3-1】 用递归的方法解决——阶乘问题。 【题目要求:】用递归调用编写计算阶乘n!的函数f(n)。 1 n=0 f(n)=
您可能关注的文档
- 数据分析方法及应用──基于SPSS和EXCEL环境 (2).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (3).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (4).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (5).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (6).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (7).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (8).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (9).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (13).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (14).ppt
文档评论(0)