zoukankan      html  css  js  c++  java
  • 栈类模板

    栈是只能从一端访问的线性群体,可以访问的这一端称栈顶,另一端称栈底。栈是一种后进先出的数据结构。

    栈示意图

    栈的应用举例——表达式处理

    栈的基本状态

    • 栈空
    • 栈满
    • 一般状态

    栈空

    • 栈中没有元素(以数组容纳的栈为例)

    栈满

    • 栈中元素个数达到上限(以数组容纳的栈为例)

    一般状态

    • 栈中有元素,但未达到栈满状态(以数组容纳的栈为例)

    栈的基本操作

    • 初始化
    • 入栈
    • 出栈
    • 清空栈
    • 访问栈顶元素
    • 检测栈的状态(满、空)

    例9-8 栈类模板

    //Stack.h
    #ifndef STACK_H
    #define STACK_H
    #include <cassert> 
    template <class T, int SIZE = 50>
    class Stack {
    private:
        T list[SIZE];
        int top;
    public:
        Stack();
        void push(const T &item);
        T pop();
        void clear();
        const T &peek() const;
        bool isEmpty() const;
        bool isFull() const;
    };
    
    //模板的实现
    template <class T, int SIZE>
    Stack<T, SIZE>::Stack() : top(-1) { }   
    template <class T, int SIZE>
    void Stack<T, SIZE>::push(const T &item) {  
        assert(!isFull());  
        list[++top] = item; 
    }
    template <class T, int SIZE>
    T Stack<T, SIZE>::pop() {   
        assert(!isEmpty()); 
        return list[top--]; 
    }
    template <class T, int SIZE>
    const T &Stack<T, SIZE>::peek() const {
        assert(!isEmpty()); 
        return list[top];   //返回栈顶元素
    }
    template <class T, int SIZE>
    bool Stack<T, SIZE>::isEmpty() const {
        return top == -1;
    }
    template <class T, int SIZE>
    bool Stack<T, SIZE>::isFull() const {   
        return top == SIZE - 1;
    }
    
    template <class T, int SIZE>
    void Stack<T, SIZE>::clear() {  
        top = -1;
    }
    
    #endif  //STACK_H
  • 相关阅读:
    利用正則表達式排除特定字符串
    js面向对象编程:this究竟代表什么?
    js调用父级frame中的方法
    Cocos2d-x动画工具类
    BZOJ 2466 中山市选2009 树 高斯消元+暴力
    Android Intent Scheme URLs攻击
    XML基础(一)
    【Life】 Never Too Late, Just Do it Better!
    代理模式
    HDU--Elevator(水题)
  • 原文地址:https://www.cnblogs.com/beautiful-code/p/4925428.html
Copyright © 2011-2022 走看看