From 45febe38136ea415f7d6039cadb6a992863d2f61 Mon Sep 17 00:00:00 2001 From: e2hang <2099307493@qq.com> Date: Mon, 21 Jul 2025 00:25:13 +0800 Subject: [PATCH] UNFINISHED --- Stack/arrayStack/arraystack.h | 47 +++++++++++++++++++++++++++++++++++ Stack/arrayStack/stack.h | 12 +++++++++ 2 files changed, 59 insertions(+) create mode 100644 Stack/arrayStack/arraystack.h create mode 100644 Stack/arrayStack/stack.h diff --git a/Stack/arrayStack/arraystack.h b/Stack/arrayStack/arraystack.h new file mode 100644 index 0000000..5e43c81 --- /dev/null +++ b/Stack/arrayStack/arraystack.h @@ -0,0 +1,47 @@ +#pragma once +#include "stack.h" +#include + +template +class arrayStack : public Stack { +private: + T* stack; + int stackTop; + int length; +public: + arrayStack(int initialCapacity = 10); + virtual ~Stack() { delete[] stack; } + + virtual bool empty() const override { return stackTop == -1; } + virtual int size() const override { return stackTop + 1; } + virtual T& top() override; + virtual void pop() override; + virtual void push(const T& theElement) override; +}; + +template +arrayStack::arrayStack(int initialCapacity) { + length = initialCapacity; +} + + +template +T& arrayStack::top() { + if (stackTop == -1) throw std::invalid_argument("No Element in Stack"); + return stack[stackTop]; +} + +template +void arrayStack::pop() { + if (stackTop == -1) throw std::invalid_argument("Empty Stack"); + if constexpr (!std::is_trivially_destructible::value) { + stack[stackTop].~T(); // 只有在 T 有析构函数时才调用 + } + stackTop--; +} + +template +void arrayStack::push(const T& theElement) { + +} + diff --git a/Stack/arrayStack/stack.h b/Stack/arrayStack/stack.h new file mode 100644 index 0000000..0ae7088 --- /dev/null +++ b/Stack/arrayStack/stack.h @@ -0,0 +1,12 @@ +#pragma once + +template +class Stack { +public: + virtual ~Stack(); + virtual bool empty() const = 0; + virtual int size() const = 0; + virtual T& top() = 0; + virtual void pop() = 0; + virtual void push(const T& theElement) = 0; +}; \ No newline at end of file