自己创建一个顺序存储的栈结构
这里想要强度一点的就是:用模板template来定义一个模板类的格式
template <typename T> class 类名
定义模板类的函数的格式: template <typename T> 函数返回类型 类名<T> :: 函数名{}
#pragma once #include<iostream> using namespace std; template<typename T> class MyStack { public: MyStack(int size); ~MyStack(); bool isEmpty(); bool isFull(); bool pop(); bool push(T value); void traverse(); bool stackClear(); int stackLength(); private: T value;//栈值 T* base;//栈底指针 int* a = new int[maxsize] T top;//栈顶位置 int maxsize;//顺序栈的最大容量 }; template<typename T> MyStack<T>::MyStack(int size) { maxsize = size; base = new T[size]; top = 0;//初始位置为0 } template<typename T> MyStack<T>::~MyStack() { //删除base即可,并且将base指NULL delete[] base; base = NULL; } //判断是否为满 template<typename T> bool MyStack<T>::isFull(){ //top指向的位置是有效元素的上一个位置 return top == maxsize; } //判断是否为空 template<typename T> bool MyStack<T>::isEmpty() { return top == 0; } //弹栈操作 template<typename T> bool MyStack<T>::pop() { //将栈顶元素弹出 需要做的操作其实是将top向下移一下 if (isEmpty()) { //栈已经为空,无元素,则弹出失败 return false; } top--; return true; } //压栈操作 template<typename T> bool MyStack<T>::push(T value) { //将值为value压入栈中 if (isFull()) { cout << "栈已经满了,无法继续添加元素" << endl; return false; } //将值压入 base[top] = value; top++; cout << "值压入成功!" << endl; return true; } //遍历操作 template<typename T> void MyStack<T>::traverse() { for (int i = top - 1; i >= 0; i--) { cout << " " << base[i]; } } //清空栈 template<typename T> bool MyStack<T>::stackClear() { //清空栈,只需要将栈中已经有的元素置为1 top = 0; return true; } //计算栈的有效长度 template<typename T> int MyStack<T>::stackLength() { return top; }以下是简单的测试:
#include<iostream> #include"Stack.h" using namespace std; int main() { MyStack<int> s(10); //入栈操作 s.push(1); s.push(2); s.push(3); s.push(4); s.push(5); s.push(6); s.push(7); s.push(8); s.push(9); s.push(10); s.push(10); cout << "是否为满:"<< s.isFull() << endl; cout << "是否为空:"<< s.isEmpty() << endl; cout << "遍历结果:" << endl; s.traverse(); cout << "弹栈操作:" << s.pop() << endl; cout << "是否为满:" << s.isFull() << endl; cout << "是否为空:" << s.isEmpty() << endl; cout << "遍历结果:" << endl; s.traverse(); cout << "栈的长度是否为:" << s.stackLength()<< endl; cout << "清空栈操作:" << s.stackClear() << endl; cout << "遍历结果:" << endl; s.traverse(); system("pause"); }