💃🏼 本人简介:男
👶🏼 年龄: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容器