网站大量收购闲置独家精品文档,联系QQ:2885784924

第3章栈与队列详解.pptx

  1. 1、本文档共174页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1 第三章 栈与队列 数据结构电子教案 殷人昆 王 宏 栈 ( Stack ) 队列 ( Queue ) 栈的应用:算术表达式求值(略) 自顶向下、逐步分解的策略 2 栈 队列 栈的应用:表达式求值 栈的应用:递归 队列的应用:打印杨辉三角形 优先级队列 第三章 栈与队列 3 只允许在一端插入和删除的线性表 允许插入和删除 的一端称为栈顶 (top),另一端称 为栈底(bottom) 特点 后进先出 (LIFO —Last In First Out) 栈 ( Stack ) 退栈 进栈 a0 an-1 an-2 ? top bottom 4 // Stack.h 栈类模板头文件 template class E // E是栈中每个元素的类型 class Stack { //栈类模板(抽象基类,无法实例化对象) public://栈定义所有派生子类必须原样重写的虚函数 Stack(){ }; //构造函数 virtual bool Push(E x) = 0; //进栈:元素x→新栈顶 virtual bool Pop(E x) = 0; //出栈:栈顶元素→x virtual bool getTop(E x) const=0;//取栈顶元素→x virtual bool IsEmpty() = 0; //判栈空 virtual bool IsFull() = 0; //判栈满 };//项目:Push element to or pop from the sequential stack 栈的抽象数据类型 5 // SeqStack.h 顺序栈类模板头文件 // 顺序栈继承栈类(抽象基类),必须与基类完全 // 相同格式定义全部虚函数才能实例化定义对象 #include assert.h #include iostream using namespace std; #include stack.h template class E class SeqStack : public StackE { 栈的数组存储表示 — 顺序栈 6 protected: //顺序栈由若干栈元素组成 E* elements; //栈元素表(动态分配的首元素地址) int top; //栈顶指针(栈顶元素的下标) int maxSize; //栈最大容量(栈可容纳的元素个数) void overflowProcess(); //栈的溢出处理 public: SeqStack(int sz =10); //构造函数,默认栈容量为10 ~SeqStack() { delete []elements; } //析构函数 bool Push(E x); //若栈不满:栈顶增 1,x→新栈顶 bool Pop(E x); //出栈:栈顶元素→x,栈顶减 1 bool getTop(E x) const; //取栈顶元素→x,栈顶不变 bool IsEmpty() const { return top == -1; } bool IsFull() const { return top == maxSize-1; } }; 7 top=-1 空栈 top=0 top=1 top=4 top=4 top=3 a 进栈 b 进栈 a a b a b c d e e 进栈 a b c d e f 进栈溢出 a b d e e 退栈 c 8 top=-1 c 退栈 b 退栈 a b a a 退栈 空栈 top=2 a b d d 退栈 c top=1 a b c top=0 top=-1 9 template class E //构造函数 SeqStackE::SeqStack(int sz) : top(-1) , maxSize(sz) { //分配栈元素存放数组,数组大小为maxSize elements = new E[maxSize]; } 10 顺序栈的操作 //保护函数:当栈满则执行扩充栈存储空间处理 template class E void SeqStackE::overflowProcess() { //创建原来2倍大小的存储数组 E* newArray = new E[2*maxSize]; //原栈元素逐个复制到新数组 for (int i = 0; i = top; i++) newArray[i] = elements[i]

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档