用C语言建立含有n个数据元素的顺序表。如:L={14, 21, 7, 45, 28, 3, 56, 32},并输出该表中各元素的值,并在45之前插入元素48。
时间: 2024-10-20 18:18:15 浏览: 18
在C语言中,我们可以创建一个顺序表(也叫数组列表),通过定义一个结构体存储数据元素,并使用动态内存分配来管理表的大小。这里是一个简单的示例,假设我们有一个名为`Element`的结构体表示单个元素,以及`List`类型的结构体来保存整数列表及其长度:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个结构体用于存储数据元素
typedef struct {
int data;
struct List *next;
} Element;
// 序列表结构体
typedef struct {
int size;
Element **data; // 使用指针指向元素
} List;
// 初始化序列表
List* init_list(int n) {
List *list = (List*)malloc(sizeof(List));
list->size = n;
list->data = (Element**)malloc(n * sizeof(Element*));
for (int i = 0; i < n; i++) {
list->data[i] = NULL;
}
return list;
}
// 插入元素
void insert_before(List *list, int value, int target_value) {
int index = -1;
for (int i = 0; i < list->size; i++) {
if (list->data[i]->data == target_value) {
index = i;
break;
}
}
if (index != -1) {
Element *new_node = (Element*)malloc(sizeof(Element));
new_node->data = value;
new_node->next = list->data[index];
list->data[index] = new_node;
} else {
printf("Target value not found in the list.\n");
}
}
// 输出元素
void print_list(List *list) {
for (int i = 0; i < list->size; i++) {
if (list->data[i]) {
printf("%d ", list->data[i]->data);
} else {
printf("<NULL> ");
}
}
printf("\n");
}
int main() {
// 初始化一个包含8个元素的列表
List *L = init_list(8);
// 添加初始元素
for (int i = 0; i < 8; i++) {
L->data[i] = (Element*)malloc(sizeof(Element));
L->data[i]->data = 14 + i * 10;
L->data[i]->next = L->data[(i+1)%8]; // 循环链接,形成L={14, 21, ..., 56, 32}
}
// 输出原始列表
print_list(L);
// 在45之前插入48
insert_before(L, 48, 45);
// 再次输出更新后的列表
print_list(L);
// 清理内存
for (int i = 0; i < L->size; i++) {
if (L->data[i]) {
free(L->data[i]);
}
}
free(L->data);
free(L);
return 0;
}
```
在这个例子中,程序首先初始化了一个列表,然后添加了指定的数据。接着,在45的前面插入了元素48,最后打印出列表的内容并在主函数结束时释放了所有内存。
阅读全文