想重新学习一遍数据结构,弥补上学时的不足.希望大家共同探讨,共同进步.
首先从单链表开始,代码如下:
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 构造方法#region 构造方法
24 public LinkNode()
25 {
26
27 }
28
29 public LinkNode(object data)
30 {
31 this.data = data;
32 this.link = null;
33 }
34
35 public LinkNode(object data, LinkNode link)
36 {
37 this.data = data;
38 this.link = link;
39 }
40 #endregion
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 }
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 构造方法#region 构造方法
24 public LinkNode()
25 {
26
27 }
28
29 public LinkNode(object data)
30 {
31 this.data = data;
32 this.link = null;
33 }
34
35 public LinkNode(object data, LinkNode link)
36 {
37 this.data = data;
38 this.link = link;
39 }
40 #endregion
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 }