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 == 0return 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    }
posted @ 2008-03-25 09:09  GodSpeed  阅读(313)  评论(1编辑  收藏  举报