雙向連結串列是連結串列變型,相比於單連結串列導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向連結串列的概念
Link ? 連結串列的每個鏈路儲存資料稱為一個元素。
Next ? 連結串列的每個連結包含一個連結到下一個被稱為下一個(Next)。
Prev ? 連結串列的每個連結包含一個連結,稱為上一個連結(Prev)。
LinkedList ? LinkedList包含連線連結到名為首先第一個連結,並稱為最後的最後一個連結(Last)。
按照如上圖中所示,以下是要考慮的重要問題。
下面是一個列表支援的基本操作。
插入 ? 在列表的開頭新增的元素。
刪除? 刪除在列表開頭的元素。
插入最後 ? 在列表的末尾新增元素。
刪除最後 ? 刪除列表的末尾的元素。
插入之後? 列表中的專案後新增元素。
刪除 ? 用鍵從列表中刪除一個元素。
正向顯示 ? 以向前的方式顯示完整列表。
後向顯示 ? 向後的方式顯示完整列表。
下面的程式碼演示了插入操作,從一個雙向連結串列的開始。
//insert link at the first location void insertFirst(int key, int data){ //create a link struct node *link = (struct node*) malloc(sizeof(struct node)); link->key = key; link->data = data; if(isEmpty()){ //make it the last link last = link; }else { //update first prev link head->prev = link; } //point it to old first link link->next = head; //point first to new first link head = link; }
下面的程式碼演示了刪除操作,在一個雙向連結串列的開始。
//delete first item struct node* deleteFirst(){ //save reference to first link struct node *tempLink = head; //if only one link if(head->next == NULL){ last = NULL; }else { head->next->prev = NULL; } head = head->next; //return the deleted link return tempLink; }
下面的程式碼演示了在一個雙向連結串列的最後一個位置的插入操作。
//insert link at the last location void insertLast(int key, int data){ //create a link struct node *link = (struct node*) malloc(sizeof(struct node)); link->key = key; link->data = data; if(isEmpty()){ //make it the last link last = link; }else { //make link a new last link last->next = link; //mark old last node as prev of new link link->prev = last; } //point last to new last node last = link; }
要檢視 C程式設計語言的實現,請點選 。