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

2024-11-29 16:23:24
推荐回答(2个)
回答(1):

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

#include
#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);
printf("互换前\n");
print(&test);
printf("m & n:\n");
scanf("%d%d",&m,&n);
change(&test,m,n);
printf("互换后\n");
print(&test);
return 0;
}

void change(struct SqList *list,int m,int n)
{
/渗旦*基本思路:
第1步:b1和am互换,然后b1又与a(m-1)互换……重复m次,直到b1移到原来a1的位置,而a1~am都后散汪移一位
第2步:b2和am互换,然后b2又与a(m-1)互换……重复m次,直到b2移到原来a2的位置,而a1~am都后移一位
……
第n步:bn和am互换,然后bn又与a(m-1)互换……重复m次,直到bn移到原来an的位置,而a1~am都后移一位冲喊仔
*/
int i,j;
int temp;
for(i=0;i {
for(j=0;j {
temp=list->data[m+i-j];
list->data[m+i-j]=list->data[m+i-j-1];
list->data[m+i-j-1]=temp;
}
}
}

void input(struct SqList *list) /*逐个输入数据*/
{
int i=0;
do
{
scanf("%d",&(list->data[i]));
}while(list->data[i]!=-1&&++i);/*姑且定义输入为-1时结束*/
list->length=i;
}

void print(struct SqList *list)/*输出函数*/
{
int i;
for(i=0;ilength;i++)
{
printf("%d ",list->data[i]);
}
printf("\n");
}

回答(2):

void swap(struct SqList C)
{
int i,t;
for(i=0;i {
t=C.data[i];
C.data[i]=C.data[m-i-1];
C.data[m-i-1]=t;
}
for(i=0;i {
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;
}
}