n个数据后移k位(队列的应用)

本文介绍了一种使用队列实现数组元素循环后移k位的算法,并提供了完整的C++代码实现。通过队列的先进先出特性,实现了数组中元素的有效移位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  题目:数组中有 n 个数据,要将它们顺序循环向后移 k 位,即前面的元素向后移k位,后面的元素则循环向前移k位,例:0,1,2,3,4 循环移3位后为2,3,4,0,1。

     解题思路:这道题解题方法有很多,后移让我想到了队列,因为是先进先出,n 个数据后移 k 位就可以当成前 n-k 个数据依次出队后又依次入队,从队头出进入队尾。然后再依次输出队列中的元素即为最终移后各元素的位置。因此可以运用队列来解这道题。注意:当k>n时,应先进行取摸运算k=k%n,也是一个简化过程。代码如下:

ExpandedBlockStart.gifView Code
 1 #include<iostream>
 2 #include<queue>
 3 using namespace std;
 4 queue <int> q;
 5 int main()
 6 {
 7     int n,k,i,an[101],m;
 8     while(cin>>n>>k)
 9     {
10         for(i=0;i<n;i++)
11         {
12             cin>>an[i];
13             q.push(an[i]);
14         }
15         for(i=1;i<=(n-k)%n;i++)
16         {
17             m=q.front();//获取队首元素
18             q.pop();//队首元素出队
19             q.push(m);//元素 m 入队
20         }
21         while(!q.empty())//输出队中各元素
22         {
23             cout<<q.front()<<" ";
24             q.pop();
25         }
26         cout<<endl;
27     }
28     return 0;
29 }

 

转载于:https://www.cnblogs.com/yueshuqiao/archive/2011/10/18/2216423.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值