1.test函数
void testInitList(SL* sl) {
//SL sl;//在创建结构体对象的时候就把这个结构体的地址定下来了,要改变其内部,需传递地址
SQLinitList(sl);//无敌之精华,写入csdn
}
void test_pushback() {
SL sl;
//SQLinitList(&sl);
testInitList(&sl);
SQLPushBack(&sl, 1);
SQLPushBack(&sl, 2);
SQLPushBack(&sl, 3);
SQLPushBack(&sl, 4);
SQLPushBack(&sl, 5);
SQLPushBack(&sl, 6);
SQLPushBack(&sl, 7);
SQL_print(sl);
}
2.function函数
//1.初始化
void SQLinitList(SL* ps) {
ps->a = NULL;
ps->size = 0;
ps->capacity = 0;
}
//2.头插尾插头删尾删
void SQLPushBack(SL* ps, SQDataType x) {
if (ps->size == ps->capacity) {
int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
SQDataType* tmp = (SQDataType*)realloc(ps->a, newcapacity * 2 * sizeof(SQDataType));
if (tmp == NULL) {
printf("realloc is error\n");
exit(-1);
}
else {
ps->a = tmp;
ps->capacity = newcapacity;
}
}
ps->a[ps->size] = x;
ps->size++;
}
3.头文件函数
typedef int SQDataType;
typedef struct SeqList {
SQDataType* a;
int size;
int capacity;
}SL;
//1.初始化
void SQLinitList(SL* ps);
//2.头插尾插头删尾删
void SQLPushBack(SL* ps, SQDataType x);
这儿的test函数之间的
void testInitList(SL* sl) {
SQLinitList(sl);//无敌之精华,写入csdn
}
不能写成 SQLinitList(&sl);,因为这儿的sl已经是结构体对象的地址了,如果要在函数内将这个结构体的地址在传给其他地方,那么因该直接传sl,而不是&sl,因为&sl是地址的地址。
解决方法2:
跳过testInitList()函数,直接在test_pushback()函数中调用初始化函数完成初始化,
void test_pushback() {
SL sl;
SQLinitList(&sl);
//testInitList(&sl);
SQLPushBack(&sl, 1);
SQLPushBack(&sl, 2);
SQLPushBack(&sl, 3);
SQLPushBack(&sl, 4);
SQLPushBack(&sl, 5);
SQLPushBack(&sl, 6);
SQLPushBack(&sl, 7);
SQL_print(sl);
}