description
學會了單向鍊錶,我們又多了一種解決問題的能力,單鏈表利用乙個指標就能在記憶體中找到下乙個位置,這是乙個不會輕易斷裂的鏈。但單鏈表有乙個弱點——不能回指。比如在鍊錶中有兩個節點a,b,他們的關係是b是a的後繼,a指向了b,便能輕易經a找到b,但從b卻不能找到a。乙個簡單的想法便能輕易解決這個問題——建立雙向鍊錶。在雙向鍊錶中,a有乙個指標指向了節點b,同時,b又有乙個指向a的指標。這樣不僅能從煉表頭節點的位置遍歷整個鍊錶所有節點,也能從鍊錶尾節點開始遍歷所有節點。對於給定的一列資料,按照給定的順序建立雙向鍊錶,按照關鍵字找到相應節點,輸出此節點的前驅節點關鍵字及後繼節點關鍵字。
input
第一行兩個正整數n(代表節點個數),m(代表要找的關鍵字的個數)。第二行是n個數(n個數沒有重複),利用這n個數建立雙向鍊錶。接下來有m個關鍵字,每個佔一行。
output
對給定的每個關鍵字,輸出此關鍵字前驅節點關鍵字和後繼節點關鍵字。如果給定的關鍵字沒有前驅或者後繼,則不輸出。
注意:每個給定關鍵字的輸出佔一行。一行輸出的資料之間有乙個空格,行首、行末無空格。
sample
input
10 3
1 2 3 4 5 6 7 8 9 035
0output
2 44 6
9**實現:
#include #include #include #include struct node
;struct node *creat(int n)//順序建立雙向鍊錶
return head;
}int main()
else if(p->next)
else
}else
p=p->next;}}
return 0;
}
注意:
第乙個if條件裡面一定要是p->next&&p->before!=head,如果是if(p->next&&p->before),則如sample中輸入1的時候,會因為滿足第乙個if語句把head->a裡面的隨機值輸出,造成程式wa。
資料結構雙向鍊錶(c語言)
通過c語言實現雙向鍊錶的建立 初始化 頭插法插入結點 尾插法插入結點 在指定位置新增結點 刪除指定位置的結點 查詢結點的內容 獲取結點的長度 列印輸出結點的內容。include include typedef struct list list void newlist list l void set...
雙向鍊錶 資料結構C語言
在雙鏈表中,nextelem 的函式執行時間為o 1 而 priorelem 的執行時間為o n 所以定義了雙鏈表的概念 雙鏈表的儲存結構為的 實現 飛飛飛 雙向鍊錶的儲存結構 typedef struct dulnodedulnode,dulinklist 雙向鍊錶中有兩個指標域,分別為直接前驅和...
C 語言 資料結構之雙向鍊錶
雙向鍊錶的空間結構如下圖所示 int initdlist dlinklist head 初始化雙向迴圈鍊錶 int createdlist dlinklist head,int n 建立雙向迴圈鍊錶 return 1 void printdlist dlinklist head 輸出雙向迴圈鍊錶中的...