#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct{
int* data;
int size;
}SqList;
// ADT
// 只能通过函数接口修改操作结构体,不要直接访问结构体变量。
// FILE
//
// 最佳实践
// 1. 第一参数最好是结构体指针。
// 2. 函数名分为两部分:结构体名+动词。
// 3. 参数一定要检查,指针判空,下标判断是否在有效范围内。
// 4. 返回值,尽量包含执行成功失败的信息。
bool sqlist_init(SqList* plist){
if(NULL == plist) return false;
plist->data = NULL;
plist->size = 0;
return true;
}
bool sqlist_append(SqList* plist,int element){
if(NULL == plist) return false;
plist->data = (int*)realloc(plist->data,(plist->size+1)*sizeof(int));
if(NULL == plist->data) return false;
plist->data[plist->size] = element;
++plist->size;
return true;
}
int sqlist_size(SqList* plist){
if(NULL == plist) return -1;
return plist->size;
}
bool sqlist_get(SqList* plist,int index,int* element){
if(NULL == plist) return false;
if(index < 0 || index >= plist->size) return false;
*element = plist->data[index];
return true;
}
bool sqlist_destory(SqList* plist){
if(NULL == plist) return false;
free(plist->data);
plist->data = NULL;
plist->size = 0;
return true;
}
int main(){
// SqList list = {NULL,0};
//
// 初始化顺序表
SqList list;
sqlist_init(&list);
while(true){
int num;
if(EOF == scanf("%d",&num)){
break;
}
// 顺序表尾添加数据
sqlist_append(&list,num);
}
// 获取顺序表数据数量
int size = sqlist_size(&list);
for(int i=0;i<size;++i){
// 获取数据表的数据
int num;
sqlist_get(&list,size-1-i,&num);
printf("%d ",num);
}
printf("\n");
//free(list.p);
//list.p = NULL;
// 释放顺序表
sqlist_destory(&list);
return 0;
}
顺序表示例代码
最新推荐文章于 2023-06-19 10:33:49 发布