目录
? ? ? ? stack和queue接口函数很少,只要大家多敲一两遍,一定能熟练掌握的。所以大家要多熟悉stack和queue的概念,只要你熟悉了它们的概念,运用起来不是问题。
????????栈(stack):是一种特殊的线性表,只允许固定的一端进行插入和删除操作。进行插入和删除的一端叫做栈顶,另一端叫做栈顶。栈中的数据元素遵守后进先出原则LIFO(Lats In Fast Out)。
? ? ? ? 压栈:栈的插入操作,也叫入栈/进栈,压栈操作在栈顶进行的。
? ? ? ? 出栈:栈的删除操作,也叫弹栈,出栈操作也是在栈底进行的。
? ? ? ??
? ? ? ? 从上面这个图中可以看出来,数据元素从栈顶进入栈底,出数据时,先出栈顶的元素,只有栈顶元素出完,才能出栈底元素。
? ? ? ? 生活中有很多案例,例如子弹入弹夹,当我们射击的时候,也是弹夹顶端的子弹先出。
? ? ? ? 当然这里也只是简单的说一下什么是栈(stack),如果你对栈这个数据结构很感兴趣,有时间可以阅读下面这篇文章,用C语言模拟实现栈,帮助你更好理解使用STL中的stack。
数据结构入门————栈和队列(C语言/零基础/小白/新手+模拟实现+例题讲解)-CSDN博客
? ? ? ? 下面的接口介绍,都是先展示函数原型,再展示应用代码。
stack<T> s;? ? ? ? ? ? ? ? ? ? ? ? // 默认构造,采用模板类实现
stack<const stack& s>;? ? ? ? //拷贝构造函数
stack<int> s1;
stack<int> s2(s1);
stack& operator=(const stack& s);? ? ? ? //重载了运算符=
stack<int> s1;
stack<int> s2;
s2 = s1;
? ? ? ? 这里为了方便理解,这里都是用int数据类型,也就是存放的数据都是int类型,当然也可以是别的内置数据类型,或者自定义的数据类型。
push(value);? ? ? ? //向栈顶添加元素
pop();? ? ? ? //删除栈顶元素
top();? ? ? ? //返回栈顶元素
empty();? ? ? ? //判断栈是否为空
size();? ? ? ? ? ?//返回栈的大小
? ? ? ? 这面的这些接口非常简单,相信阅读中文你也能熟练运用,所以我们就用一个小的例题,将这些接口全部运用一下,例如:打印9~0这10个数字
stack<int> s;
for(int i =0;<10;i++)
{
s.push(i);
}
cout<<"size = "<<s.size()<<endl; //打印一下元素个数
while(!s.empty())
{
cout<<s.top();
s.pop();
}
? ? ? ? 当使用栈中数据时,必须出栈,这是这个数据结构的特性。
????????队列(queue):也是一种特殊的线性表,要求只能一端进行插入操作,另一端进行删除操作,遵循先入先出原则FIFO(First In First Out)。
? ? ? ? 入队列:进行插入的一端叫做队头。
? ? ? ? 出队列:进行删除的一端叫队尾。
? ? ? ? 这里同样简单介绍一下什么是队列,如果想要深入理解,模拟实现相关代码,可以阅读下面这篇文章:
数据结构入门————栈和队列(C语言/零基础/小白/新手+模拟实现+例题讲解)-CSDN博客
? ? ? ? 这里我们同样先展示函数原型,在展示代码应用,最后运用例题:打印0~9这10个数字,运用所有接口。
queue<T> que;? ? ? ? //默认构造
queue(const queue& que);? ? ? ? //拷贝构造
queue<int> q1;
queue<int> q2(q1);
queue& operator=()const queue& que)? ? ? ? //重载了等号操作符
queue<int> q1;
queue<int> q2;
q2 = q1;
push(value);? ? ? ? //往队尾添加元素
pop();? ? ? ? ? ? ? ? ? //在队头删除第一个元素
back();? ? ? ? ? ? ? ? //返回第一个元素
front();? ? ? ? ? ? ? ? //返回最后一个元素
empty();? ? ? ? //判断栈是否为空
size();? ? ? ? //返回栈的大小
? ? ? ? 这里我们就来用queue实现打印0~9的10个数字:
queue<int> q;
for(int i=0;i<10;i++)
{
q.push(i);
}
if(q.empty)
{
cout<<"插入失败";
}
else
{
cout<<"插入成功";
}
cout<<"size = "<<q.size()<<endl;
while(!q.empty())
{
cout<<q.front<<" ";
q.pop();
}