顺序表子表右移
2010
将n个整数存放到一维数组R中,设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p(0<p<n)
个位置。
- 顺序序列中的元素 循环左移p个位置
- 将一维数组R中保存的序列 循环左移p个位置(要求在时间和空间两方面 都尽可能高效的算法)
- 即将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"
void listReverse(SqList &sql, int left, int right) { while (left < right) { int temp = sql.elem[left]; sql.elem[left] = sql.elem[right]; sql.elem[right] = temp; left++; right--; } }
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; }
|