栈是基本的数据结构之一,利用一维数组或链表作为储存结构,实现***入栈***,出栈,读取栈顶元素 和 判断栈是否为空 等操作。
与线性表最大的不同之处是,栈只允许在一端进行插入和删除操作。
顺序栈的数据结构很简单,变量top用来记录栈顶位置,初始化为-1,数组data用来储存数据。
template<typename T>
class seqStack
{
T data[MAX_SIZE];
int top;
public:
seqStack();
~seqStack() {}
void Push(T Data);
void Pop();
T Top();
bool isEmpty();
};
接下来是具体的代码
#include<iostream>
using namespace std;
const int MAX_SIZE = 100;
template<typename T>
class seqStack
{
T data[MAX_SIZE];
int top;
public:
seqStack();
~seqStack() {}
void Push(T Data);//入栈
void Pop();//出栈
T Top();//读取栈顶元素
bool isEmpty();//判断栈是否为空
};
template<typename T>
seqStack<T>::seqStack()//构造函数,初始化top和顺序栈
{
top = -1;
for(int i=0;i<MAX_SIZE;i++)
data[i]=0;
}
template<typename T>
void seqStack<T>::Push(T Data)
{
if (top == MAX_SIZE)
{
cout << "上溢" << endl;
return;
}
top++;
data[top] = Data;
}
template<typename T>
void seqStack<T>::Pop()
{
if (top == -1)
{
cout << "栈空" << endl;;
return;
}
cout << data[top] << endl;
top--;
}
template<typename T>
T seqStack<T>::Top()
{
if (top == -1)
{
cout << "栈空" << endl;;
return -1;
}
return data[top];
}
template<typename T>
bool seqStack<T>::isEmpty()
{
if (top == -1)
return true;
else
return false;
}
int main()
{
seqStack<int> a;
a.Push(1);
a.Push(2);
a.Push(3);
cout << a.Top() << endl;
a.Pop();
cout << a.Top() << endl;
}