- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程的内容 1. 定义 栈的存储结构 顺序栈 实现:一维数组s[M] Q1:堆栈是什么?它与一般线性表有什么不同? Q2:顺序表和顺序栈的操作有何区别? Q4:为什么要设计堆栈?它有什么独特用途? 例3.5 多进制输出: 例3.6回文游戏:顺读与逆读字符串一样(不含空格) 括号匹配的检验 ([ ] ())或[([ ] [ ])]等为正确的格式; [(])或([())或(()])均为不正确的格式; 检验括弧是否匹配的方法用“期待的紧迫程度”这个概念来描述 例如 [([ ] [ ])] 限于二目运算符的表达式定义: 表达式::=(操作数)+(运算符)+(操作数) 操作数::=简单变量|表达式 如何从原表达式求后缀式?例如a*b+(c-d/e)*f后缀式(逆波兰式):ab × cde/-f ×+ 1)设立运算符栈; 2)设表达式的结束符为#,予设运算符栈的栈底为# 3)若当前字符是操作数,则直接发送给后缀式; 4)若当前运算符的优先数高于栈顶运算符,则进栈; 5)否则,退出栈顶运算符发送给后缀式; 6)“(”对它之前后的运算符起隔离作用,”)”可视为自相应左括弧开始的表达式结束标志 表达式求值过程----机内运算示意图 3.2 队列 队的实现方式是本节重点,关键是掌握入队和出队操作。具体实现依存储结构(链队或顺序队)的不同而不同。 1.链队列 2.顺序队 (A) r-f (B)(n+f-r)% n (C)n+r-f (D) (n+r-f)% n 中缀表达式A*(B+C)/(D-E+F)的后缀式为 与线性表相同,仍为一对一关系。 顺序队或链队,以循环顺序队更常见。 只能在队首和队尾运算,且访问结点时依照先进先出(FIFO)的原则。 关键是掌握入队和出队操作,具体实现依顺序队或链队的不同而不同。 存储结构 运算规则 实现方式 逻辑结构 只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。 基本操作:入队或出队,建空队列,判队空或队满等操作。 尾部插入 首部删除 队列定义 队列 (Queue)是仅在表尾进行插入操作,在表头进行删除操作的线性表。它是一种先进先出(FIFO)的线性表。 例如:队列 Q= (a1 , a2 , a3 , ……….,an-1 , an ) 在队尾插入元素称为入队;在队首删除元素称为出队。 队首 队尾 问:为什么要设计队列?它有什么独特用途? 离散事件的模拟(模拟事件发生的先后顺序,例如 CPU芯片中的指令译码队列); 操作系统中的作业调度(一个CPU执行多个作业); 3. 简化程序设计。 答: 1. 链队列 2. 顺序队 队的抽象数据类型定义: ADT Queue{ 数据对象:D=…… 数据关系:R=…… 基本操作: …… } ADT Queue 建队、入队或出队、判队空或队满等,教材罗列基本操作。 重点是循环顺序队 链队列类型定义: typedef struct { QueuePtr front ; //队首指针 QueuePtr rear ; //队尾指针 } LinkQueue; 结点类型定义: typedef Struct QNode{ QElemType data; //元素 Struct QNode *next; //指向下一结点的指针 }Qnode , * QueuePtr ; 关于整个链队的总体描述 链队中任一结点的结构 因简单而先介绍 讨论: 空链队的特征? Q.front ^ Q.rear ③ 怎样实现链队的入队和出队操作? ② 链队会满吗? Q.front=Q.rear 一般不会,因为删除时有free动作。除非内存不足! 入队(尾部插入):Q.rear-next=S; Q.rear=S;S-next=NULL 出队(头部删除):Q.front-next=p-next; S D ^ 链队示意图: 完整操作函数见教材 (队尾) (队首) Q.front a1 a2 a3 ^ Q.rear p void enQueue(LiQueue *q,ElemType e) { QNode *s; s=(QNode *)malloc(sizeof(QNode)); s-data=e; s-next=NULL; if (q-rear==NULL) /*若原链队为空,新结点是队首结点又是队尾结点*/ q-front=q-rear=s; else {
您可能关注的文档
最近下载
- 13J104建筑工程.房屋建筑.蒸压加气混凝土砌块、板材构造.pdf VIP
- 2014地铁车站防火封堵设计要求基础介绍.doc VIP
- 《BIM建模技术》教案——5创建结构板.docx VIP
- 企业人力资源管理师(三级)真题及答案.docx VIP
- 面向设计的地铁车站防火安全韧性评价_夏侯遐迩.pdf VIP
- 2025花城版音乐三年级上册《我爱米兰》课堂教学设计.docx
- 《BIM建模技术》教案——4创建梁.docx VIP
- 2025年最新党员领导干部廉洁自律知识竞赛题库附带答案.docx VIP
- 管道支架重量估算表(超全,超好) (2).xls VIP
- IE七大手法培训资料.pptx VIP
原创力文档


文档评论(0)