




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第三章 栈和队列3.1 栈 3.1.1 抽象数据类型栈的定义 3.1.2 栈的表示和实现3.2 栈的应用举例3.3 队列 3.3.1 抽象数据类型队列的定义 3.3.2 队列的表示和实现栈的定义栈栈是只能在表尾插入和删除的线性表。入栈出栈anan-1a1栈顶栈底后进先出后进先出练习一个栈的入栈序列是ABCDE,则其输出序列不可能是( )A,EDCBAB,DECBAC,DCEABD,ABCDEC顺序栈-存储结构以顺序存储方式存储的栈叫做顺序栈顺序栈。basetopbasetopABCDEbasetopAB顺序栈-存储结构类型说明:#define MAXSIZE 100typedef struc
2、tSElemType *base;SElemType *top;int stacksize;SqStack栈的运算初始化栈:InitStack(S)取栈顶元素:GetTop(S,x)入栈:Push(S,x)出栈:Pop (S)初始化栈:void InitStack(SqStack &S) S.base=(SElemType *)malloc(MAXSIZE*sizeof(SElemType); if(!S.base)exit(-1); S.top=S.base; S.stacksize=MAXSIZE; 取栈顶元素:SElemType GetTop(SqStack S) if(S.to
3、p=S.base)exit(-1); else return *(S.top-1); 入栈:void Push (SqStack &S, SElemType x) if (S.top-S.base=S.stacksize) error(“溢出”); else *S.top+=x; n出栈:void Pop (SqStack &S, SElemType &x) if(S.top=S.base)error(“栈空,不能删除”);else x= *-S.top; 链栈用动态方式来存储栈可节省空间采用链表存储的栈为链栈链栈由于栈的操作是线性表操作的特例,所以不作详细讨论。a1a
4、2a3an top3.2 栈的应用举例 3.2.1 数制转换 3.2.2 括号匹配的检验 3.2.3 迷宫求解 3.2.4 表达式求解 3.2.2 括号匹配问题算法的设计思想:(1)若是“左括号”,则入栈;(2)若是“右括号”,则有两种情况: a) 若栈空,则表明“右括号”多了,匹配失败; b) 否则,与栈顶元素比较: 若相匹配,则“左括号”出栈; 否则匹配失败。(3)当表达式检验结束时: 若栈空,匹配成功; 否则表明“左括号”多了,匹配失败。算法如下:Status matching(string &exp) int state=1; while(ifront=0; Q-rear=0;
5、n判断队列是否为空:BOOL queue_empty(seqqueue Q) if (Q.front=Q.rear) return TRUE; else return FALSE; n判断队列是否为满:BOOL queue_full(seqqueue Q) if (1+Q.rear) % maxsize=Q.front) return TRUE; else return FALSE; 尾指针的下一个位置是头指针所指位置时为满n入队void Enqueue(seqqueue * Q,elementtype x)if (full(Q) error(“溢出”); else Q-rear=(1+Q-r
6、ear) % maxsize; Q-dataQ-rear=x; 循环队列的运算取队头元素:elementtype queue_front(seqqueue Q,elementtype *x) if (queue_empty(Q) )error(“队空”);else *x=Q.data(Q.front+1)% maxsize); n出队void Outqueue(seqqueue * Q, elementtype *x)if (empty(*Q) )error(“队空,不能出队”); else Q-front=(Q-front+1) % maxsize; *x= Q-dataQ-front; 链
7、队列-存储结构头指针始终指向表头,尾指针始终指向表尾;采用带头节点的链表形式。a1a2anfrontrearlinkqueue类型说明typedef struct node *front,*rear; /仅需要头尾指针即可 linkqueue链队列的运算初始化队列:void init_queue(linkqueue *Q) Q-front=(node *)malloc(sizeof(node); Q-rear=Q-front; Q-front-next=NULL; n取队头元素:void queue_front(linkqueue * Q, elementtype * x); if (empt
8、y(*Q) ) error(“队空,不能取元素”); else *x=Q-front-next-data; n判断队为空:BOOL queue_empty(linkqueue Q) return Q.front=Q.rear;链队列的运算入队:void Enqueue(linkqueue * Q, elementtype x) node *P=(node *)malloc(sizeof(node); P-data=x; P-next=NULL; Q-rear-next=P; Q-rear=P; n出队:void Outqueue(linkqueue * Q, elementtype * x); if (empty(*Q) )error(“队空,不能出队”); else *x=Q-front-next-data; node * u=Q-fron
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自产碎石施工方案
- 河塘回填施工方案
- 闸阀检修施工方案
- 《Unit 2 Wash,brush,clean!》(教学设计)-2024-2025学年人教版PEP(一起)(2024)英语一年级下册
- 整形医院销售培训课件
- 三年级体育上册 出升的太阳(2)教学设计
- 货架铁床工艺品生产项目可行性研究报告写作模板-申批备案
- 打井测量施工方案
- 护理内科学讲解
- 2023年黑龙江省牡丹江市中考历史真题(解析版)
- 钢沉井制造及安装专项施工方案电子
- 虞大明教学实录——《刷子李》
- 第二代身份证号码验证器
- 市场调查与预测复习资料
- 轮扣式模板支撑架专项施工方案
- 施工组织设计双代号时标网络图
- 甘肃省审图机构
- 财政部金融企业不良资产批量转让管理办法(财金[2012]6号)
- 办公室口号大全
- 办公建筑设计规范2019
- 吉林省公务员(参照管理人员)调任(转任)审批表
评论
0/150
提交评论