本篇博客只是为复习整理,略微粗浅勿怪。
在写栈前首先明确什么是栈。那么我们先下一个定义。
栈是限定仅在表尾插入和删除的线性表,允许插入和删除的一端称为栈顶,另一端称为栈顶。不含任何数据元素的栈称为空栈。
(教科书定义)
栈的一个重要特性就是后进先出。
举例来说,比如放置在一平面上一叠摞在一起的盘子,最后放上去的是最先被使用的,取放都从最上面,用栈的概念也就是“栈顶”开始。
基本介绍完毕,下面是栈的结构与代码。
栈的基本操作:
1.初始化一个栈。
2.解构栈。
3.将元素压入栈。
4.将元素弹出栈。
5.删除栈中元素。
6.判断栈是否为空。
7.判断栈是否满。(注意在最开始要定义栈的大小)
下面是栈的模板类代码:
#include<iostream>
using namespace std;
const int StackSize=10;
template<class T>
class Stack
{
private:
T data[StackSize];
int top;
public:
Stack(){top=-1;}
~Stack(){};
void Getsize(int a){StackSize=a;}
void Push(T x);
T Pop();
T GetTop()
{
if(top!=-1)
return data[top];
}
int Empty(){return (top!=-1)?1:0;}
void Full()
{
if(top==StackSize-1)
cout<<"栈已满!"<<endl;
else
cout<<"栈未满。"<<endl;
}
};
template<class T>
void Stack<T>::Push(T x)
{
if(top==StackSize-1) throw"shangyi";
data[++top]=x;
}
template<class T>
T Stack<T>::Pop()
{
if(top==-1) throw"xiayi";
int y=data[top--];
return y;
}
int main()
{
Stack<int>s;
int n;
int x;
cout<<"请输入要入栈的元素个数:"<<endl;
cin>>n;
for(int i=0;i<n;i++)
{
cout<<"请输入第"<<i+1<<"个元素"<<endl;
cin>>x;
s.Push(x);
}
s.Full();
cout<<"输出栈内所有元素:"<<endl;
for(int i=0;i<n;i++)
{
cout<<s.Pop()<<" ";
}
cout<<endl;
s.Full();
return 0;
}
运行截图:
未经允许请勿转载。