511 22 33 44 550 21 4
11 22 33 44 5533 44 55 11 2244 55 11 22 33
在move函数里,用dir参数(0和1)区分向左移还是向右移,step表示移动位数。
左移:用变量t保存第一个数据,然后while中循环一次,就将第一个数后的数据都左移一位,再将t赋值给顺序表最后一位。
右移:先将顺序表整体位移step位,然后将超出顺序表的数据移动到前面空缺的位置。
- #include
- using namespace std;
- #define ok 0
- #define error -1
- class SeqList {
- private:
- int* list;
- int maxsize;
- int size;
- public:
- SeqList() {
- maxsize = 1000;
- size = 0;
- list = new int[maxsize];
- }
- ~SeqList() {
- delete[]list;
- }
-
- void set(int length) {
- this->size = length;
- for (int i = 0; i < length; i++) {
- cin >> *(list + i);
- }//初始化数组
- list_display();
- }
- void list_display() {
- for (int i = 0; i < size; i++) {
- cout << list[i];
- if (i != size - 1) {
- cout << " ";
- }
- }
- cout << endl;
- }
- void list_display2() {
- for (int i = 0; i < size; i++) {
- cout << list[i];
- if (i != size - 1) {
- cout << " ";
- }
- }
- }
- void move(int dir, int step) {
- if (dir == 0) {
- while (step--) {
- int t = 0;
- t = *(list);
- for (int i = 1; i < size; i++) {
- *(list + i - 1) = *(list + i);
- }
- *(list + size - 1) = t;
- }
- }
- else {
- for (int i = size; i >= 0; i--) {
- *(list + i + step) = *(list + i);
- }
- for (int i = 0; i < step; i++) {
- *(list + i) = *(list + i + size);
- }
- }
- }
- };
- int main() {
- int t;
- cin >> t;
- SeqList p;
- p.set(t);
- int d, s;
- cin >> d >> s;
- p.move(d, s);
- p.list_display();
- cin >> d >> s;
- p.move(d, s);
- p.list_display2();
- }