设计一个可以在数组中插入任意多个任意数据类型数据的函数,然后设计一个主函数在该数组中插入10个整数类型的数据。要求把主函数设计成一个源文件(建议:main.c),把其余部分设计为一个头文件(建议:SeqList.h)
时间: 2024-09-13 08:14:15 浏览: 63
为了实现这个功能,我们可以创建一个名为`SeqList.h`的头文件,用于声明序列列表的结构体、函数原型以及插入元素的相关操作。同时,在`main.c`文件中编写主函数,演示如何在数组中插入整数。
**SeqList.h:**
```c
#ifndef SeqList_h
#define SeqList_h
#include <stdio.h>
#include <stdlib.h>
typedef struct {
void* data; // 存储不同类型数据的指针
size_t size;
size_t capacity;
} SeqListNode;
// 插入元素到列表的函数原型
void insert(SeqListNode* list, void* item);
// 打印列表内容的辅助函数
void print_list(SeqListNode* list);
#endif // SeqList_h
```
**main.c:**
```c
#include "SeqList.h"
int main() {
SeqListNode list;
list.size = 0;
list.capacity = 10;
for (size_t i = 0; i < 10; i++) {
int num = i + 1; // 创建并插入10个整数
insert(&list, &num);
}
printf("Initial list:\n");
print_list(&list);
return 0;
}
// 实现插入函数
void insert(SeqListNode* list, void* item) {
if (list->size == list->capacity) {
list->capacity *= 2; // 当达到容量上限时扩大容量
list->data = realloc(list->data, sizeof(void*) * list->capacity);
}
list->data[list->size++] = item;
}
// 实现打印列表函数
void print_list(SeqListNode* list) {
for (size_t i = 0; i < list->size; i++) {
printf("%d ", *(int*)list->data[i]); // 假设数据都是整数,这里仅作展示
}
printf("\n");
}
```
在这个示例中,我们定义了一个简单的序列列表,它存储`void*`类型的指针,可以容纳任意数据类型的数据。`insert`函数负责添加元素,`print_list`函数用于打印列表的内容。在`main`函数中,我们展示了如何插入10个整数。
注意:实际应用中,我们需要处理类型转换,例如使用`union`或者模板来确保正确地存储和访问不同类型的值。这里简化了示例以便于理解。
阅读全文