雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個節點包含兩個指標,分別指向直接後繼和直接前驅(頭節點的前驅指空,尾節點的後繼指空)。所以,從雙向鍊錶中的任意乙個非前驅非後繼節點開始,都能很方便地訪問它的前驅和後繼節點。
實際上如果熟練掌握了單向鍊錶的基本操作,雙向鍊錶的建立只是每次新建好乙個節點後掛鏈的時候多操作乙個指標而已。如果你單向鍊錶的建立還不熟悉,可以看這篇文章中的方法:建立單向鍊錶的三種演算法
本文給出建立雙向鍊錶的c語言**,然後在注釋中對其進行簡單分析。
#include#include typedef struct nodeelemsn;
elemsn *creatlink(int data,int num)//建立雙向鍊錶
else
q=p;
} return h;
}elemsn *findtail(elemsn *h)//找到雙向鍊錶的尾節點
return p;
}void printlink(elemsn *h)//輸出雙向鍊錶資料域的值
printf("\n雙向鍊錶順序輸出結束!\n");
}void backprintlink(elemsn *t)//逆序輸出雙向鍊錶的值
printf("\n雙向鍊錶逆序輸出結束!\n");
}void freespace(elemsn *h)//釋放malloc分配的空間
}int main(void)
; int num=8;
head=creatlink(data,num);
tail=findtail(head);
printf("順序輸出鍊錶值:\n");
printlink(head);
printf("逆序輸出鍊錶值:\n");
backprintlink(tail);
freespace(head);
return 0;
}
雙向鍊錶C語言實現
ifndef stdlist h define stdlist h typedef struct tagstdnode stdnode,lpstdnode typedef struct tagstdlist stdlist,lpstdlist 鍊錶資料結構 struct tagstdnode 鍊錶節...
c語言實現雙向鍊錶
單向鍊錶有一定的缺陷,其中乙個就是只能一條路走到黑,只能前進不能後退,但雙向鍊錶就解決了這一問題 include include typedef struct node node,linklist void create list tail linklist l 頭插法建立 void create ...
C語言實現雙向鍊錶
1.定義兩個結構體,乙個表示鍊錶的乙個單元,另乙個表示鍊錶的頭結點 2.鍊錶的初始化 必須讓頭結點的next和prev指向自己 清除 不刪除頭結點 銷毀 刪除頭結點 3.增操作 每次增加需要開闢乙個單元,所以直接建立乙個函式用來建立單元 頭插 尾插 pos結點之前插 4.刪操作 分為三種 刪除pos...