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;
}

更新於:2023年10月5日

36K+ 瀏覽量

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告