数据结构 (c++)笔记7 (栈)

栈(stack) 是存放数据对象的一种特殊容器,其中的数据元素按线性的逻辑次序排列,故
也可定义首、末元素。 不过, 尽管栈结构也支持对象的插入和删除操作,但其操作的范围仅限于栈的某一特定端。也就是说, 若约定新的元素只能从某一端插入其中, 则反过来也只能从这一删除已有的元素。 禁止操作的另一端,称作盲端。
在这里插入图片描述
栈顶: 栈中可操作的一端
栈底:栈中不可操作的一端

栈的接口

在这里插入图片描述
栈中元素接受操作的次序必然始终遵循所谓“后进先出” (last-in-first-out, LIFO) 的规律: 从栈结构的整个生命期来看,更晚(早)出栈的元素, 应为更早(晚)入栈者; 反之, 更晚(早) 入栈者应更早(晚) 出栈。

stack 模板类

栈可作为序列的特例,因此,只要将栈作为向量的派生类,即可利用C++的继承机制,基于定义的向量模板类实现栈的结构。

#include "Vector/Vector.h" //以向量为基类,派生出栈模板类
template <typename T> class Stack: public Vector<T> {
    
     //将向量的首/末端作为栈底/顶
public: //size()、empty()以及其它开放接口,均可直接沿用
   void push ( T const& e ) {
    
     insert ( e ); } //入栈:等效于将新元素作为向量的末元素插入
   T pop() {
    
     return remove ( size() - 1 ); } //出栈:等效于删除向量的末元素
   T& top() {
    
     return ( *this ) [size() - 1]; } //取顶:直接返回向量的末元素
};

注:也可直接从LIst模板类派生出stack类

猜你喜欢

转载自blog.csdn.net/jlm7689235/article/details/108139875
今日推荐