📅  最后修改于: 2023-12-03 15:32:43.197000             🧑  作者: Mango
在 C 编程语言中,数组是一种固定大小的数据结构,它的大小在编译时确定。然而,有时候需要一个动态大小的数据结构,这时候就需要使用 List。
List 可以在运行时根据需要动态增长或缩减大小。 它允许向其添加或删除元素,并允许访问任何元素。在 C 标准库中没有内置的 List 数据结构,但是通过使用指针可以轻松地创建一个 List。
为了实现 List,需要定义一个指向链表第一个节点的指针。链表节点包含一个数据元素和一个指向下一个节点的指针。下面是一个定义 List 节点的数据结构:
typedef struct node {
int data;
struct node *next;
} Node;
要创建 List,需要定义一个头指针和一个数组尺寸。在添加和删除节点时,需要遍历整个链表以定位操作的节点。下面是一个具有添加,删除和遍历功能的 List 的代码实现:
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
void add(Node **head, int data) {
Node *newNode = (Node*) malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
return;
}
Node *temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
void removeNode(Node **head, int data) {
Node *temp = *head, *prev;
if (temp != NULL && temp->data == data) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != data) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) {
return;
}
prev->next = temp->next;
free(temp);
}
void printList(Node *head) {
Node *temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
}
int main() {
Node *head = NULL;
add(&head, 1);
add(&head, 2);
add(&head, 3);
printf("List: ");
printList(head);
printf("\n");
removeNode(&head, 2);
printf("List after deleting 2: ");
printList(head);
printf("\n");
return 0;
}
List 是一种在 C 编程语言中实现动态大小数据结构的方法。通过使用指针和链表节点,可以轻松地创建 List。在添加和删除节点时,需要遍历整个链表以定位要操作的节点。List 提供了一个可以动态增长或缩减大小的数据结构,在某些情况下,它可能比数组更为适用。