C++容器库(第三篇:栈和队列)

C++容器库(第三篇:栈和队列)

基础介绍

  1. 头文件:#include<stack>
  2. 初始化:stack<int> a
  3. 相关用法:
用法代码
将x入栈a.push(x);
获取栈顶元素a.top();
将x入栈a.push(x);
将x入栈a.push(x);
出栈操作a.pop();
判断栈空a.empty
获取栈长a.size()
交换a、b栈a.swap(b);

其余用法可参考:https://zh.cppreference.com/w/cpp/container/stack

使用方法(缺点:输出后不能保留元素)

#include<iostream>
#include<stack>
using namespace std;
int main()
{
	/*初始化栈*/
	stack<int> a;
	/*入栈*/
	for(int i:{1,2,3,4,5}) a.push(i);
	/*获取栈的长度*/
	cout<<"栈a的长度为:" <<a.size()<<endl;
	/*常用的输出方式*/
	while(a.size()){
		/*获取当前栈顶元素*/ 
		cout<<"当前栈顶元素为"<<a.top()<<endl;
		/*出栈*/
		a.pop();
	}
}

使用数组模拟(优点:输出后可以保留元素)

#include<iostream>
#include<stack>
using namespace std;
int main()
{
	/*初始化栈*/
	int a[10];
	int len;
	/*入栈*/
	for(len=0;len<5;len++) a[len]=len+1;
	/*获取栈的长度*/
	cout<<"栈a的长度为:" <<len<<endl;
	/*常用的输出方式*/
	while(len--){
		/*获取当前栈顶元素*/ 
		cout<<"当前栈顶元素为"<<a[len]<<endl;
	}
}

普通队列

基本介绍

  1. 头文件:#include<queue>
  2. 初始化:queue<int> a;
  3. 相关用法:
用法代码
将x入队a.push(x);
获取队长a.size()
获取队尾元素a.back()
获取队头元素a.front()
出队操作a.pop();
交换队列a和ba.swap(b);

其余用法可参考:https://zh.cppreference.com/w/cpp/container/queue

使用方法(缺点:输出后不能保留数据)

#include<iostream>
#include<queue>
using namespace std;
int main()
{
	/*初始化队列*/
	queue<int> a;
	queue<int> b;
	
	/*a入队:1 2 3 4 5*/
	for(int i:{1,2,3,4,5}) a.push(i);
	/*b入队: 3 2 1*/
	for(int i:{3,2,1}) b.push(i);

	/*获取队列的长度*/
	cout<<"队列a的长度为:" <<a.size()<<endl;
	/*获取队列的长度*/
	cout<<"队列b的长度为:" <<b.size()<<endl;
	
	/*获取队尾元素*/
	cout<<"当前a的队尾元素为"<<a.back()<<endl;
	/*获取队尾元素*/
	cout<<"当前b的队尾元素为"<<b.back()<<endl;
	
	/*交换a、b队列*/
	a.swap(b);
	
	/*常用的输出方式*/
	cout<<"队列a:"<<endl;
	while(a.size()){
		/*获取当前队头元素*/ 
		cout<<"当前队头元素为"<<a.front()<<endl;
		/*出队*/
		a.pop();
	}
	cout<<"队列b:"<<endl;
	while(b.size()){
		/*获取当前队头元素*/ 
		cout<<"当前队头元素为"<< b.front()<<endl;
		/*出队*/
		b.pop();
	}
}

使用数组模拟(优点:可以保留数据)

#include<iostream>
using namespace std;
int main()
{
	/*初始化队列*/
	int a[100];
	int front;/*队头*/
	int back; /*队尾*/
	
	/*a入队:1 2 3 4 5*/
	for(front=back=1;back<=5;back++) a[back]=back;

	/*获取队列的长度*/
	cout<<"队列a的长度为:" <<back-front<<endl;
	
	/*获取队尾元素*/
	cout<<"当前a的队尾元素为"<<a[back-1]<<endl;
	
	/*常用的输出方式*/
	while(back>front){
		/*获取当前队头元素*/ 
		cout<<"当前队头元素为"<<a[front++]<<endl;
	}
}

双端队列

基本介绍

  1. 头文件:#include<queue>
  2. 初始化:deque<int> a;
  3. 相关用法:
用法代码
将x从队尾入队a.push_back(x);
将x从队头入队a.push_front(x);
从队尾出队a.pop_back;
从队头出队a.pop_front;
清空队列a.clear();
检查队列是否为空a.empty()
获取队列长度a.size()
获取队头元素a.front()
获取队尾元素a.back()
获取第i个元素(从0开始)a.at(i)
获取第i个元素(从0开始)a.operator[](i)

其余用法可参考:https://zh.cppreference.com/w/cpp/container/deque

使用方法

#include<iostream>
#include<queue>
using namespace std;
int main()
{
	/*初始化队列*/
	deque<int> a;
	
	/*a从尾入队:1 2 3*/
	for(int i:{1,2,3}) a.push_back(i);
	/*a从头入队:0 -1 -2 -3*/
	for(int i:{0,-1,-2,-3})a.push_front(i);

	/*获取队列的长度*/
	cout<<"队列a的长度为:" <<a.size()<<endl;
	
	/*获取队尾元素*/
	cout<<"当前a的队尾元素为"<<a.back()<<endl;
	
	/*从头开始输出*/
	while(a.size()){
		/*获取当前队头元素*/ 
		cout<<"当前队头元素为"<<a.front()<<endl;
		a.pop_front();
	}
}

优先队列

基本介绍

  1. 头文件:#include<queue>
  2. 初始化:priority_queue<int> a;
  3. 相关用法:
用法代码
将x从队尾入队a.push(x);
获取队长a.size()
获取最大元素a.top()
最大元素出队a.pop();

其余用法可参考:https://zh.cppreference.com/w/cpp/container/priority_queue

使用方法(优点:提供常数时间的最大元素查找)

#include<iostream>
#include<queue>
using namespace std;
int main()
{
	/*初始化队列*/
	priority_queue<int> a;
	
	/*a入队:5,3,8,7,6,-5,-7*/
	for(int i:{5,3,8,7,6,-5,-7}) a.push(i);
	
	/*获取队列的长度*/
	cout<<"队列a的长度为:" <<a.size()<<endl;
	
	/*输出*/
	while(a.size()){
		/*获取最大元素*/ 
		cout<<a.top()<<" ";
		/*最大元素出队*/
		a.pop();
	}
}

你悟解了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟解了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值