栈和队列都是C++中的一种线性数据结构,这一篇博客,我们就来学习学习关于这两个数据结构的知识
栈
什么是栈
栈(Stack)是一种后进先出(Last In First Out)的线性数据结构,这种数据结构简称为LIFO表,由于其特殊性,这种数据结构经常被用于关于括号匹配以及字符串解码等问题,当然这种题目可以出的很简单,也可以出的很难,这里建议大家先学习数组模拟这种方法,因为这种方法可以让学习stack容器时更加快速
实现方法1:数组模拟
用数组模拟栈其实很简单,只要你记得关于数组的知识就可以了,来看一看实例代码与讲解:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4;
int main(){
// a表示栈顶
int stk[N], a = 0; // 定义一个数组 stk(stack的缩写),定义栈顶为a
// 向栈顶插入一个数
int x;
cin >> x;
stk[a++] = x; // a++表示将栈的大小增加1,并把x赋值给这个数
// 从栈顶弹出一个数
a-- ; // a--表示将栈的大小减少1,减少1就可以将栈顶元素出栈
// 栈顶的值
stk[a]; // a不仅是栈的大小,也是栈顶元素的下标
// 判断栈是否为空,如果 a > 0,则表示不为空
if(a > 0){
//代码
}
return 0;
}
实现方法2:使用stack
stack是C++实现的栈容器,常见用法有:
#include<bits/stdc++.h>
using namespace std;
int main() {
// 声明一个只能存储int类型的栈容器
stack<int> s;
// 入栈
s.push(12); // 将12入栈
s.push(20); // 将20入栈
// 栈中元素个数
cout << s.size() << '\n'; // 输出栈中元素个数
// 输出结果为2
// 访问栈顶元素
cout << s.top() << '\n'; // 输出栈顶元素
// 输出结果为20
// 出栈
s.pop(); // 将栈顶元素出栈
cout << s.top() << '\n'; // 输出栈顶元素
// 输出结果为12
return 0;
}
其实不只有栈可以实现这种操作,动态数组vector也是一种可以使用的方法,这里不过多赘述,感兴趣的读者可以自己去搜索一下
队列
什么是队列
队列(Queue)是一种先进先出(First In First Out)的线性数据结构,这种数据结构简称为FIFO表,与栈(Stack)不同,队列是在一端进行插入操作,在另一端进行删除操作
实现方法1:数组模拟
用数组模拟队列也比较简单,只不过相对于栈来说稍微有一些复杂:
using namespace std;
const int N = 1e4;
int main(){
// b表示队头,a表示队尾
int q[N], b = 0, a = -1;
// 向队尾插入一个数
int x;
cin >> x;
q[a++] = x; // 这个其实相当于入栈,不过多赘述
// 从队头弹出一个数
b++; // 与栈不同的是这里是队头弹出,于是刚好与栈相反
// 队头的值
q[b]; // 这个不用多说了吧
// 判断队列是否为空,如果 hh <= tt,则表示不为空
if(b <= a){
//代码
}
}
实现方法2:使用队列
这个我们类比栈来学习
#include<bits/stdc++.h>
using namespace std;
int main() {
// 声明一个只能存储int类型的队列容器
queue<int> q;
// 入队列
q.push(12); // 将12入队列
q.push(20); // 将20入队列
// 队列中元素个数
cout << q.size() << '\n'; // 输出队列中元素个数
// 输出结果为2
// 访问队首元素
cout << q.front() << '\n'; // 输出队首元素
// 输出结果为12
// 出队列
q.pop(); // 将队首元素出队列
cout << q.front() << '\n'; // 输出队首元素
// 输出结果为20
return 0;
}
队列和栈一样是一种常用的数据结构,可以应用于很多场景。比如,可以使用队列来实现消息队列,用于处理异步任务。此外,队列还常用于广度优先搜索算法中,用于管理待访问的节点。队列可以通过使用数组、链表等不同的底层实现方式来实现,读者可以根据具体的需求选择合适的实现方式。
标签:搞定,彻底,队列,栈顶,int,数组,数据结构,stack From: https://www.cnblogs.com/charzie-blog/p/18015171