D : DS 顺序表之循环移位

Description

顺序表的移位是循环移位,例如顺序表: 1 2 3 4 5 6 。如果左移 1 位,即原
来的头元素移动到末尾,其它元素向左移 1 位,变成 2 3 4 5 6 1 。同理,
如果右移 1 位,即原来的尾元素移动到头,其它元素向右移 1 位,变成 6 1 2
3 4 5 。以下是移位的多个例子:
原数据: 1 2 3 4 5 6
左移 3 位: 4 5 6 1 2 3 ,与原数据对比
右移 4 位: 3 4 5 6 1 2 ,与原数据对比
请编写程序实现顺序表的循环移位操作

Input

1 行输入 n 表示顺序表包含的 n 个数据
2 行输入 n 个数据,数据是小于 100 的正整数
3 行输入移动方向和移动的位数,左移方向为 0 ,右移方向为 1
4 行输入移动方向和移动的位数,左移方向为 0 ,右移方向为 1
注意:移动操作是针对上一次移动后的结果进行的

Output

第一行输出创建后,顺序表内的所有数据,数据之间用空格隔开
第二行输出第一次移位操作后,顺序表内的所有数据,数据之间用空格隔开
第三行输出第二次移位操作后,顺序表内的所有数据,数据之间用空格隔开

Sample Input

5
11 22 33 44 55
0 2
1 4

Sample Output

11 22 33 44 55

33 44 55 11 22
44 55 11 22 33

 AC代码:

	#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();
	}

你可能感兴趣的:(数据结构,C++,c++)