C++泛化栈

栈是一种先进后出的数据结构(FILO),这里使用之前实现的动态数组实现。

栈(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
posted @ 2020-03-07 21:44  HaroldC  阅读(156)  评论(0编辑  收藏  举报