掌握STL中stack和queue的用法(零基础/小白,全方面了解)

发布时间:2023年12月18日

目录

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();
}

文章来源:https://blog.csdn.net/jupangMZ/article/details/135044631
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。