用C语言写一个双向列表
时间: 2023-03-28 07:01:42 浏览: 85
双向链表是一种常见的数据结构,可以用C语言来实现。以下是一个简单的双向链表的实现示例:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *prev;
struct node *next;
} Node;
Node *create_node(int data) {
Node *new_node = (Node *)malloc(sizeof(Node));
new_node->data = data;
new_node->prev = NULL;
new_node->next = NULL;
return new_node;
}
void insert_node(Node **head, int data) {
Node *new_node = create_node(data);
if (*head == NULL) {
*head = new_node;
return;
}
Node *current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = new_node;
new_node->prev = current;
}
void delete_node(Node **head, int data) {
if (*head == NULL) {
return;
}
Node *current = *head;
while (current != NULL && current->data != data) {
current = current->next;
}
if (current == NULL) {
return;
}
if (current->prev != NULL) {
current->prev->next = current->next;
} else {
*head = current->next;
}
if (current->next != NULL) {
current->next->prev = current->prev;
}
free(current);
}
void print_list(Node *head) {
Node *current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
Node *head = NULL;
insert_node(&head, 1);
insert_node(&head, 2);
insert_node(&head, 3);
print_list(head);
delete_node(&head, 2);
print_list(head);
return ;
}
```
以上是一个简单的双向链表的实现示例,可以用来存储任意类型的数据。