您的位置:首页 > 理论基础 > 数据结构算法

数据结构——顺序表逆置之移位算法

2017-10-05 19:11 197 查看


顺序表应用3:元素位置互换之移位算法

Time Limit: 1000MS Memory Limit: 570KB

Submit Statistic


Problem Description

一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m<=len),借助元素移位的方式,设计一个空间复杂度为O(1)的算法,改变原来的顺序表,把顺序表中原来在前的m个元素放到表的后段,后len-m个元素放到表的前段。

注意:先将顺序表元素调整为符合要求的内容后,再做输出,输出过程只能用一个循环语句实现,不能分成两个部分。


Input

第一行输入整数n,代表下面有n行输入;

之后输入n行,每行先输入整数len与整数m(分别代表本表的元素总数与前半表的元素个数),之后输入len个整数,代表对应顺序表的每个元素。


Output

输出有n行,为每个顺序表前m个元素与后(len-m)个元素交换后的结果


Example Input

2
10 3 1 2 3 4 5 6 7 8 9 10
5 3 10 30 20 50 80



Example Output

4 5 6 7 8 9 10 1 2 3
50 80 10 30 20


01
#include<stdio.h>
02
#include<stdlib.h>
03
#define
maxsize 1000000
04
typedef
struct
05
{
06
int
data[maxsize];
07
int
last;
08
}
sl;
09
sl
*makeempty() //顺序表初始化函数
10
{
11
sl
*l;
12
l=(sl*)
malloc
(
sizeof
(sl));
13
l->last=-1;
14
return
l;
15
}
16
sl
*build(sl *l,
int
n)
//顺序表数据输入函数
17
{
18
int
i;
19
for
(i=0;
i<n; i++)
20
{
21
scanf
(
"%d"
,&l->data[i]);
22
}
23
l->last=n-1;
24
return
l;
25
}
26
sl
*change(sl *l,
int
m)
//顺序表逆置函数
27
{
28
int
i,j;
29
int
a;
30
for
(i=1;i<=m;i++)
31
{
32
a=l->data[0];
33
for
(j=0;j<l->last;j++)
34
{
35
l->data[j]=l->data[j+1];
36
}
37
l->data[l->last]=a;
38
}
39
return
l;
40
}
41
void
show(sl
*l,
int
n)
//顺序表输出函数
42
{
43
int
i;
44
for
(i=0;
i<=l->last; i++)
45
{
46
if
(i!=l->last)
47
printf
(
"%d
"
,l->data[i]);
48
else
49
printf
(
"%d\n"
,l->data[i]);
50
}
51
}
52
int
main()
53
{
54
sl
*l;
55
int
n,x,m;
56
scanf
(
"%d"
,&n);
57
while
(n--)
58
{
59
scanf
(
"%d
%d"
,&x,&m);
60
l=makeempty();
61
l=build(l,x);
62
change(l,m);
63
show(l,m);
64
}
65
return
0;
66
}
67
68
69
/***************************************************
70
User
name: jk160618郭衣鹏
71
Result:
Accepted
72
Take
time: 52ms
73
Take
Memory: 200KB
74
Submit
time: 2017-10-05 19:09:23
75
****************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: