理论基础:
在结点中设两个引用域,一个保存直接前驱结点的地址,叫prev,一个直接后继结点的地址,叫next,这样的链表就是双向链表(Doubly Linked List)。
双向链表的结点结构示意图如上,双向链表结点的定义与单链表的结点的定义很相似,因此,双向链表节点类的实现可以参考单链表的节点类。
C#实现:
1接口
引用线性表的接口IListDS<T>
2实现
(1)双向链表节点类,参考单链表的节点类


1

2



3

4

5

6

7



8



9



10

11

12



13



14



15

16

17



18



19



20

21

22



23

24

25

26

27

28



29

30

31

32

33

(2) 双向链表操作类实现
注意:由于双向链表的结点有两个引用,所以,在双向链表中插入和删除结点比单链表要复杂。双向链表中结点的插入分为在结点之前插入和在结点之后插入,插入操作要对四个引用进行操作
同样,删除操作也需要多多注意,其他的操作和单链表类似,不再赘述.


1

2



3

4

5



6

7



8

9

10

11



12

13

14

15

16



17

18

19

20

21


22

23

24

25

26



27

28

29

30



31

32

33

34

35

36


37

38

39

40



41

42

43


44

45

46

47

48



49

50



51

52

53

54



55

56

57

58


59

60

61

62

63

64



65

66



67

68

69

70

71



72

73

74

75

76

77

78

79



80

81

82

83

84

85


86

87

88

89

90

91



92

93

94

95



96

97

98

99

100

101

102



103

104

105

106


107

108

109

110

111

112



113

114

115

116



117

118

119

120

121

122

123



124

125

126

127


128

129

130

131

132



133

134

135

136



137

138

139

140

141

142

143



144

145

146

147

148

149


150

151

152

153

154

155



156

157

158



159

160

161

162

163

164

165

166



167

168

169

170

171


172

173

174

175

176

177



178

179

180



181

182

183

184



185

186

187

188

189

190


191

192

193

194

195

196



197

198



199

200

201

202

203



204

205

206

207

208

209

210

211

212



213

214



215

217

218

219

220

221

此外,循环链表的基本操作与单链表大体相同,只是判断链表结束的条件并不是判断结点的引用域是否为空,
而是判断结点的引用域是否为头引用,其它没有较大的变化,有兴趣的朋友可以写写。