堆栈(Stack)是一种相同数据类型数据的集合,并且拥有后进先出的特性(last in first out,有时候简写为LIFO),所有的操作都在堆栈顶端进行。
堆栈具有5种基本操作:
- 创建一个空堆栈 Stack()
- 把数据压入堆栈 Push()
- 从栈顶弹出堆栈 Pop()
- 判断是否为空堆栈 isEmpty()
- 判断堆栈是否已满 isFull()
注意:int的0相当于bool的false 除了0外的其他数字相当于bool的true
#include"pch.h"
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
template <class T>
class Stack
{
public:
int top;
int max_size;
T* data;
public:
Stack(int max_size);
~Stack();
int isEmpty();
int isFull();
int Push(T mydata);
T Pop();
};
template<class T>
Stack<T>::Stack(int max_size)
{
this->max_size = max_size;
top = -1;
data = new T[max_size];
}
template<class T>
Stack<T>::~Stack()
{
delete[] data;
}
template<class T>
int Stack<T>::isEmpty()
{
if (top == -1)
return 1;
else
return 0;
}
template<class T>
int Stack<T>::isFull()
{
if (top >= max_size - 1)
return 1;
else
return 0;
}
template<class T>
int Stack<T>::Push(T mydata)
{
if (!isFull())
{
data[++top] = mydata;
return 1;
}
else
return 0;
}
template<class T>
T Stack<T>::Pop()
{
if (!isEmpty())
return data[top--];
}
int main() //主函数中测试
{
Stack<int> a(5);
a.Push(5);
a.Push(4);
a.Push(3);
a.Push(2);
a.Push(1);
for (int i = 0; !a.isEmpty(); i++)
{
printf("%d" ,a.Pop());
}
}