c语言创建一个双向链表声明对应于整数的双向链表的数据类型
时间: 2023-09-15 15:23:05 浏览: 103
以下是一个双向链表声明对应于整数的数据类型的示例:
```
struct Node {
int data;
struct Node* prev;
struct Node* next;
};
typedef struct Node node;
node* createNode(int data) {
node* newNode = (node*) malloc(sizeof(node));
newNode->data = data;
newNode->prev = NULL;
newNode->next = NULL;
return newNode;
}
node* insertAtBeginning(node* head, int data) {
node* newNode = createNode(data);
if (head == NULL) {
head = newNode;
} else {
newNode->next = head;
head->prev = newNode;
head = newNode;
}
return head;
}
node* insertAtEnd(node* head, int data) {
node* newNode = createNode(data);
if (head == NULL) {
head = newNode;
} else {
node* temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
newNode->prev = temp;
}
return head;
}
node* deleteNode(node* head, int data) {
if (head == NULL) {
printf("List is empty\n");
return head;
} else if (head->data == data) {
node* temp = head;
head = head->next;
head->prev = NULL;
free(temp);
} else {
node* temp = head;
while (temp != NULL && temp->data != data) {
temp = temp->next;
}
if (temp == NULL) {
printf("Element not found\n");
} else {
temp->prev->next = temp->next;
if (temp->next != NULL) {
temp->next->prev = temp->prev;
}
free(temp);
}
}
return head;
}
void display(node* head) {
if (head == NULL) {
printf("List is empty\n");
} else {
node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
}
```
这个数据类型包含一个结构体 `Node`,它有三个成员变量:`data`,`prev`,和 `next`。其中,`data` 存储整数数据,`prev` 指向前一个节点,`next` 指向下一个节点。
此外,这个数据类型还包含了一些函数,如 `createNode()` 用于创建一个节点,`insertAtBeginning()` 用于在链表开头插入节点,`insertAtEnd()` 用于在链表末尾插入节点,`deleteNode()` 用于删除特定节点,和 `display()` 用于遍历并打印链表中的所有元素。
阅读全文