武汉做企业网站/如何自己开发软件app
顺序栈
-
特点:先进后出、后进先出
-
栈底、栈顶
-
栈的操作
-
Push 将数据压入堆栈(stack[++top] = item;)
-
Top 栈顶位置
-
Pop 删除栈顶位置的数据
-
IsEmpty 判断栈是否为空,即判断top是不是-1
-
//创建头函数 MyStack.h#ifndef _MYSTACK_H
#define _MYSTACK_H#include "MyUtil.h"template<class T>
class MyStack {
public:MyStack(int stackCapacity = 10);~MyStack();bool IsEmpty() const;T& Top() const;void Push(const T& item);void Pop();
private:T* stack;int top;int capacity;//数组的大小
};template<class T>
void MyStack<T>::Pop() { //删除栈顶的数据if (IsEmpty()) throw"Stack is empty.Cannot delete.";//top--;stack[top--].~T();
}template<class T>
inline bool MyStack<T>::IsEmpty() const { //栈是否为空return top == -1;
}template<class T>
inline T& MyStack<T>::Top() const { //返回栈顶的数据if (IsEmpty()) throw"Stack is empty";return stack[top];
}template<class T>
MyStack<T>::MyStack(int stackCapacity) :capacity(stackCapacity) { //构造函数if (capacity < 1)throw"stack capacity must be >0";stack = new T[capacity];//新建一个具有动态大小的数组top = -1;
}template<class T>
MyStack<T>::~MyStack() { //析构函数delete[] stack; //删除动态数组stack
}template<class T>
void MyStack<T>::Push(const T& item) { //Push函数,将item压入堆栈if (top == capacity - 1) {Changesize1D(stack, capacity, 2 * capacity);capacity *= 2;}stack[++top] = item;
}#endif//创建头函数 MyUtil.h#ifndef _MYUTIL_H
#define _MYUTIL_H
#include<math.h>
using namespace std;template<class T>
void Changesize1D(T*& a, const int oldSize, const int newSize);///数组尺寸放大一倍template<class T>
void Changesize1D(T*& a, const int oldSize, const int newSize) {if (newSize < 0) throw"New lenth must be >=0";T* temp = new T[newSize];//int number = min(oldSize, newSize);int number = 0;if (oldSize > newSize) number = newSize;else number = oldSize;copy(a, a + number, temp);delete[] a;a = temp;
}
#endif//main.cpp 主函数,用来测试#include<iostream>
#include"MyStack.h"
#include "MyUtil.h"
using namespace std;class Dog {};int main() {MyStack<string> myStringStack;MyStack<Dog> dogStack;MyStack<int> st(200);st.Push(99);st.Push(22);st.Push(18); st.Push(67);cout << st.Top() << endl;st.Pop();cout << st.Top() << endl;st.Pop();cout << st.Top() << endl;st.Pop();cout << st.Top() << endl;cout << "Test!" << endl;return 0;
}