关于结构体指针的问题,在这里做了几个测试
就结构体SqList来说明,L是类型为SqList的结构体变量,
-
当参数直接引用L时,取结构体内部元素的时候,用L.XXXX,比如L.data;
-
当参数引用为指针,即*L时,L变成结构体指针变量,取结构体内部元素时,用L->XXXX,比如L->data。
这边测试了几个函数,引用L时,参数为它本身或者为指向它的指针均可;但是在创建顺序表时,只能用*L,指针形式。
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct
{
ElemType *data;
int length;
}SqList;
void creat(SqList *L)
{
int len;
printf("请输入待建表的表长:");
scanf("%d", &len);
L->data = (SqList *)malloc(sizeof(int)*(len));
int a;
for (int i=0; i<len; i++)
{
printf("请输入第%d个元素值:", i+1);
scanf("%d", &a);
L->data[i] = a;
}
L->length = len;
}
void print(SqList A)
{
for(int i=0; i<A.length; i++)
printf("%d\n", A.data[i]);
}
void reverse(SqList A, int n)
{//实现顺序表A的就地逆置, n为表长
if(n>0)
{
int temp;
for(int i = 0; i < n/2; i++)
{
temp = A.data[i];
A.data[i] = A.data[n-i-1];
A.data[n-i-1] = temp;
}
}
}
void main()
{
SqList A;
creat(&A);
int n;
printf("请确认表长n的值:");
scanf("%d", &n);
reverse(A, n);
print(A);
return;
}