数据结构(c语言)的程序题

来源:百度知道 编辑:UC知道 时间:2024/05/15 06:44:51
2.已知顺序表C=(a1,a2,...,am,b1,b2,...,bn),试设计算法将c中元素两部分互换,变为C=(b1,b2,...,bn,a1,a2,...,am)。要求:不能使用额外的数组空间。
提示:1)假设顺序表存放的是整数,顺序表结构可以定义为:
struct SqList{int data[Max];
int length;}
2)m,n不一定相等。

希望得到程序及详细解释

void swap(struct SqList C)
{
int i,t;
for(i=0;i<m/2;i++)//将前m个元素倒序即(am,am-1,...a2,a1,b1,b2,...bn)
{
t=C.data[i];
C.data[i]=C.data[m-i-1];
C.data[m-i-1]=t;
}
for(i=0;i<n/2;i++)//将后n个元素倒序即(am,am-1,...a2,a1,bn,bn-1,...b2,b1)
{
t=C.data[m+i];
C.data[m+i]=C.data[m+n-i-1];
C.data[m+n-i-1]=t;
}
for(i=0;i<(m+n)/2;i++)//前后交换就得到序列(b1,b2,...,bn-1,bn,a1,a2,...,an-1,am)
{
t=C.data[i];
C.data[i]=C.data[m+n-i-1];
C.data[m+n-i-1]=t;
}
}

/*匆忙写就,算法应该还可以改得更好*/
/*如果不明白,可以发消息给我*/

#include <stdio.h>
#define Max 256
struct SqList/*顺序表*/
{
int data[Max];/*储存数据*/
int length;/*元素个数*/
}test;

int main(int argc, char *argv[])
{
void change(struct SqList *list,int m,int n);
void input(struct SqList *list);
void print(struct SqList *list);
int m,n;
input(&test);<