7.3栈与队列的基本操作.ppt

7.3栈与队列的基本操作.ppt

7.3 栈与队列的基本操作 7.3.1 栈 7.3.1 栈 7.3.1 栈 【例7.8】顺序栈类的定义 顺序栈类的定义 7.3.1 栈 7.3.1 栈 7.3.1 栈 7.3.1 栈 7.3.3 队列 7.3.2 队列 7.3.2 队列 顺序表循环队列类的设计 顺序表循环队列类的设计 顺序表循环队列类的设计 顺序表循环队列类的设计 7.3.2 队列 链队类的设计 链队类的设计 第六单元 OBP—动态内存分配与数据结构 * *  栈和队都是限制存取位置的线性表,既可以由顺序表实现,又可以由链表实现。 7. 3. 1 栈 7. 3. 3  队 列 7. 3. 2 栈的应用(选读) 第六单元 OBP—动态内存分配与数据结构 栈的基本概念:   栈是一种线性表,其元素的插入和删除只能在其一端进行。这个端叫做栈顶(top),对应的另一端叫栈底(bottom)。特点: (1)栈中没有任何元素时,称为空栈。 (2)进栈原则—“后来居上”:最先进栈的压在栈底,依次类推,最后进的处于栈顶。 (3)出栈原则—“后进先出” (LIFO:Last In First Out):最后进栈的最先出栈,而最先进栈的最后出栈。 (4)栈的实现方式:顺序表,称顺序栈;链表,称链栈。 栈的基本操作:  设给定栈s=(a0,a1,……,an-1)。进栈时,最先进栈的a0压在最下面,即栈底,an-1在最上面,即栈顶。而出栈时,顺序相反,最后进栈的an-1最先出栈,而最先进栈的a0最后出栈。参见下图的顺序栈: a0 an-2 …… a1 an-1 bottom 压栈 top top top top top 退栈 顺序栈的操作只与top有关,而与bottom无关! 初始top与bottom同指向栈数据区的下一单元,这样会便于判断空栈。 #include cassert //用于诊断 class Stack { int top; //栈顶(下标) DataType *elements; //指向动态建立的栈 int maxSize; //栈最大容纳的元素个数 public: Stack(const int); //构造函数, top= -1 ~Stack(){delete[ ] elements; elements=NULL;} void Push(const DataType ); //压栈, top++ DataType Pop(); //弹出,top-- DataType GetElem(int); //随机取数据,top不变 void MakeEmpty(){top= -1;} //清空栈 bool IsEmpty() const{return top== -1;} //判栈空 bool IsFull() const{return top==maxSize-1;} //判栈满 void PrintStack(); //输出栈内所有数据 }; 顺序栈类: const成员函数, 只能读类的数据成员,而不能修改类成员数据! Stack::Stack(const int maxs=20) { //默认的栈大小的初始值20 maxSize=maxs; top=-1; elements=new DataType [maxSize]; //建立栈空间 assert(elements!=NULL); //假定未悬空,否则分配失败,结束程序 } void Stack::PrintStack(){ for(int i=0;i=top;i++) coutelements[i]\t; coutendl; } void Stack::Push(const DataType data){ assert(!IsFull()); //栈满则退出程序 elements[++top]=data; //栈顶下标先加1,元素再进栈 } DataType Stack::Pop() { assert(!IsEmpty()); //栈已空则不能退栈,退出程序 return elements[top--]; //返回栈顶元素,同时栈顶下标-1 } DataType Stack:GetElem(int i) { assert(i

文档评论(0)

1亿VIP精品文档

相关文档