顺序栈C++实现
myStack.h
#pragma once #include<iostream> using namespace std; #define MAXSIZE 100 #include<string> template<typename T> class myStack { public: //栈的初始化 myStack(); myStack(const myStack& s); //判断栈是否为空 bool isEmpty(); //求栈的长度 int size(); //获取栈顶元素 T topValue(); //打印栈中元素(逆序) void printElem(); //清空栈 void clear(); //入栈 void push(T data); //出栈 void pop(); //栈销毁 ~myStack(); //运算符重载 myStack<T>& operator=(myStack<T>& ms); private: T *base; T *top; int stacksize; }; //=运算符重载 template<typename T> myStack<T>& myStack<T>::operator=(myStack<T>& ms) { ms.top -= ms.stacksize; for (int i = 0; i < ms.stacksize; i++) { *top = *ms.top; ms.top++; top++; } this->stacksize = ms.stacksize; return *this; } //栈的初始化 template<typename T> myStack<T>::myStack() { base = new T[MAXSIZE]; top = base; stacksize = 0; } template<typename T> myStack<T>::myStack(const myStack& s) { base = new T[MAXSIZE]; top = base; T *temp; temp = s.top; temp -= s.stacksize; for (int i = 0; i < s.stacksize; i++) { *top = *temp; temp++; top++; } this->stacksize = s.stacksize; } //判断栈是否为空 template<typename T> bool myStack<T>::isEmpty() { if (base == top) return true; else return false; } //求栈的长度 template<typename T> int myStack<T>::size() { return stacksize; } //获取栈顶元素 template<typename T> T myStack<T>::topValue() { return *(top - 1); } //打印栈中元素(逆序) template<typename T> void myStack<T>::printElem() { if (!isEmpty()) { for (int i = 1; i <= stacksize; i++) { cout << *(top - i) << " "; } cout << endl; } else { cout << "栈为空!" << endl; } } //清空栈 template<typename T> void myStack<T>::clear() { stacksize = 0; top = base; cout << "清楚成功\n"; } //入栈 template<typename T> void myStack<T>::push(T data) { if (top - base != MAXSIZE) { *top++ = data; stacksize++; cout << "添加成功\n"; } else { cout << "栈已满,插入失败!" << endl; } } //出栈 template<typename T> void myStack<T>::pop() { top--; stacksize--; cout << "出栈成功\n"; } //栈销毁 template<typename T> myStack<T>::~myStack() { delete[] base; }