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