队列——用数组来表示

本文介绍了如何使用数组高效地模拟队列,包括基本操作如插入、弹出和计算队列长度,以及展示了如何在特定场景下使用前缀和的算法实现。

前言

为什么要用数组来模拟队列?
因为数组机动性高,可用性高,灵活性也高

步入正题

请注意,以下的tail都指向末尾的下一个位置。

//插入一个元素
cin>>n;
a[tail]=n;
tail++;
if (head==tail)cout<<"队列为空";
if (tail!=head)head--;//弹出
int size=tail-head;//队列的长度
cout<<a[head];//输出队首

这些都是基本操作,还有些特殊的,比如说前缀和,以下是一个前缀和的样例

#include<bits/stdc++.h>
using namespace std;

long long a[101000],q[101000];
int head=1,tail=1;
int cmp1,cmp2;
int main(){
	int n;
	cin>>n;
	for (int i=0;i<n;i++){
		cin>>cmp1;
		if (cmp1==1){
			cin>>cmp2;
			a[tail]=cmp2;
			q[tail]=q[tail-1]+cmp2;
			tail++;
		}else if (cmp1==2){
			if (head!=tail)head++;
		}else if (cmp1==3){
			if (head!=tail)tail--;
		}else {
			cin>>cmp2;
			cout<<q[cmp2+head-1]-q[head-1]<<endl;//这里就是前缀和
		}
	}
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值