#ifndef LINKEDSTACK_H #define LINKEDSTACK_H #include "LinkedList.h" #include "Stack.h" #include "utility" #include namespace Kylin { template class LinkedStack : public Stack { public: LinkedStack() = default; LinkedStack(LinkedStack &&other) : m_list(std::move(other.m_list)) {} LinkedStack(std::initializer_list init) { for (auto &value : init) push(value); } virtual void push(const T &value) { m_list.insert(0, value); } T pop() final { if (m_list.size() <= 0) THROW_EXCEPTION(InvalidOperationException, "There is no element in stack..."); auto value = m_list[0]; m_list.removeAt(0); return value; } virtual T &top() { return m_list[0]; } virtual void clear() { m_list.clear(); } virtual size_t size() const { return m_list.size(); } private: LinkedList m_list; }; } // namespace Kylin #endif // LINKEDSTACK_H