【數據結構】 棧

棧結構,通俗易懂,特點:先進後出,後進先出。

以下,僅對於棧結構常用的操作進行實現

包括:

        入棧(push),出棧(pop),判空(empty),棧頂元素(GetTop)

#include <iostream>
using namespace std;

template<class T>
class Stack
{
public:
    Stack(T size) // 初始化數組大小
        :top(0)  //棧頂指針
        , _size(size)
    {
        _array = new T[size]; // top指向最後一個元素時,再往下跳會越界,所以多開一個
    }

    ~Stack()
    {
        if (_array)
        {
            delete[] _array;
        }
    }

public:
    void Push(const T val)
    {
        if (top >= _size)
        {
            cout << "overflow" << endl;
            return;
        }
        else
        {
            _array[top] = val;
            top++;
        }
    }

    T Pop()
    {
        T ret;
        if (top < 0)
        {
            cout << "underflow" << endl;
            return -1;
        }
        else
        {
            top--;
            ret = _array[top];
        }
        return ret;
    }

    bool isEmpty()
    {
        return top == 0;
    }

    T Top()
    {
        if (!isEmpty())
        {
            return _array[top - 1];
        }
        else
        {
            cout << "error:stack is empty!" << endl;
        }
    }

    void Show()
    {
        if (isEmpty())
        {
            cout << "stack has no data!" << endl;
            return;
        }
        for (size_t i = 0; i < top; i++)
        {
            cout << _array[i] << " ";
        }
        cout << endl;
    }

private:
    size_t top;
    size_t _size;
    T* _array;
};

void Test()
{
    Stack<int> stk(5);

    stk.Push(1);
    stk.Push(2);
    stk.Push(3);
    stk.Push(4);
    stk.Push(5);

    stk.Show();
    cout << stk.Top() << endl;

    cout << stk.Pop() << endl;
    cout << stk.Pop() << endl;
    cout << stk.Pop() << endl;

    cout << stk.Top() << endl;
    stk.Show();

}

int main()
{
    Test();

    system("pause");
    return 0;
}

棧結構是最簡單的數據結構,很多數據結構都會用到棧結構,所以簡單的棧結構常用的操作需掌握。


若有紕漏,歡迎指正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章