0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

c++之栈和队列

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2023-07-15 08:50 次阅读

1.stack容器

stack ,栈(堆栈),是一种先进后出(First In Last Out,FILO)的数据结构,先插入的数据在栈底,后放入的数据在栈顶,所有的数据只能从栈顶取出。

在生活中先进后出的例子友很多,例如我们在桌子上摞书,先放的在最下面,后放的在最上面。在取书的时候也是先取最后放的,最才能取到第一个放的。

wKgZomSxO8eAeVP5AAPtT7ckrTE867.png

在栈容器中,只有栈顶数据才可以被外界访问,因此stack不存在遍历。

2.栈容器使用示例

  • stack(栈)容器特性:

先进后出(后进先出) --类似与往袋子中装东西,先放进去的在最下面,最后放进行的可以先拿出来;第一个放进去的 --->栈底

最后一个放进的 --->栈顶

stack只允许从栈顶取数据

stack容器无法对数据进行排序sort,但可以判断容器是否为空empty,可以计算元素的个数size;

  • 相关函数:
stack构造函数:
	stack< T > stk; //默认构造
	stack(const stack &p);//拷贝构造
stack赋值
	operator=() --运算符号重载
stack入栈与出栈:
	push() -->入栈
	emplace() -->入栈(在容器尾部插入元素)
	pop() --->出栈
	top() -->查看栈顶元素
	empty() -->判断容器是否为空
	size()  -->获取元素个数
	swap -->交换元素

使用示例:

#include < iostream >
#include < stack >
using namespace std;
void test()
{
	//创建一个stack容器
	stack< int > stk;
	//入栈
	stk.push(10);
	stk.push(20);
	stk.push(30);
	stk.push(40);
	stk.emplace(100);
	stack< int >stk3(stk);//拷贝构造
	cout < < "stk元素个数:" < < stk.size() < < endl;
	//查看stk元素
	while (!stk.empty())
	{
		cout < < stk.top() < < " ";//查看栈顶元素
		stk.pop();//出栈
	}
	cout < < endl;
	stack< int >stk2 = stk;//赋值
	if (stk2.empty())
	{
		cout < < "stk2为空" < < endl;
	}
	//入栈
	stk2.push(111);
	stk2.push(222);
	stk2.swap(stk3);

	//查看stk2元素
	cout < < "skt2栈内容:" < < endl;
	while (!stk2.empty())
	{
		cout < < stk2.top() < < " ";//查看栈顶元素
		stk2.pop();//出栈
	}
	cout < < endl;
	
	//查看stk3元素
	cout < < "skt3栈内容:" < < endl;
	while (!stk3.empty())
	{
		cout < < stk3.top() < < " ";//查看栈顶元素
		stk3.pop();//出栈
	}
	cout < < endl;
}
int main()
{
	test();
	system("pause");
}
wKgaomSxPPiAf6wEAAPPMhfoUIQ563.png

3.queue容器

队列(queue 和堆栈相似,是一种可以存取的数据结构,不同的是队列的存取是在两个不同的方向进行的,因此其主要特征是先进先出(First-in-first-out,FIFO),类似于我们生活中的水管。

wKgaomSxPaOAIMV_AAQVau97g90678.png

4.queue容器使用示例

队列只需要从对尾插入数据(入队,push_back),对头取数据(出队,pop_front);

队列只能访问对头和队尾数据,其他数据需要出队才能访问,所以不存在遍历队列;

返回队列头数据:front()

返回队列尾数据:back()

  • 相关函数:
队列构造函数:
	queue< T > que; //队列通过类模板实现,默认构造函数
	queue(const queue &p);
	operator=(queue &p)  -->运算符重载
相关成功函数:
	入队:push()
	出队:pop()
获取队列头数据:front();
获取队列尾数据:back();
判断队列是否为空:empty();
获取队列中元素个数:size();
互换元素:swap();

使用示例:

#include < iostream >
#include < queue >
using namespace std;
void test()
{
	queue< int > q;
	//入队
	q.push(10);
	q.push(20);
	q.push(30);
	q.emplace(40);//从队列尾插入数据
	cout < < "队列中成员个数:" < < q.size() < < endl;
	while (!q.empty())//判断队列是否为空
	{
		cout < < "队列头:" < < q.front() < < "t队列尾:" < < q.back() < < endl;
		q.pop();//出队
	}
	cout < < "队列中成员个数:" < < q.size() < < endl;
	
}
int main()
{
	test();
	system("pause");
}
wKgZomSxPmGACvvMAAPMCRBNWzc279.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C++
    C++
    +关注

    关注

    22

    文章

    2104

    浏览量

    73482
  • 数据结构
    +关注

    关注

    3

    文章

    573

    浏览量

    40088
  • 队列
    +关注

    关注

    1

    文章

    46

    浏览量

    10887
收藏 人收藏

    评论

    相关推荐

    C++STL算法(二)

    C++STL算法(二)
    的头像 发表于 07-18 14:49 967次阅读
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>STL算法(二)

    c++STL算法(三)

    c++STL算法(三)
    的头像 发表于 07-18 15:00 1216次阅读
    <b class='flag-5'>c++</b><b class='flag-5'>之</b>STL算法(三)

    队列C++中的queue详解

    队列就是一种线性的数据结构,它与日常生活中排队的队列相似,即先进先出(LIFO, First In First Out),这点也是它与(Stack)的最大不同之处。
    的头像 发表于 07-18 17:31 1607次阅读
    <b class='flag-5'>队列</b>与<b class='flag-5'>C++</b>中的queue详解

    C++文件操作

    C++文件操作
    的头像 发表于 07-21 10:52 1082次阅读
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>文件操作

    队列

    队列:1、队列定义:限定仅只能在表尾端进行插入和删除的线性表。顶:表尾端被称之为顶。
    发表于 08-13 13:50 0次下载

    你还会手写队列队列的基本实现程序说明

    昨天跟一个CSDN上的朋友聊天,他说现在如果让他自己手写一个或者队列,估计都要写蛮久的,平时虽然都在用,但是都是别人封装好的集合。确实,经典的数据结构,包括排序算法,虽然我们平时不用手写了,但是
    的头像 发表于 11-11 11:34 2778次阅读

    深入浅出了解单调和单调队列

    袁厨携袁记菜馆全体工作人员祝大家在新的一年,健健康康,开开心心。发量暴增,钱包超大。 哎,元旦假期结束了,又要继续搬砖了,我们接着做题吧,今天我们好好说说单调和单调队列。其实很容易理解,单调就是
    的头像 发表于 02-02 10:18 1439次阅读
    深入浅出了解单调<b class='flag-5'>栈</b>和单调<b class='flag-5'>队列</b>

    队列实现原理是什么?队列实现方案有哪几种?

    是一种后进先出的数据结构,而队列是一种先进先出的数据结构,两者原理不难理解,使用也简单。
    的头像 发表于 07-04 13:28 2707次阅读
    <b class='flag-5'>队列</b>实现<b class='flag-5'>栈</b>原理是什么?<b class='flag-5'>队列</b>实现<b class='flag-5'>栈</b>方案有哪几种?

    简述Labview使用队列的区别

    简述Labview使用队列的区别
    发表于 01-19 09:50 9次下载

    C++设计新思维-泛型编程与设计应用

    C++设计新思维-泛型编程与设计应用
    发表于 11-16 15:59 3次下载

    C++学习笔记c++的基本认识

    自这篇文章我们即将开始C++的奇幻之旅,其内容主要是读C++ Primer的总结和笔记,有兴趣可以找原版书看看,对于学习C++还是有很大帮助的。这篇文章将从一个经典的程序开始介绍C++
    的头像 发表于 03-17 13:57 701次阅读

    利用C++提供的队列封装一个消息队列

    最近的C++项目中,需要用到消息队列,但是C++中又没有原生的消息队列,就在网上找了一下相关资料,利用C++提供的
    的头像 发表于 05-20 15:16 1768次阅读
    利用<b class='flag-5'>C++</b>提供的<b class='flag-5'>队列</b>封装一个消息<b class='flag-5'>队列</b>

    数据结构队列,串介绍

    队列不再过多描述,了解入规则,入队出队规则,的递归应用即可,面试肯定不会考这种概念,太简单。
    的头像 发表于 05-26 14:35 490次阅读
    数据结构<b class='flag-5'>之</b><b class='flag-5'>栈</b>,<b class='flag-5'>队列</b>,串介绍

    两个实现一个队列方法

    队列是比较基础的数据结构。无论在工作中,还是在面试中,队列都用的比较多。在计算机的世界,你会看到队列
    的头像 发表于 10-08 15:54 777次阅读

    C++之父新作带你勾勒现代C++地图

    为了帮助大家解决这些痛点问题,让大家领略现代C++美,掌握其中的精髓,更好地使用C++C++之父Bjarne Stroustrup坐不住了,他亲自操刀写就了这本《
    的头像 发表于 10-30 16:35 792次阅读
    <b class='flag-5'>C++</b>之父新作带你勾勒现代<b class='flag-5'>C++</b>地图