循环队列的操作(循环队列)

1.题目:

 

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 

 

 

 

2.参考代码:

第一种方法:循环队列做的

 

#include <iostream>
using namespace std;

int n,m;

class CirQueue{
private:
	int data[111];
	int front,rear;
public:
	CirQueue(){   ///构造函数,头指针和尾指针都初始化为0,并初始化数组
		front=rear=0;
		memset(data,0,sizeof(data));
	}
	~CirQueue(){   ///析构函数为空
		
	}
	void EnQueue(int x){   ///入队操作
		if(!full()){   ///若队列不为空
			rear%=m;   ///先求模
			data[rear++]=x;   ///入队
		}
	}
	int DeQueue(){   ///出队操作
		if(!empty()){   ///若队列不为满
			front%=m;   ///先求模
			return data[front++];   ///出队	
		}
	}
	bool full(){   ///判满操作
		if(rear==m)
			return true;
		else
			return false;
	}
	bool empty(){   ///判空操作
		if(rear==front)
			return true;
		else
			return false;
	}
	void show(int id,int value){   //输出操作
		cout<<id++<<":";
		while(!empty())
			cout<<DeQueue()<<" ";
		cout<<endl;
		rear=front=0;   ///初始化队列
		if(value!=-1)
			EnQueue(value);
	}
};

int main()
{
	while(cin>>n>>m){
		CirQueue cq;
		int id=1,value;   ///id是计算是第几行的
		while(n--){
			cin>>value;
			if(value&1)   ///若为奇数则继续
				continue;
			else{   ///否则为偶数
				if(!cq.full())   ///队列不满
					cq.EnQueue(value);   ///就入队
				else   ///否则满
					cq.show(id++,value);   ///输出
			}
		}
		if(cq.full())
			cq.show(id++,-1);
	}
	return 0;
}


 

 

 第二种方法:普通方法

 

#include <iostream>
using namespace std;

int main()
{
	int i,n,m,a[1111],b[1111],count,j,k;
	while(cin>>n>>m)
	{
		k=1;
		count=0;
		for(i=0;i<n;i++)
			cin>>a[i];
		for(j=0,i=0;i<n;i++)
		{
			if(a[i]%2==0)
			{
				count++;
				b[j++]=a[i];
				if(count%m==0)
				{
					cout<<k++<<":";
					for(int t=0;t<m;t++)
						cout<<b[t]<<" ";
					cout<<endl;
					j=0;
				}
			}
		}
	}
	return 0;
}


 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值