C++泛化棧

棧是一種先進後出的數據結構(FILO),這裏使用以前實現的動態數組實現。ios

棧(stack.h)

/*************************************************************************
> File Name       : Stack.h
> Author          : Harold
> Mail            : 2106562095@qq.com
> Github          : www.github.com/Haroldcc
> Created Time    : 2020年03月03日  15時00分16秒
************************************************************************/

#ifndef STACK_H_
#define STACK_H_

#include "arrayList.h"
#include <iostream>

/***** 棧 *****/

/* 棧是一種特殊的鏈表結構,
 * 這裏直接使用數組鏈表提供實現
 */
template <typename T>
class Stack
{
private:
    arrayList<T> list;

public:
    ~Stack() {}
    int size() const;
    bool empty() const;
    void push(const T &element); // 入棧
    void pop();                  // 出棧
    T &top();                    // 獲取棧頂元素
    void clear();

    //void output(std::ostream &out);
};

template <typename T>
int Stack<T>::size() const
{
    return list.size();
}

template <typename T>
bool Stack<T>::empty() const
{
    return list.isEmpty();
}

template <typename T>
void Stack<T>::push(const T &element)
{
    list.add(element);
}

template <typename T>
void Stack<T>::pop()
{
    list.removeByIndex(list.size() - 1);
}

template <typename T>
T &Stack<T>::top()
{
    return list.getElement(list.size() - 1);
}

template <typename T>
void Stack<T>::clear()
{
    list.clear();
}

#endif

測試(testStack.cpp)

/*************************************************************************
> File Name       : testStack.cpp
> Author          : Harold
> Mail            : 2106562095@qq.com
> Github          : www.github.com/Haroldcc
> Created Time    : 2020年03月03日  15時14分31秒
************************************************************************/
#include <iostream>
#include "Stack.h"

int main()
{
    Stack<int> stack;

    stack.push(11);
    stack.push(22);
    stack.push(33);
    stack.push(44);

    std::cout << stack.top() << std::endl;
    stack.pop();

    std::cout << stack.top() << std::endl;
    stack.pop();

    std::cout << stack.top() << std::endl;
    stack.pop();

    std::cout << stack.top() << std::endl;
    stack.pop();

    return 0;
}

輸出

44
33
22
11
相關文章
相關標籤/搜索