雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈鍊錶。
注意:在實現的過程中,要分清前驅指標和後繼指標,不要把他們當成乙個指標。
1回到頂部(go to top)//雙向鍊錶的實現
2 templatestruct
node;
1 templateclassnlink
211 ~nlink()
1215
//清空雙鏈表
16void
clearlink()
1725 head->next=null;26}
27//
銷毀雙鏈表
28void
destorylink()
2936}37
//列印雙鏈表
38void
printlink()
3947 cout<
49//
在雙鏈表末尾新增結點
50bool
5162 p->next=s;
63 s->prior=p;
64return
true;65
}66//獲取鍊錶的長度
67int
length()
6878
return
lenth;79}
80//
在第pos個位置插入新節點
81bool insertlink(int
pos,t e)
8290 node*s=new node;
91if (s==null)
92return
false
;93 s->data=e;
94 s->next=s->prior=null;
95if (p==null||posflag>pos-1)96
99 s->next=p->next;
100if(p->next!=null)
101 p->next->prior=s;
102 p->next=s;
103 s->prior=p;
104return
true
;105
}106
107//
刪除第i個位置上的節點
108bool deletelink(int
pos)
109115
int posflag=0
;116
while(p && posflag1
)117
121if (p && p->next==null)
122127
else
133return
true
;134
}135
136//
刪除制定元素的節點
137bool
deletelink(t e)
138146 p=p->next;
147}
148if(p==null)
149153
//判斷要刪除的是不是尾節點
154if (p->next==null)
155160
else
166return
true
;167
}168 };
1intmain()
28 link.insertlink(11,'s'
);9 cout<
length:
"10link.printlink();
11 link.deletelink('s'
);12
link.printlink();
13 cout<
length:
"14 system("
pause");
15return0;
16 }
資料結構 雙鏈表的操作
1 利用尾插法建立乙個雙向鍊錶。2 遍歷雙向鍊錶。3 實現雙向鍊錶中刪除乙個指定元素。4 在非遞減有序雙向鍊錶中實現插入元素e仍有序演算法。5 判斷雙向鍊錶中元素是否對稱若對稱返回1否則返回0。6 設元素為正整型,實現演算法把所有奇數排列在偶數之前。include include define el...
資料結構雙鏈表基本操作
雙鏈表 主要注意最後結點的操作,否則容易出現null prior的情況。include include typedef struct dlnode dlnode,list 尾插法構建 void createndlist list l,int a,int n f next null void crea...
資料結構 雙鏈表的基本操作
定義順序表 typedef structsqlist 初始化順序表 必須要!構建c表的時候會用上 void initsqlist sqlist l l.data i e l.size 順序的表長要增加!return 1 特定位置刪除元素 int deleteelem sqlist l,int p i...