上一章:數(shù)據(jù)結(jié)構(gòu)——單向鏈表(C語(yǔ)言版)-CSDN博客
目錄
什么是雙向鏈表?
雙向鏈表的節(jié)點(diǎn)結(jié)構(gòu)
雙向鏈表的基本操作
完整的雙向鏈表示例
總結(jié)
什么是雙向鏈表?
雙向鏈表是一種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),它由一系列節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)包含兩個(gè)指針:一個(gè)指向前一個(gè)節(jié)點(diǎn),一個(gè)指向后一個(gè)節(jié)點(diǎn)。雙向鏈表可以在任意位置高效地插入和刪除節(jié)點(diǎn),相比單向鏈表,雙向鏈表可以雙向遍歷,但相應(yīng)地需要更多的內(nèi)存空間存儲(chǔ)額外的指針。
雙向鏈表的節(jié)點(diǎn)結(jié)構(gòu)
typedef struct Node {
int data;
struct Node* prev;
struct Node* next;
} Node;
雙向鏈表的基本操作
-
初始化雙向鏈表
Node* initLinkedList() { Node* head = (Node*)malloc(sizeof(Node)); head->prev = NULL; head->next = NULL; return head; }
-
插入節(jié)點(diǎn)?
void insertNode(Node* prevNode, int data) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->prev = prevNode; newNode->next = prevNode->next; prevNode->next->prev = newNode; prevNode->next = newNode;}
? ? 3.刪除節(jié)點(diǎn)
void deleteNode(Node* delNode) {
delNode->prev->next = delNode->next;
delNode->next->prev = delNode->prev;
free(delNode);
}
-
遍歷雙向鏈表
void printLinkedList(Node* head) { Node* current = head->next; while (current != NULL) { printf("%d ", current->data); current = current->next; } printf("\\n"); }
完整的雙向鏈表示例
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* prev;
struct Node* next;
} Node;
Node* initLinkedList() {
Node* head = (Node*)malloc(sizeof(Node));
head->prev = NULL;
head->next = NULL;
return head;
}
void insertNode(Node* prevNode, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->prev = prevNode;
newNode->next = prevNode->next;
prevNode->next->prev = newNode;
prevNode->next = newNode;
}
void deleteNode(Node* delNode) {
delNode->prev->next = delNode->next;
delNode->next->prev = delNode->prev;
free(delNode);
}
void printLinkedList(Node* head) {
Node* current = head->next;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\\n");
}
int main() {
Node* head = initLinkedList();
insertNode(head, 1);
insertNode(head->next, 2);
insertNode(head->next->next, 3);
printLinkedList(head);
deleteNode(head->next);
printLinkedList(head);
return 0;
}
總結(jié)
通過(guò)上述代碼示例,我們實(shí)現(xiàn)了雙向鏈表的基本操作,包括初始化、插入和刪除節(jié)點(diǎn),以及遍歷鏈表。雙向鏈表是一種靈活且高效的數(shù)據(jù)結(jié)構(gòu),適用于需要頻繁插入和刪除操作的場(chǎng)景。通過(guò)深入理解雙向鏈表的實(shí)現(xiàn)原理,我們可以更好地應(yīng)用它解決實(shí)際問(wèn)題。
由以上內(nèi)容我們其實(shí)就可以看到在應(yīng)用與理解層面,雙向鏈表相較于單向鏈表有很大的優(yōu)勢(shì),但在具體應(yīng)用中還需要我們實(shí)際情況實(shí)際判斷。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-843522.html
感謝觀看,還請(qǐng)各位大佬點(diǎn)贊支持以下!??!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-843522.html
到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)——雙向鏈表(C語(yǔ)言版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!