一、实验目的
1、 熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。
2、 学会使用栈和队列解决实际问题。
二、实验内容
确定结点的具体数据类型和问题规模:
建立一个顺序栈,实现栈的压栈和出栈操作。
三、源代码
#SeqStack.h文件
const int StackSize = 10;
template<class T>
class SeqStack
{
public:
SeqStack(); //构造函数,初始化一个空栈
~SeqStack(); //析构函数为空
void Push(T x);//入栈操作,将元素X入栈
T Pop(); //出栈操作,将栈顶元素弹出
T GetTop();//取栈顶元素
int Empty();//判断栈是否为空
void PrintStack(); //遍历栈喔
private:
T data[StackSize]; //存放栈元素的数组
int top;//栈顶指针,为栈顶元素在数组中的下标
};
#SeqStack.cpp文件
#include"SeqStack.h"
template<class T>
SeqStack<T>::SeqStack()
{
top = -1;
}
template<class T>
SeqStack<T>::~SeqStack()
{
}
template<class T>
void SeqStack<T>::Push(T x)
{
if (top == StackSize - 1)
throw "上溢";
data[++top] = x;
}
template<class T>
T SeqStack<T>::Pop()
{
if (top == -1)
throw "下溢";
top--;
return data[top];
}
template<class T>
T SeqStack<T>::GetTop()
{
if (top != -1)
return data[top];
}
template<class T>
int SeqStack<T>::Empty()
{
if (top == -1)
return 1;
else
return 0;
}
template<class T>
void SeqStack<T>::PrintStack()
{
for (int i = top; i>=0; i--)
{
cout << data[i] << " ";
}
cout << endl;
}
源.cpp文件
#include"SeqStack.cpp"
#include<iostream>
using namespace std;
int main(void)
{
SeqStack<int> s1;
s1.Push(5);
s1.Push(7);
s1.Push(9);
cout << "该顺序栈从栈顶到栈底的顺序为:";
s1.PrintStack();
cout<<"该顺序栈栈顶元素为:"<<s1.GetTop()<<endl;
cout <<"该栈是否为空:"<< s1.Empty() << endl;
s1.Pop();
cout << "出栈一个元素后,该顺序栈从栈顶到栈底的顺序为:";
s1.PrintStack();
system("pause");
return 0;
}
实验截图如下:
四、实验心得
顺序栈的实验蛮简单的,很快就能完成,没遇到什么挑战。