💃🏼 本人简介:男
👶🏼 年龄:18
🚩 今日留言:亮亮被迫去练科目二啦,定时发布的文章,回来统一给大家三连回复嗷~😉
文章目录
- 1. stack容器——栈
- 1.1 基本概念
- 1.1.1 特点
- ① 先进后出
- ② 不能遍历
- ③ 可以为空,返回元素个数
 
- 1.1.2 图解
 
- 1.2 函数原型
- a. 构造函数
- b. 赋值操作
- c. 数据存取
- d. 大小操作
 
- 1.3 代码展示
- 1.4 测试结果
 
- 2. queue容器——队列
- 2.1 基本概念
- 2.1.1 特点
- ① 先进先出
 
- ② 不能遍历
- ③ 可以为空,返回元素个数
- 2.1.2 图解
 
- 2.2 函数原型
- a. 构造函数
- b. 赋值操作
- c. 数据存取
- d. 大小操作
 
- 2.3 代码展示
- 2.4 测试结果
 
- 3. 感谢大家支持u ^ _ ^
1. stack容器——栈
大家不妨想一下生活中,当我们往行李箱里放衣服时,是不是先放进去的衣服被压在最下面,最后才能取出来呢,而最后放进去的衣服最先拿出来呢。如果大家这都能理解的话,那恭喜大家,已经领悟到栈的精髓了哈!!具体特点我们接下来开始讲叭~
1.1 基本概念
1.1.1 特点
① 先进后出
- stack是一种先进后出的数据结构,它只有一个出口
② 不能遍历
- 栈容器由于只有顶部元素才能被访问,要想访问栈中其他元素,则需要先把底部元素拿走,但一旦把底部元素拿走,栈的元素就变少了,使容器元素发生改变,而遍历操作不能改变容器中的元素,所以栈不能进行遍历操作
③ 可以为空,返回元素个数
- 栈容器可以为空【通过empty函数()接口】
- 可以通过入栈时来记录元素的个数【通过size()函数接口】
1.1.2 图解

 
1.2 函数原型
记得头文件
#include<stack>
a. 构造函数
- stack<T> stk;stack采用模板类实现,stack对象的默认构造形式
- stack(const stack &stk);拷贝构造函数
b. 赋值操作
- stack operator=(const stack &stk);重载等号操作符
c. 数据存取
- push (elem);向栈顶添加元素
- pop ();从栈顶移除第一个元素
- top ();返回栈顶元素
d. 大小操作
- empty();判断堆栈是否为空
- size();返回栈的大小
1.3 代码展示
#include<stack>
#include<stdio.h>
#include<iostream>
using namespace std;
void text01() {
	//特点:符合先进后出的数据结构
	stack<int> s;
	s.push(10);
	s.push(20);
	s.push(30);
	s.push(40);
	cout << "栈的大小: " << s.size() << endl;
	//只要栈不为空,查看栈顶,并执行出栈操作
	while (!s.empty()) {
		
		//查看栈顶元素
		cout << "栈顶元素为: " << s.top() << endl;
		
		//出栈
		s.pop();
		
		cout << "栈的大小: " << s.size() << endl;
	}
	
}
int main() {
	text01();
	return 0;
}
1.4 测试结果

2. queue容器——队列
在已逝的2019-2022的三年,相信大家每天都有对核酸支配的经历。我们不妨回忆一下,我们排队做核酸时,先排队的A是不是最先做完可以走呢。而最后排队的B是不是最后一个做完,最后才能走呐??没错,这就是队列的精髓——先进先出!!!接下来关于队列的故事,我们慢慢讲!
2.1 基本概念
2.1.1 特点
① 先进先出
- 具有两个出口,先进先出。
- 队尾入队,队头出队。
- 队列容器允许从一端新增元素,从另一端移除元素
② 不能遍历
- 【原因类似于stack的栈】queue队列容器由于只有队头和队尾元素才能被访问,要想访问队中其他元素,则需要先把队头/队尾元素拿走,但一旦把头/尾元素拿走,队列中的元素就变少了,使容器元素发生改变,而遍历操作不能改变容器中的元素,所以队列不能进行遍历操作
③ 可以为空,返回元素个数
- 队列容器可以为空【通过empty函数()接口】
- 可以返回队列的个数【通过size()函数接口】
2.1.2 图解

 
2.2 函数原型
记得头文件
#include<squeue>
a. 构造函数
- queue<T> que;queue采用模板类实现,queue对象的默认构造形式
- queue(const queue &que);拷贝构造函数
b. 赋值操作
- queue operator=(const queue &que);重载等号操作符
c. 数据存取
- push (elem);向队尾添加元素
- pop ();从对头移除第一个元素
- back();返回最后一个元素
- front ();返回第一个元素
d. 大小操作
- empty();判断队列是否为空
- size();返回队列的大小
2.3 代码展示
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
class Player {
public:
	Player(string name, int age) {
		this->m_name = name;
		this->m_age = age;
	}
public:
	string m_name;
	int m_age;
};
//队列queue
void text01() {
	//创建队列
	queue<Player> q;
	//准备数据
	Player p1("James", 38);
	Player p2("Irving", 30);
	Player p3("Durant", 34);
	Player p4("Rose", 34);
	Player p5("Curry", 34);
	//入队
	q.push(p1);
	q.push(p2);
	q.push(p3);
	q.push(p4);
	q.push(p5);
	cout << "出队前队列大小为: " << q.size() << endl;
	cout << "------------------------------------------" << endl;
	while ( !q.empty() ) {
		//只要队列不为空,查看队头和队尾
		cout << "队头为: ";
		cout << "姓名: " << q.front().m_name << " 年龄为: " << q.front().m_age << endl;
		cout << "队尾为: ";
		cout << "姓名: " << q.back().m_name << " 年龄为: " << q.back().m_age << endl;
		cout << "------------------------------------------" << endl;
		//出队
		q.pop();
	}
	cout << "出队后大小为: " << q.size() << endl;
}
int main() {
	text01();
	return 0;
}
2.4 测试结果

3. 感谢大家支持u ^ _ ^
下一期预告:list容器


















![[Python从零到壹] 番外篇之可视化利用D3库实现CSDN博客每日统计效果(类似github)](https://img-blog.csdnimg.cn/15efe1ed83884d8c8c542b3feb57b9f4.jpeg#pic_center)

