C++實現雙向連結串列程式
雙向連結串列是一種資料結構,它由使用自引用結構建立的節點組成。每個節點包含三個部分:資料、指向下一個連結串列節點的引用和指向前一個連結串列節點的引用。
只需要第一個連結串列節點的引用就可以訪問整個連結串列。這被稱為頭節點。連結串列中的最後一個節點不指向任何節點,因此該部分儲存NULL。此外,雙向連結串列可以雙向遍歷,因為每個節點都指向其前一個節點和下一個節點。
實現雙向連結串列的程式如下所示。
示例
#include <iostream> using namespace std; struct Node { int data; struct Node *prev; struct Node *next; }; struct Node* head = NULL; void insert(int newdata) { struct Node* newnode = (struct Node*) malloc(sizeof(struct Node)); newnode->data = newdata; newnode->prev = NULL; newnode->next = head; if(head != NULL) head->prev = newnode ; head = newnode; } void display() { struct Node* ptr; ptr = head; while(ptr != NULL) { cout<< ptr->data <<" "; ptr = ptr->next; } } int main() { insert(3); insert(1); insert(7); insert(2); insert(9); cout<<"The doubly linked list is: "; display(); return 0; }
輸出
The doubly linked list is: 9 2 7 1 3
在上面的程式中,結構體Node構成雙向連結串列節點。它包含資料以及指向下一個和前一個連結串列節點的指標。如下所示。
struct Node { int data; struct Node *prev; struct Node *next; };
函式insert()將資料插入到雙向連結串列的開頭。它建立一個newnode並將數字插入到newnode的資料欄位中。然後,newnode中的prev指標指向NULL(因為它是在開頭插入的),next指標指向head。如果head不為NULL,則head的prev指標指向newnode。最後,head指向newnode,即連結串列從此處開始。如下所示。
void insert(int newdata) { struct Node* newnode = (struct Node*) malloc(sizeof(struct Node)); newnode->data = newdata; newnode->prev = NULL; newnode->next = head; if(head != NULL) head->prev = newnode ; head = newnode; }
函式display()顯示整個雙向連結串列。首先,ptr指向head。然後,它不斷向前移動到下一個節點,直到列印所有節點的資料值。如下所示。
void display() { struct Node* ptr; ptr = head; while(ptr != NULL) { cout<< ptr->data <<" "; ptr = ptr->next; } }
在main()函式中,首先透過呼叫insert()將各種值插入到雙向連結串列中。然後顯示雙向連結串列。如下所示。
int main() { insert(3); insert(1); insert(7); insert(2); insert(9); cout<<"The doubly linked list is: "; display(); return 0; }
廣告