顺序表子表右移


2010

将n个整数存放到一维数组R中,设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p(0<p<n)个位置。

  1. 顺序序列中的元素 循环左移p个位置
  2. 将一维数组R中保存的序列 循环左移p个位置(要求在时间和空间两方面 都尽可能高效的算法)
  3. 即将R中的数据(X0, X1, X2… Xn-1)变换为(Xp, Xp+1, Xp+2…Xp-1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "preset.h"

//顺序序列中的元素 循环左移p个位置
void listReverse(SqList &sql, int left, int right) {
//int p = 0;
//int q = sql.length - 1;
while (left < right) {
int temp = sql.elem[left];
sql.elem[left] = sql.elem[right];
sql.elem[right] = temp;
left++;
right--;
}
}

//逆置前n个元素、逆置后m个元素
void test(SqList &sql, int p) {
cout << "Reverse all: " << endl;
listReverse(sql, 0, sql.length - 1); print(sql);

cout << "Reverse the first " << p << " elements:" << endl;
listReverse(sql, 0, p - 1); print(sql);

cout << "Reverse the last " << sql.length - p << " elements:" << endl;
listReverse(sql, p, sql.length - 1); print(sql);
}

int main() {
SqList sql = {{1, 2, 3, 4, 5, 6, 7}, 7};
cout << "current List:" << endl; print(sql);
int p; cin >> p;
test(sql, p);
return 0;
}