leetcode——队列总结

一、实现代码


#include <iostream>
#define MAXSIZE 100
using namespace std;

struct Queue {
	int *data;
	int front;
	int rear;
	Queue() { data = new int[MAXSIZE]; front = 0; rear = 0; }
	//压入——rear+1
	int push(int elem) { 
		if ((rear + 1) % MAXSIZE == front)
			return -1;
		else {
			data[rear] = elem;
			rear = (rear + 1) % MAXSIZE;
			return 1;
		}
	}
	//弹出——front+1
	int pop() {
		if (front == rear)
			return -1;
		else {
			front = (front + 1) % MAXSIZE;
			return 1;
		}
	}
	//获取队头——返回data[front]
	int Front() {
		if (front == rear)
			return -1;
		else
			return data[front];
		
	}
	//获取长度
	int size() {
		return (rear - front + MAXSIZE) % MAXSIZE;
	}
};


int main(){
	//1、申请队列
	Queue q;
	//2、压入元素
	q.push(5);
	q.push(2);
	q.push(0);
	//3、输出队列大小
	cout << "The length of Queue is:" << q.size() << endl;
	//4、弹出元素
	while (q.size() != 0) {
		cout << q.Front()<<'\t'; q.pop();
	}
}

在这里插入图片描述

二、高频题目

225. 用队列实现栈
——压入一次另一个队列插入一次,交换队列(两个队列)
1、压入元素,将另一个队列元素插入,交换队列
2、弹出并返回存储队头,使用一个变量进行队头保存
3、获取栈顶,直接返回存储队头
4、判断是否为空,直接判断存储队列是否为空
——压入一次重新插入(一个队列)
1、压入元素,重新再插一遍前面的函数
2、弹出并返回队头,使用一个变量进行队头保存
3、获取栈顶,直接返回队头
4、判断是否为空,直接判断队列是否为空

346.数据流中的移动平均值——队列模拟窗口
1、压入元素q.push(next)
2、压入元素后窗口超过size,q.pop();sum=sum-front+next;
3、压入元素后窗口为超过size,sum+=next;
4、返回平均值,return double(sum/q.size());

281.Z字型迭代器——两个队列实现(注意向量同时为空的情况)
1、将两个向量放入两个队列
2、判断第一个向量是否为空,空则cur=1
3、根据cur判断弹出哪个队列头部
cur=0——弹出队列1,若队列2不为空,cur=1
cur=1——弹出队列2,若队列1不为空,cur=0
4、判断迭代器是否有next,两个队列有一个不为空即可

1429.第一个唯一数字——队列+哈希表
1、初始化——压入队列,哈希计数
2、返回唯一数字——不断弹出queue.front(),寻找map计数为1的元素
3、加入新数字——更新queue and hash

54. 螺旋矩阵——四指针圈遍历(不太属于队列题目)
1、获取矩阵行列信息
2、初始化四个指针 left right top bottom
3、进行圈遍历 右 下 左 上
4、左上加个条件,避免单行或单列重复扫描 if(left<right && top<bottom)
5、四个指针集体移动 ++left;--right; ++top; --bottom;

362.敲击计数器——队列加哈希表 first记录时间戳,second记录敲打次数
0、初始化计数表,sum=0
1、计数——队列不为空且队列尾部为该timestamp,是则哈希表计数+1,sum++
2、计数——否则,增加哈希表元素,并将敲打次数记为1,sum++
3、获取有限五分钟敲打次数——队列头与当时时间之差大于300s的弹出,sum–

三、STL中的队列

1、申请队列
queue<int> q;

2、压入元素
q.push(x);

3、弹出元素
q.pop();

4、获取队列头
q.front();

5、判断队列是否为空
q.empty();

6、获取队列大小
q.size()7、交换两队列
swap(q1,q2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值