#include<iostream>
using namespace std;
const int Stacksize=10;
template<class T>
class Seqstack{
public:
Seqstack(){top=-1;}
~Seqstack(){}
void Push(T x);
T Pop();
T Gettop()
{if(top!=-1) return data[top];}
int Empty()
{return(top==-1);}
int Full()
{return(top==Stacksize-1);}
void Print();
private:
T data[Stacksize];
int top;
};
template<class T>
void Seqstack<T>::Push(T x)
{
if(top==Stacksize-1) throw"栈已满,停止进栈";
++top;
data[top]=x;
}
template<class T>
T Seqstack<T>::Pop()
{
if(top==-1) throw"栈为空!出栈失败";
int x=data[top];
top--;
return x;
}
template<class T>
void Seqstack<T>::Print()
{
if(top==-1) throw"栈内无元素!";
for(int i=0;i<top;i++)
{cout<<data[i]<<" ";}
cout<<endl;
}
int main()
{
cout<<"创建一个顺序栈:"<<endl;
Seqstack<int> s;
if(s.Empty())
cout<<"栈为空"<<endl;
else if(s.Full())
cout<<"栈已满"<<endl;
else
cout<<"栈中已有元素,且栈未满"<<endl;
cout<<"向栈中分别插入1,2,3,4,5,6,7,8,9:"<<endl;
s.Push(1);
s.Push(2);
s.Push(3);
s.Push(4);
s.Push(5);
s.Push(6);
s.Push(7);
s.Push(8);
s.Push(9);
cout<<"完成入栈操作!此时栈中元素有:"<<endl;
s.Print();
cout<<"取出栈顶元素为:"<<s.Gettop()<<endl;
s.Pop();
cout<<"执行完一次出栈操作后的结果为:"<<endl;
s.Print();
return 0;
}
一、实验目的
1、 熟练掌栈的结构特点,掌握栈的顺序存储结构和实现。
2、 学会使用栈解决实际问题。
二、实验内容
1、自己确定结点的具体数据类型和问题规模:
2、分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。
三、实验结果截图
四、实验心得
初次进行栈相关的实现操作,这次选择的是简单的几个数据的进栈和出栈的操作实现。从自己亲自的编码实现功能中发现自己所以为的“对理论知识大概理解了”其实是自己很大的错误认识,没有实践过真的没想到自己对知识的掌握程度是那么地低。编写程序的时候对栈的一些实现语句的构成及运行原理其实都还很模糊,需要花较长的时间和较多的途径去理解和编译。
其中,自己的这个程序其实还存在一些需要改善的地方,但是由于自己的认识有限,暂时也只能做到这个程度了,希望经过接下来的接触和学习,可以自行将自己的程序完善。