欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

循环队列的简单操作

程序员文章站 2022-07-14 13:48:24
...

循环队列的存储空间

如果要存储m个元素,queuesize=m+1;

队列的两个指针rear和front

头指针front:队列在队头的位置删除数据;
尾指针rear:队列在队尾的位置插入数据;

初始化队列

rear=front=queuesize-1;//这样可以让第一个数据存在data[0],其他位置也可以

入队

void enqueue(int x){
	rear=(rear+1)%queuesize;//队尾指针在循环意义上加一,如果rear<queuesize-1,正常++,否则跳到data[0]
	data[rear]=x;
}

出队

void dequeue(){
	front=(front+1)%m;//和入队类似,只是头指针移动而不删除空间
}

判断队空和队满

队空时,随着头指针移动,数据全部出队,最后一个出队的是rear所指的的位置,因此rear=front;
队满时,随着尾指针的移动,数据全部入队,最后一个入队的位置是front所指的位置,这时候front=rear,和队空时一样,我们可以浪费一个空间,当 (rear+1) % queuesize = front 时,视为队满;
(这就是文章开头存储m个元素时,queuesize = m+1 的原因)

示例

循环队列的操作

Time Limit: 1000/2000 MS (C/Others)   Memory Limit: 32768/32768 K (C/Others)

Problem Description:

现有一长度为n的整数序列和一最大容量为m的循环队列(用长为m+1的一维数组实现),要求将该序列中的偶数存入循环队列中;当循环队列满时,将循环队列中的所有元素全部出队,并按存入的先后顺序在同一行内依次输出,即每行输出m个元素,每个元素后输出一个空格。

Input:
有多组数据,每组第一行为整数序列的个数n和循环队列的最大容量m(m<=n<=100,0<m<10);第二行为整数序列的各个元素。

Output:
有多行数据,先输出对应行号,每行输出m个元素,均为偶数,每个元素后输出一个空格。

Sample Input:
10 4
9 10 2 7 16 8 12 4 3 1
10 3
9 10 2 7 16 8 12 1 3 4

Sample Output:
1:10 2 16 8
1:10 2 16
2:8 12 4

代码

#include<iostream>
using namespace std;
int data[10];
int rear,front,m,c;
void initqueue(int x){
	rear=(rear+1)%m;
	data[rear]=x;
}
void dequeue(){
	front=(front+1)%m;
	cout<<data[front]<<" ";
}
int main(){
	int n;
	int a[100];
	while(cin>>n>>m){
		m++;
		rear=front=m-1;
		int c=1;
		for(int i=0;i<n;i++){
			cin>>a[i];
			if(a[i]%2==0)
			initqueue(a[i]);
			if((rear+1)%m==front){
				cout<<c<<":"; 
				while(front!=rear){
					dequeue();
				}
				cout<<endl;
				c++;
			}
		}
	}
	return 0;
}
相关标签: 循环队列