- 首页 > it技术 > >
数据结构|DS顺序表之循环移位
题目描述 顺序表的移位是循环移位,例如顺序表: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,与原数据对比
请编写程序实现顺序表的循环移位操作
输入 第1行输入n表示顺序表包含的n个数据 第2行输入n个数据,数据是小于100的正整数
第3行输入移动方向和移动的位数,左移方向为0,右移方向为1 第4行输入移动方向和移动的位数,左移方向为0,右移方向为1
注意:移动操作是针对上一次移动后的结果进行的
输出 第一行输出创建后,顺序表内的所有数据,数据之间用空格隔开
第二行输出第一次移位操作后,顺序表内的所有数据,数据之间用空格隔开
第三行输出第二次移位操作后,顺序表内的所有数据,数据之间用空格隔开
样例输入 【数据结构|DS顺序表之循环移位】5
11 22 33 44 55
0 2
1 4
样例输出 11 22 33 44 55
33 44 55 11 22
44 55 11 22 33
#include
using namespace std;
#define OK 1
#define ERROR 0class SeqList
{private:
int *list,maxsize,size;
public:
//构造函数
SeqList(int n)
{maxsize=1000;
size=n;
list=new int [maxsize];
for(int i=0;
i>list[i];
}
}
//循环移位
void shift(int d,int s)
{int *newList=new int[size];
if(d==0){
s=-s;
}
for(int i=0;
i;
i++)
{newList[(i+s+size)%size]=list[i];
}
for(int i=0;
i;
i++)
{list[i]=newList[i];
}
delete []newList;
}
//打印输出
void list_show()
{for(int i=0;
i;
i++)
{cout<>n;
SeqList s(n);
s.list_show();
cin>>direction>>step;
s.shift(direction,step);
s.list_show();
cin>>direction>>step;
s.shift(direction,step);
s.list_show();
return 0;
}
推荐阅读