flo*_*uck 5 c++ queue list fifo data-structures
晚上好,人们!
我正在尝试解决一个相当简单的问题,但是……好吧,似乎我不能。:)
这个想法是我有一个包含 n 个元素的 FIFO 列表(FIFO 队列),它被赋予一个值 k (k < n)。我的小程序必须将元素向左移动 k 个元素。(例如,对于 n=4, k=3, a[]=(1, 2, 3, 4),结果是 4 1 2 3)。
但好吧,我离那很远。
这是我到目前为止所写的:
#include <iostream>
using namespace std;
void move (int a[100], unsigned n, unsigned k) {
int t[100];
unsigned i;
for (i=0; i<=n-1; i++) t[i]=a[i];
for (i=0; i<=k-1; i++) a[i]=a[i+k-1];
for (i=k; i<=n-1; i++) a[i]=t[i+1];
}
int main () {
int a[100];
unsigned k, n, i;
cout<<"n; k= "; cin>>n>>k;
for (i=0; i<=n-1; i++) cin>>a[i];
move (a, n, k);
for (i=0; i<=n-1; i++) cout<<a[i]<<" ";
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。先感谢您。
我不确定我是否完全理解你的问题。但看起来您实际上想要旋转数组的内容。
将数组内容向左旋转 k 次。您可以执行以下操作:
例子:
N = 5,K = 3,数组 = [1 2 3 4 5]
C++ 函数执行相同操作:
void move (int a[100], int n, int k) {
int t[100];
int i,j;
for (i=k-1,j=0; i>=0; i--,j++) t[j]=a[i];
for (i=n-1; i>=k; i--,j++) t[j]=a[i];
for (i=n-1,j=0; i>=0; i--,j++) a[j]=t[i];
}
Run Code Online (Sandbox Code Playgroud)
在恒定空间中执行此操作的更好方法是就地进行反转:
void arr_rev(int a[100], int start, int end) {
int temp;
for(;start<end;start++,end--) {
temp = a[start];
a[start] = a[end];
a[end] = temp;
}
}
void move2 (int a[100], int n, int k) {
arr_rev(a,0,k-1);
arr_rev(a,k,n-1);
arr_rev(a,0,n-1);
}
Run Code Online (Sandbox Code Playgroud)