栈(Stack)

栈(Stack)

1. 栈的概念

1.1 栈的定义
  • 栈是一种特殊的线性表,是一种运算受限的线性表。
  • 栈是后进先出(LIFO,Last In First Out)的线性表。
1.2 栈的逻辑结构和存储表示
  • 栈的逻辑结构和线性表相同。
  • 栈的抽象数据类型有两种典型的存储表示:基于数组的存储表示和基于链表的存储表示。
    (1)基于数组的存储表示实现的栈称为顺序栈,顺序栈可以采用顺序表作为其存储表示,因此,可以在顺序栈的声明中用顺序表定义它的存储空间。
    (2)基于链表的存储表示实现的栈称为链式栈,链式栈可以采用单链表作为其存储表示,因此,可以在链式栈的声明中用单链表定义它的存储空间。
1.3 栈的运算规则
  • 栈中没有任何元素时则成为空栈。
  • 栈可定义为只允许在表的末端进行插入和删除的线性表。允许插入和删除的一端叫栈顶(top),而不允许插入和删除的另一端叫栈底(bottom)。
  • 向一个栈插入新元素称为进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素。
  • 从一个栈删除元素称为出栈或退栈,它是把栈顶元素删除,使其下一个元素成为新的栈顶元素。
  • 设定栈S=( a1,a2,,an ),称最后加入栈中的元素 an 为栈顶。栈中元素按 a1,a2,,an 的顺序进栈。而退栈的顺序相反, an 先退栈,然后到 an1 退栈,最后到 a1 退栈。
  • 栈的模型:
    这里写图片描述

2. 栈的抽象类定义——应用了模板类来描述栈抽象数据类型

  • 文件:Stack.h

    
    #ifndef STACK_H_
    
    
    #define STACK_H_
    
    
    template <class T>
    class Stack
    {
    public:
        Stack(){}                               //构造函数
        virtual ~Stack(){}                      //析构函数
    public:
        virtual void Push(const T& x) = 0;      //新元素x进栈
        virtual bool Pop(T& x) = 0;             //栈顶元素出栈,并将该元素的值保存至x
        virtual bool getTop(T& x) const = 0;    //读取栈顶元素,并将该元素的值保存至x
        virtual bool IsEmpty() const = 0;       //判断栈是否为空
        virtual bool IsFull() const = 0;        //判断栈是否为满
        virtual int getSize() const = 0;        //计算栈中元素个数
        virtual void MakeEmpty() = 0;           //清空栈的内容
    };
    
    
    #endif /* STACK_H_ */
    

参考文献:
[1]《数据结构(用面向对象方法与C++语言描述)(第2版)》殷人昆——第三章
[2]《C/C++常用算法手册》秦姣华、向旭宇——第二章
[3] 百度搜索关键字:栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值