下载此文档

第7章 图 - 湖南大学软件学院.ppt


文档分类:高等教育 | 页数:约60页 举报非法文档有奖
1/60
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/60 下载此文档
文档列表 文档介绍
第三章栈和队列
栈的定义及基本运算
栈(Stack)是限制在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)。当表中没有元素时称为空栈。

假设栈S=(a0,a1,a2,…an),则a0称为栈底元素,an为栈顶元素。栈中元素按a0,a1,a2,…an的次序进栈,退栈的第一个元素应为栈顶元素。换句话说,栈的修改是按后进先出的原则进行的。因此,栈称为后进先出表(LIFO)。
a0
a1
a2
a3
an-1
· · ·
退栈(删)
进栈(插)
顺序栈
由于栈是运算受限的线性表,因此线性表的存储结构对栈也适应。
栈的顺序存储结构简称为顺序栈,它是运算受限的线性表。因此,可用数组来实现顺序栈。因为栈底位置是固定不变的,所以可以将栈底位置设置在数组的两端的任何一个端点;栈顶位置是随着进栈和退栈操作而变化的,故需用一个整型变量top
例、一叠书或一叠盘子。
a n
a n-1
a2
a1
……
栈顶
栈底
top
6 5 4 3 2 1 0
top
-1
6 5 4 3 2 1 0
顺序栈类的实现
template <class Elem> class AStack:public Stack<Elem>{
private:
int size;
int top;
Elem *listArray;
public:
AStack(int sz=DefaultListSize)
{size=sz; top=0; listArray=new Elem[size];}
~AStack() {delete [] listArray;}
void clear() { top=0;}
顺序栈类的实现
bool push(const Elem& item){
if(top==size) return false;
else{listArray[top++]=item; return true;}
}
bool pop(Elem &it){
if(top==0) return false;
else {it=listArray[--top]; return true;}
}
bool topValue(Elem &it) const{
if(top==0) return false;
else {it=listArray[top-1]; return true;}
}
顺序栈类的实现
int length() const {return top;}
};
链栈
栈的链式存储结构称为链栈,它是运算是受限的单链表,,故链表没有必要像单链表那样附加头结点。栈顶指针就是链表的头指针。

第7章 图 - 湖南大学软件学院 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数60
  • 收藏数0 收藏
  • 顶次数0
  • 上传人012luyin
  • 文件大小228 KB
  • 时间2017-10-18
最近更新