本关任务:输入n个整数,建立n个元素的顺序表,然后打印出来。要求把顺序表的存储结构定义成一个结构体,至少包括一个数组(固定长或不固定长都行)存放数据,至少定义一个变量指示哪些位置存放了元素;建立和打印写成两个函数,再编写主程序调用上面两个函数。用C语言
时间: 2024-10-11 10:10:00 浏览: 11
在C语言中,你可以创建一个名为`SequentialList`的结构体来表示顺序表,包含一个动态大小的整型数组用于存储元素,以及一个指针作为索引来跟踪已填充的位置。下面是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表结构体
typedef struct {
int* data; // 整型数组存放数据
size_t size; // 当前元素的数量
size_t capacity; // 数组的最大容量
} SequentialList;
// 动态初始化顺序表
SequentialList* create_list(size_t capacity) {
SequentialList* list = (SequentialList*)malloc(sizeof(SequentialList));
list->data = malloc(capacity * sizeof(int)); // 分配内存
list->size = 0;
list->capacity = capacity;
return list;
}
// 插入元素到列表并自动调整容量(若满则扩容)
void insert(SequentialList* list, int value) {
if (list->size == list->capacity) {
list->capacity *= 2; // 如果满了,将容量翻倍
list->data = realloc(list->data, list->capacity * sizeof(int)); // 扩容
}
list->data[list->size++] = value;
}
// 打印顺序表
void print_list(const SequentialList* list) {
for (size_t i = 0; i < list->size; i++) {
printf("%d ", list->data[i]);
}
printf("\n");
}
// 主程序示例
int main() {
int n;
printf("请输入整数的数量(n): ");
scanf("%d", &n);
SequentialList* list = create_list(n);
for (int i = 0; i < n; i++) {
int input;
printf("请输入第%d个整数: ", i + 1);
scanf("%d", &input);
insert(list, input);
}
print_list(list);
free(list->data); // 释放内存
free(list);
return 0;
}
```
在这个例子中,`create_list`函数用于初始化列表,`insert`函数负责插入元素,并在必要时自动扩容。`print_list`函数用来显示列表内容。`main`函数获取用户输入的整数数量,并调用上述函数完成操作。
阅读全文