首先是顺序栈的验证实验,建立“顺序栈的验证实验“工程建立头文件 SeqStack.h
#ifndef SeqStack_H
#define SeqStack_H
const int StackSize = 10;
template<class DataType>
class SeqStack
{
public:
SeqStack();
~SeqStack(){}
void Push(DataType x);
DataType Pop();
DataType GetTop();
int Empty();
private:
DataType data[StackSize];
int top;
};
# endif
建立源文件SeqStack.cpp
#include"SeqStack.h"
template<class DataType>
SeqStack<DataType>::SeqStack()
{
top= -1;
}
template<class DataType>
void SeqStack<DataType>::Push(DataType x)
{
if(top==StackSize-1)throw"上溢";
top++;
data[top]=x;
}
template<class DataType>
DataType SeqStack<DataType>::Pop()
{
DataType x;
if(top==-1)throw"下溢";
x = data[top--];
return x;
}
template<class DataType>
DataType SeqStack<DataType>::GetTop()
{
if(top!= -1)
return data[top];
}
template<class DataType>
int SeqStack<DataType>::Empty()
{
if(top== -1)return 1;
else return 0;
}
建立SeqStack_main.cpp
#include<iostream.h>
#include"SeqStack.cpp"
void main()
{
SeqStack<int>S;
if(S.Empty())
cout<<"栈为空"<<endl;
else
cout<<"栈非空"<<endl;
cout<<"对15和10执行压栈操作"<<endl;
S.Push(15);
S.Push(10);
cout<<"栈顶元素为:"<<S.GetTop()<<endl;
cout<<"执行一次出栈操作"<<endl;
S.Pop();
cout<<"栈顶元素为:"<<S.GetTop()<<endl;
}
输出如下
然后是链栈的验证实验
#include<iostream.h>
struct Node
{
int data;
Node *next;
};
class LinkStack
{
public:
LinkStack()
{
top=NULL;
}
~LinkStack();
void Push(int x);
int Pop();
int GetTop()
{
if(top!=NULL)return top->data;
}
bool Empty()
{
if(top==NULL)return 1;
else return 0;
}
private:
Node *top;
};
LinkStack::~LinkStack()
{
Node *p;
while(top!=NULL)
{
p=top;
top=top->next;
delete p;
}
}
void LinkStack::Push(int x)
{
Node *s=new Node;
s->data=x;
s->next=top;
top=s;
}
int LinkStack::Pop()
{
Node *p;
int x;
if(top==NULL)cout<<"Stack is empty"<<endl;
else
{
x=top->data;
p=top;
top=p->next;
delete p;
return x;
}
}
int main()
{
LinkStack s;
cout<<"对5、6和9执行压栈操作"<<endl;
s.Push(5);
s.Push(6);
s.Push(9);
cout<<"栈顶元素为:"<<endl;
cout<<s.GetTop()<<endl;
cout<<"执行一次出栈操作"<<endl;
cout<<s.Pop()<<endl;
cout<<"栈顶元素为:"<<endl;
cout<<s.GetTop()<<endl;
return 0;
}