南京邮电大学数据结构A第3章概论

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.1 堆栈
3.1.2 栈的顺序表示 1. 栈的顺序表示法
一维数组s存储栈中元素, maxTop+1为最大允许容量, top指示栈顶, top==-1表示空栈, top==maxTop表示栈满。
S=(a0,a1,…,an-1)
maxTop

n-1 an-1
top


1 a1 0 a0
栈s
图3-2 顺序栈
3.1 堆栈
3.1.2 栈的顺序表示
2. 顺序栈类
template<class T>
class SeqStack:public Stack<T> { public:
maxTop

SeqStack(int mSize); ~SeqStack(){delete []s;}
n-1 an-1
4. 在顺序存储表示下实现栈上定义的操作
(1)取栈顶元素
template<class T> bool SeqStack<T>::Top(T &x)const {
if(IsEmpty()) { //空栈处理 cout<<"Empty"<<endl; return false;
} x=s[top]; return true; }

n-1 an-1
top


private: int maxTop; int top; T *s;
}
1 a1 0 a0
栈s
图3-2 顺序栈
3.1 堆栈
3.1.2 栈的顺序表示
3. 动态一维数组描述顺序栈类
构造函数
template<class T> SeqStack<T>::SeqStack(int mSize) {
2. 栈的抽象数据类型
ADT Stack { 数据:
0个或多个元素的线性序列(a0,a1,...,an-1), 其最大允许长度为 MaxStackSize。其插入和删除运算都限制在同一端进行,并遵循 LIFO原则。 运算: Create(): 建立一个空栈。 Destroy(): 撤消一个栈。 IsEmpty():若栈空,则返回true; 否则返回 false。 IsFull(): 若栈满,则返回true; 否则返回 false。 Top(x): 返回栈顶元素。若操作成功,则返回true;否则返回false。 Push(x): 在栈顶插入元素x。 Pop(): 从栈中删除栈顶元素。 Clear(): 清除堆栈中全部元素。 }
maxTop=mSize-1; s=new T[mSize]; top=-1; }
析构函数
SeqStack<T>::~SeqStack(int MaxSize) {
delete [] s; }
maxBaidu Nhomakorabeaop

n-1 an-1
top


1 a1 0 a0
栈s
图3-2 顺序栈
3.1 堆栈
3.1.2 栈的顺序表示
maxTop

n-1 an-1
top


1 a1 0 a0
栈s
图3-2 顺序栈
3.1 堆栈
3.1.2 栈的顺序表示
4. 在顺序存储表示下实现栈上定义的操作
(2)进栈(压入)
template<class T> bool SeqStack<T>::Push(T &x) {
if(IsFull()) { //溢出处理 cout<<"Overflow"<<endl; return false;
3.1 堆栈
3.1.1 堆栈抽象数据类型
3. 栈的C++模板抽象类
程序3-1 堆栈的C++类
#include <iostream.h> template <class T> class Stack { public:
virtual bool IsEmpty() const=0; virtual bool IsFull() const=0; virtual bool Top(T &x) const=0; virtual bool Push(T x)=0; virtual bool Pop()=0; virtual void Clear()=0; };
堆栈是后进先出(Last In First Out——LIFO)的动态线 性数据结构。
AB C
堆栈工作的演示
3.1 堆栈
3.1.1 堆栈抽象数据类型 1. 堆栈的定义
同时,堆栈也是是后进先出(Last In First Out——LIFO) 的动态线性数据结构。
堆栈工作的演示
C
B
A
3.1 堆栈
3.1.1 堆栈抽象数据类型
top
bool IsEmpty()const{ return (top==-1); }


bool IsFull()const
{ return(top==MaxTop); }
bool Top(T &x)const; bool Push(T x); bool Pop();
1 a1 0 a0
void Clear() {top=-1;}
数据结构A ·第3章
第3章 堆栈和队列
引言
堆栈和队列也是最常见的数据结构,在算法 设计中经常使用,它们在逻辑上同线性表一样, 都是线性结构,差别在于:线性表可以在表的任 意位置插入和删除元素,而堆栈和队列只能在表 的端点插入和删除元素。
第3章 堆栈和队列
内容提要
1、定义堆栈与队列抽象数据类型 2、讨论堆栈与队列的顺序表示方法 3、讨论堆栈与队列的链接表示方法 4、以表达式计算为例讨论堆栈的应用 5、介绍递归的概念和递归算法
} s[++top]=x; return true; }
maxTop

n-1 an-1
top


1 a1 0 a0
栈s
图3-2 顺序栈
3.1 堆栈
3.1.2 栈的顺序表示
栈s
private: int top; //总是指向栈顶元素
图3-2 顺序栈
int maxTop;
T *s;
}
3.1 堆栈
3.1.2 栈的顺序表示
3. 动态一维数组描述顺序栈类
template<class T> class SeqStack:public Stack<T> { public:
……
maxTop
3.1 堆栈
堆栈(简称栈)的示意图 S=(a0,a1,…,an-1)
a0 a1 … ai … an-1
bottom
top
图3-1 栈的示意图
入栈 出栈
课堂提要
第3章 堆栈和队列 3.1 堆栈 3.2 队列 3.3 表达式的计算 3.4 递归
3.1 堆栈
3.1.1 堆栈抽象数据类型 1. 堆栈的定义
相关文档
最新文档