双向链表的创建以及基本操作C语言,要求有完整代码和注释
时间: 2024-04-08 11:31:25 浏览: 66
用C语言描述双向链表与实现,及基本操作
当然,下面是一个简单的双向链表的创建和基本操作的C语言代码,带有注释说明每个步骤的作用:
```c
#include <stdio.h>
#include <stdlib.h>
// 双向链表的节点结构
typedef struct Node {
int data; // 节点的数据
struct Node* prev; // 指向前一个节点的指针
struct Node* next; // 指向后一个节点的指针
} Node;
// 创建一个新的节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->prev = NULL;
newNode->next = NULL;
return newNode;
}
// 在链表的末尾插入一个节点
void insertAtEnd(Node** head, int data) {
Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
return;
}
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
newNode->prev = temp;
}
// 在链表的开头插入一个节点
void insertAtBeginning(Node** head, int data) {
Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
return;
}
newNode->next = *head;
(*head)->prev = newNode;
*head = newNode;
}
// 删除链表中的指定节点
void deleteNode(Node** head, Node* delNode) {
if (*head == NULL || delNode == NULL) {
return;
}
if (*head == delNode) {
*head = delNode->next;
}
if (delNode->next != NULL) {
delNode->next->prev = delNode->prev;
}
if (delNode->prev != NULL) {
delNode->prev->next = delNode->next;
}
free(delNode);
}
// 打印链表中的所有节点
void printList(Node* head) {
if (head == NULL) {
printf("链表为空。\n");
return;
}
printf("链表的节点数据为:");
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node* head = NULL;
// 在链表末尾插入节点
insertAtEnd(&head, 1);
insertAtEnd(&head, 2);
insertAtEnd(&head, 3);
// 在链表开头插入节点
insertAtBeginning(&head, 4);
insertAtBeginning(&head, 5);
// 打印链表
printList(head);
// 删除链表中的节点
deleteNode(&head, head); // 删除头节点
deleteNode(&head, head->next); // 删除下一个节点
// 打印链表
printList(head);
return 0;
}
```
这段代码实现了双向链表的创建以及基本操作,包括在链表末尾插入节点、在链表开头插入节点和删除链表中的指定节点。在主函数中,我们创建了一个双向链表,插入了几个节点,并打印了链表的内容。然后,我们删除了链表中的两个节点,并再次打印链表的内容。
阅读全文