下面是详细讲解如何手写C语言的集合List,并附带两个示例。
什么是集合List?
集合是一种数据结构,它可以存储任意类型的数据,并且可以动态地添加、删除和查询数据。其中最常见的集合是列表(List),它可以存储一组相同或不同类型的数据,并且可以根据需要进行扩展和缩减。
List的实现
下面介绍一下如何使用C语言手写一个List。一个List由一个指针和一个大小表示,指向一个数组,存储List中的元素。特别的,使用一个宏定义,定义List中元素的最大长度。
#define MAX_LEN 1000
typedef struct {
void* data[MAX_LEN];
int size;
} List;
上述代码定义了一个List结构体,其中void* data[MAX_LEN]
表示一个长度为MAX_LEN
的数组,该数组存储了List中的元素,int size
表示List的大小,即存储了多少个元素。
接下来,我们可以实现List中的主要方法(增加/删除/查询):
List *listCreate()
:创建一个新的List,并返回指针。void listAdd(List* list, void* item)
:将一个元素添加到List中。void listDelete(List* list, int index)
:从List中删除一个元素。void* listGet(List* list, int index)
:获取List中指定位置的元素。int listSize(List* list)
:获取List的大小。void listDestroy(List* list)
:销毁List。
下面是示例代码:
List* listCreate() {
List* list = (List*) malloc(sizeof(List));
list->size = 0;
return list;
}
void listAdd(List* list, void* item) {
if(list->size == MAX_LEN) {
return;
}
list->data[list->size++] = item;
}
void listDelete(List* list, int index) {
if(index < 0 || index >= list->size) {
return;
}
list->data[index] = NULL;
for(int i = index + 1; i < list->size; i++) {
list->data[i-1] = list->data[i];
list->data[i] = NULL;
}
list->size--;
}
void* listGet(List* list, int index) {
if(index < 0 || index >= list->size) {
return NULL;
}
return list->data[index];
}
int listSize(List* list) {
return list->size;
}
void listDestroy(List* list) {
for(int i = 0; i < list->size; i++) {
list->data[i] = NULL;
}
list->size = 0;
free(list);
}
示例1
现在我们来看第一个示例,我们将使用上述方法实现一个存储字符串的List,并添加几个元素进行演示。
int main() {
List* list = listCreate();
char* s1 = "hello";
char* s2 = "world";
listAdd(list, s1);
listAdd(list, s2);
printf("list size: %d\n", listSize(list));
for(int i = 0; i < listSize(list); i++) {
printf("list[%d]: %s\n", i, (char*) listGet(list, i));
}
listDestroy(list);
return 0;
}
运行上述代码,可以得到以下输出:
list size: 2
list[0]: hello
list[1]: world
示例2
接下来的示例,我们将把List当做一个存储数字的数组,添加一些整数,然后删除一些数据,并输出List的大小和内容。
int main() {
List* list = listCreate();
int n1 = 10, n2 = 20, n3 = 30;
listAdd(list, &n1);
listAdd(list, &n2);
listAdd(list, &n3);
printf("list size: %d\n", listSize(list));
for(int i = 0; i < listSize(list); i++) {
int* p = (int*) listGet(list, i);
printf("list[%d]: %d\n", i, *p);
}
listDelete(list, 1);
printf("list size: %d\n", listSize(list));
for(int i = 0; i < listSize(list); i++) {
int* p = (int*) listGet(list, i);
printf("list[%d]: %d\n", i, *p);
}
listDestroy(list);
return 0;
}
该示例输入对象为整数,在添加完整数之后,中间删除了元素:20 ,然后再输出List。运行代码,可以得到以下输出:
list size: 3
list[0]: 10
list[1]: 20
list[2]: 30
list size: 2
list[0]: 10
list[1]: 30
综上所述,我们以 C 语言手写集合 List 的示例代码为例,讲解了如何手写一个List以及如何操作它,包括其创建、添加、删除、查询和销毁方法,并且通过两个不同的示例展示了如何使用它以及如何逐步更改它。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言手写集合List的示例代码 - Python技术站