输入n个整数,建立n个元素的顺序表,然后打印出来。要求把顺序表的存储结构定义成一个结构体,至少包括一个数组(固定长或不固定长都行)存放数据,至少定义一个变量指示哪些位置存放了元素;建立和打印写成两个函数,再编写主程序调用上面两个函数。
时间: 2024-10-08 22:25:52 浏览: 21
在C语言中,我们可以创建一个结构体`SequentialList`来表示顺序表,包含一个动态数组来存储整数和一个标志数组来标记哪些位置已存储了元素。首先,定义结构体:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序列表结构体
typedef struct {
int* data; // 数据数组
int capacity; // 数组容量
int count; // 存储元素的数量
int* isFilled; // 标志数组,0表示未填充,1表示已填充
} SequentialList;
// 函数声明
SequentialList* create_list(int n);
void print_list(SequentialList* list);
```
接下来,我们实现这两个函数:
```c
// 创建顺序表函数
SequentialList* create_list(int n) {
SequentialList* list = (SequentialList*)malloc(sizeof(SequentialList));
if (!list) {
printf("Memory allocation failed.\n");
return NULL;
}
list->data = malloc(n * sizeof(int));
if (!list->data) {
free(list);
printf("Memory allocation for data failed.\n");
return NULL;
}
list->capacity = n;
list->count = 0;
list->isFilled = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
list->isFilled[i] = 0;
}
return list;
}
// 打印顺序表函数
void print_list(SequentialList* list) {
if (!list || list->count == 0) {
printf("The list is empty.\n");
return;
}
for (int i = 0; i < list->count; i++) {
if (list->isFilled[i]) {
printf("%d ", list->data[i]);
} else {
printf("Empty position %d\n", i);
}
}
printf("\n");
}
```
最后,在主程序中调用这两个函数:
```c
int main() {
int n;
printf("Enter the number of integers to store: ");
scanf("%d", &n);
SequentialList* list = create_list(n);
if (list) {
// 添加元素并设置标志
for (int i = 0; i < n; i++) {
int num;
printf("Enter integer %d: ", i+1);
scanf("%d", &num);
list->data[i] = num;
list->isFilled[i] = 1;
}
print_list(list);
free(list->isFilled);
free(list->data);
free(list);
} else {
return 1;
}
return 0;
}
```
阅读全文