用c语言实现初始化线性表
时间: 2024-09-30 19:04:27 浏览: 39
在C语言中,初始化线性表通常涉及到动态内存分配和元素的初始化。这里以单向链表为例,因为链表的数据结构非常适合表示动态大小的线性表。
首先,你需要包含头文件`stdio.h`, `stdlib.h`来处理输入/输出以及内存管理:
```c
#include <stdio.h>
#include <stdlib.h>
```
然后定义一个链表节点结构体,包含数据域和指向下一个节点的指针:
```c
typedef struct Node {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} Node;
```
接下来创建一个函数来初始化链表并添加元素:
```c
Node* initializeList(int n) {
Node* head = NULL; // 初始化链表头指针
if (n <= 0) { // 避免初始化空表
printf("Invalid input for list size.\n");
return NULL;
}
// 分配内存
Node** nodes = malloc(n * sizeof(Node*));
if (!nodes) {
perror("Memory allocation failed.");
return NULL;
}
// 初始化每个节点
for (int i = 0; i < n; i++) {
nodes[i] = (Node*)malloc(sizeof(Node)); // 动态分配内存
if (!nodes[i]) {
free(nodes); // 如果失败,释放部分内存
perror("Memory allocation failed.");
return NULL;
}
nodes[i]->data = i + 1; // 设置初始值
nodes[i]->next = NULL; // 初始节点的下一个指针为空
}
head = nodes[0]; // 将第一个节点设置为头节点
return head;
}
```
最后,你可以通过这个函数创建一个新的线性表,并在需要时遍历它:
```c
void printList(Node* head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
int main() {
int n;
printf("Enter the size of the list: ");
scanf("%d", &n);
Node* listHead = initializeList(n);
if (listHead) {
printList(listHead);
free(listHead); // 清理内存
}
return 0;
}
```
阅读全文