为什么会修改data[2]的值,搞半天没弄明白,到底什么原因啊,求解答,谢谢。
除了把你上面提供的代码的函数声明处添加了相应参数后,以及在main函数里把L变量的类型改为LIST后,代码可以正常运行了。
两处修改都因为编译时报错,第一个是因为定义函数处的原型要和声明函数处原型一致,第二个是因为几处函数都需要一个LIST指针,而不是LIST指针的指针,修改后可以正常运行。修改如下:
#include<stdio.h>
struct MYLIST{
int length;
int data[100];
};
typedef struct MYLIST LIST;
void Isert(LIST * L ,int n);
void MyPrint(LIST *L);
void MySort(LIST*L);
void Add(LIST*L,int x);
int main(void){
LIST L ;
int n;
int x;
printf("为数组赋多少元素:");
scanf("%d",&n);
Isert(&L,n);
printf("顺序表数据原顺序为:");
MyPrint(&L);
printf("\n升序排序后的顺序为:");
MySort(&L);
MyPrint(&L);
printf("\n输入您要添加的数据:");
scanf("%d",&x);
Add(&L,x);
MySort(&L);
MyPrint(&L);
}
void Isert(LIST * L,int n){
L->length = n;
for(int i=1;i<=n;i++){
printf("第%d个元素为:",i);
scanf("%d",&L->data[i-1]);
}
}
void MyPrint(LIST * L){
// printf("L-length=%d\n",L->length);
for(int i=0;i<L->length;i++){
printf("%d\t",L->data[i]);
// printf("L->data[%d]=%d\t",i,L->data[i]);
}
printf("\n");
}
void MySort(LIST *L){
//printf("L-length=%d\n",L->length);
for(int i=0;i<L->length;i++){
// printf("L->data[%d]=%d\t",i,L->data[i]);
for(int j=i+1;j<L->length;j++){
if(L->data[i]>=L->data[j]){
int temp = L->data[i];
L->data[i] = L->data[j];
L->data[j] = temp;
}
}
}
}
void Add(LIST * L, int x){
L->data[L->length] = x;
L->length++;
}