c#数据结构 --单链表
想重新学习一遍数据结构,弥补上学时的不足.希望大家共同探讨,共同进步.
首先从单链表开始,代码如下:
1
/// <summary>
2
/// 单链表的节点
3
/// </summary>
4
public class LinkNode
5
{
6
private object data; //存放数据
7
private LinkNode link; //存放指针
8
9
10
public object Data
11
{
12
get { return data; }
13
set { data = value; }
14
}
15
16
17
public LinkNode Link
18
{
19
get { return link; }
20
set { link = value; }
21
}
22
23
构造方法
41
42
}
43
44
45
46
47
//单链表
48
public class LinkList
49
{
50
/// <summary>
51
/// 头节点
52
/// </summary>
53
LinkNode header;
54
55
/// <summary>
56
/// 构造函数
57
/// </summary>
58
public LinkList()
59
{
60
header = new LinkNode("header");
61
header.Link = null;
62
}
63
64
/// <summary>
65
/// 单链表的查找
66
/// </summary>
67
/// <param name="i">节点位置</param>
68
/// <returns>找到的节点</returns>
69
public LinkNode FindIndex(int i)
70
{
71
if (i == -1 | i == 0) return header;
72
73
LinkNode resultNode = header.Link;
74
75
int j = 1;
76
while (resultNode != null && j < i)
77
{
78
resultNode = resultNode.Link;
79
j++;
80
}
81
82
return resultNode;
83
}
84
85
/// <summary>
86
/// 数据的插入
87
/// </summary>
88
/// <param name="data">要插入的数据</param>
89
/// <param name="i">插入位置</param>
90
/// <returns>返回插入后的节点</returns>
91
public LinkNode Insert(Object data, int i)
92
{
93
LinkNode newNode, currentNode;
94
newNode = new LinkNode(data);
95
currentNode = FindIndex(i - 1);
96
if (currentNode.Link == null)
97
{
98
currentNode.Link = newNode;
99
newNode.Link = null;
100
}
101
else
102
{
103
newNode.Link = currentNode.Link;
104
currentNode.Link = newNode;
105
}
106
107
return newNode;
108
}
109
110
/// <summary>
111
/// 删除所传入节点的下一个节点
112
/// </summary>
113
/// <param name="node"></param>
114
public void DeleteAfter(LinkNode node)
115
{
116
if (node != null)
117
{
118
node.Link = node.Link.Link;
119
}
120
}
121
122
/// <summary>
123
/// 删除指定位置的节点
124
/// </summary>
125
/// <param name="i"></param>
126
public void DeleteNode(int i)
127
{
128
LinkNode node = FindIndex(i - 1);
129
node.Link = node.Link.Link;
130
}
131
132
/// <summary>
133
/// 计算单链表的长度(包括表头节点)
134
/// </summary>
135
/// <returns>长度</returns>
136
public int Length()
137
{
138
LinkNode node = header;
139
int count = 0;
140
141
while (node != null)
142
{
143
node = node.Link;
144
count++;
145
}
146
return count;
147
}
148
}
/// <summary>2
/// 单链表的节点3
/// </summary>4
public class LinkNode5
{6
private object data; //存放数据7
private LinkNode link; //存放指针8

9

10
public object Data11
{12
get { return data; }13
set { data = value; }14
}15

16

17
public LinkNode Link18
{19
get { return link; }20
set { link = value; }21
}22

23
构造方法41

42
}43

44

45

46

47
//单链表48
public class LinkList49
{50
/// <summary>51
/// 头节点52
/// </summary>53
LinkNode header;54

55
/// <summary>56
/// 构造函数57
/// </summary>58
public LinkList()59
{60
header = new LinkNode("header");61
header.Link = null;62
}63

64
/// <summary>65
/// 单链表的查找66
/// </summary>67
/// <param name="i">节点位置</param>68
/// <returns>找到的节点</returns>69
public LinkNode FindIndex(int i)70
{71
if (i == -1 | i == 0) return header;72

73
LinkNode resultNode = header.Link;74

75
int j = 1;76
while (resultNode != null && j < i)77
{78
resultNode = resultNode.Link;79
j++;80
}81

82
return resultNode;83
}84

85
/// <summary>86
/// 数据的插入87
/// </summary>88
/// <param name="data">要插入的数据</param>89
/// <param name="i">插入位置</param>90
/// <returns>返回插入后的节点</returns>91
public LinkNode Insert(Object data, int i)92
{93
LinkNode newNode, currentNode;94
newNode = new LinkNode(data);95
currentNode = FindIndex(i - 1);96
if (currentNode.Link == null)97
{98
currentNode.Link = newNode;99
newNode.Link = null;100
}101
else102
{103
newNode.Link = currentNode.Link;104
currentNode.Link = newNode;105
}106

107
return newNode;108
}109

110
/// <summary>111
/// 删除所传入节点的下一个节点112
/// </summary>113
/// <param name="node"></param>114
public void DeleteAfter(LinkNode node)115
{116
if (node != null)117
{118
node.Link = node.Link.Link;119
}120
}121

122
/// <summary>123
/// 删除指定位置的节点124
/// </summary>125
/// <param name="i"></param>126
public void DeleteNode(int i)127
{128
LinkNode node = FindIndex(i - 1);129
node.Link = node.Link.Link;130
}131

132
/// <summary>133
/// 计算单链表的长度(包括表头节点)134
/// </summary>135
/// <returns>长度</returns>136
public int Length()137
{138
LinkNode node = header;139
int count = 0;140

141
while (node != null)142
{143
node = node.Link;144
count++;145
}146
return count;147
}148
}专注于企业级软件开发,做对
客户有用的软件。


浙公网安备 33010602011771号