算法设计与分析 李春葆 1_5_3 出队第k个元素

题目要求

编写一个实验程序,对于一个含n(n>1)个元素的queue队列容器qu,出队从队头到队尾的第k(1<=k<=n)个元素,其他队列元素不变。

题目分析

1.先请求用户输入向队列中存储的数据的个数。
2.然后开辟一个数组空间用来存储用户输入的数据,然后要求用户输入数据。
3.然后建一个queue来存储那些数组数据。
4.然后请求用户要求输出第k个的k为多少。
5.然后根据k出队,不是第k个的元素再入队,是第k个的元素不再入队,循环一周即可完成。

代码实现(C++)

#include <iostream>
#include <queue>
using namespace std; 
/*
题目:出队第k个元素。 
要求:编写一个实验程序,对于一个含n(n>1)个元素的queue<int>队列容器qu,出队从队头到队尾的第k(1<=k<=n)个元素,其他队列元素不变。 
	  
解题思路:
	1.先请求用户输入向队列中存储的数据的个数。 
	2.然后开辟一个数组空间用来存储用户输入的数据,然后要求用户输入数据。 
	3.然后建一个queue来存储那些数组数据。
	4.然后请求用户要求输出第k个的k为多少。 
	5.然后根据k出队,不是第k个的元素再入队,是第k个的元素不再入队,循环一周即可完成。 
*/
void KRemove(int array[],int n,int k){
	int i,j;
	queue<int> qu;				//搭建队列容器 
	for(i = 0; i<n; i++){
		qu.push(array[i]);		//向队列压入数据 
	} 
	for(i = 1; i<=n; i++){
		j = qu.front();			//返回队头数据 
		qu.pop();				//出队操作 
		if(i!=k){
			qu.push(j);			//如果不是第k个元素,再压入队列,是第k个数据的话不再进队,循环一轮,保持取出第k个元素后队列不变。 
		}
	}
	//打印原始队列数据 
	cout << "原始数据:";
	for(i = 0; i<n; i++){
		cout << array[i] << " ";
	}
	cout << endl;
	//打印去除第k个数据后的队列数据 
	cout << "去掉第" << k << "个数据之后的数据:";
	for(i = 1; i<n; i++){
		j = qu.front();
		qu.pop();
		cout << j << " ";
		qu.push(j);			//压入队列,保持队列不变 
	}
}
int main(){
	int n,k; 
	cout << "请输入你想记录的数据的个数:";
	cin >> n;
	int array[n];
	for(int i=0; i<n; i++){
		cout << "请输入第"<<i+1<<"个数据:";
		cin >> array[i];
	}
	cout << "请输入你想选出的k:";
	cin >> k;
	KRemove(array,n,k);
}
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐