- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3栈和队列(use)
第三章 栈和队列 线性表的不足 进行“插入”与“删除”操作时: 顺序存储时要移动大量的数据元素 链式存储时要从头指针出发 解决:固定“插入”与“删除”操作的位置,要求其只能在表头或表尾进行 这就是我们要讨论的栈和队列 栈 栈的类型定义 数据对象和数据关系与线性表一致,用有序对表示一连串的线性序列状态 基本操作: 压栈Push S,x 将元素x插入栈S中,使x成为栈S的栈顶元素。 出栈Pop S,x 当栈S不空时,由x返回栈顶元素,并从栈中删除栈顶元素 取栈顶元素GetTop S,x 若栈S不空,则由x返回栈顶元素。 判栈空Empty S 若栈S为空栈,结果为1,否则结果为0 栈的实现之一:顺序栈 存放于连续单元的栈 类型定义 typedef struct SElemType *bottom; SElemType *top; int stacksize; SqStack; SqStack s; 入栈:设栈的最大尺寸为5 Status Push SqStack S, SElemType e if S.top-S.bottom S.stacksize S.bottom SElemType* realloc S.bottom, S.stacksize+ STACKINCREMENT *sizeof ElemType ; if !S.bottom return OVERFLOW ; S.top S.bottom +S.stacksize; S.stacksize + STACKINCREMENT; *S.top++ e; // *S.top e; S.top S.top+1; return OK; 出栈 Status Pop SqStack S, SElemType e if S.top S.bottom return ERROR; e *--S.top; // S.top S.top-1; e *S.top; return OK; 注意 栈空条件:s. top s. bottom 此时不能出栈 栈满条件:s.top-s.bottom s.stacksize 此时不能进栈 进栈操作:*s.top++ e; 或*s.top e; s.top++; 退栈操作:e *--s.top; 或s.top--; e *s.top; 当栈满时再做进栈运算必定产生空间溢出,称“上溢”; 当栈空时再做退栈运算也将产生溢出,称“下溢”。 其他基本操作 栈的初始化操作 p46 Status InitStack SqStack S 取栈顶元素 p47 Status GetTop SqStack S, SElemType e 遍历操作 p48 Status StackTraverse SqStack S, Status *visit 销毁栈 p48 Status DestroyStack SqStack S 链栈 存放于单链表中的栈 类型定义: typedef struct SNode SElemType data; struct SNode *next; SNode, *LinkStack; LinkStack s; 基本操作 初始化: 出栈 入栈 顺序栈 链栈 链式栈无栈满问题,空间可扩充 链式栈的栈顶在链头 适合于多栈操作 顺序栈空间固定,须考虑最大存储空间 设计了共享栈,但其也存在栈满的问题 共享栈 共享栈的类型定义可用C语言描述如下: 出栈 入栈 栈的应用之一:数制转换 十进制N和其它进制数的转换是计算机的基本问题,其原理称为辗转相除法,即: N n div d *d+n mod d 其中:div为整除运算,mod为求余运算 例如 1348 10 2504 8,其运算过程如下: n n div 8 n mod 8 1348 168 4 168 21 0 21 2 5 2 0 2 数制转换算法 余数记录的顺序符合栈的操作特点 “辗转”——用“循环”实现 循环的终止条件:当前的被除数为0 给出转换结果的过程——即是各元素依次出栈的过程 思考写出此算法并用C语言实现 栈的应用之二:表达式求值 表达式求值是栈的最典型的应用,在编译程序中,如何解决表达式求值是非常重要的问题。 栈在表达式求值中起到重要作用 因为表达式求值不是按照从左到右的顺序进行直接运算的,而是按照运算符的优先级进行运算(边读边运算,但是考虑到优先级,排在前面的低级运算符需要保存起来,然后运算)。 例子 3.6 对操作内容的重新划分 操作数(operand) 操作数既可
您可能关注的文档
最近下载
- 高二《直线和圆的方程》易错培优竞赛试题-2024-2025学年高二数学竞赛能力培优练(全国通用)解析版.pdf VIP
- 高二《直线和圆的方程》易错培优竞赛试题-2024-2025学年高二数学竞赛能力培优练(全国通用)原卷版.pdf VIP
- 第六章:维护支柱.pdf VIP
- 缺血性卒中患者椎动脉颅内段钙化:多因素关联与临床洞察.docx
- 07-维护支柱应知应会.doc VIP
- VPO维护支柱简介--LCC.ppt
- 高二《空间向量与立体几何》易错培优竞赛试题-2024-2025学年高二数学竞赛能力训练(全国通用)解析版.pdf VIP
- 二年级上册班主任工作总结,二年级班主任工作总结.docx VIP
- 黄腐酸农用的八大功能和四大作用.doc VIP
- DB14_T 2444-2022 土地整治工程建设.docx VIP
文档评论(0)