using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; /// <summary> /// DListNode 的摘要说明 /// </summary> public class DListNode { private int _data; private DListNode _preNode; private DListNode _nextNode; public int data { get { return _data; } set { _data = value; } } public DListNode preNode { get { return _preNode; } set { _preNode = value; } } public DListNode nextNode { get { return _nextNode; } set { _nextNode = value; } } } public class DList { private DListNode _firstNode; private int _count; public int count { get { return _count; } set { _count = value; } } public DListNode firstNode { get { return _firstNode; } set { _firstNode = value; } } /// <summary> /// 将对象添加到链表的结尾处 /// </summary> /// <param name="element"></param> public void Add(int element) { if (firstNode == null)//判断第一个节点是否为空 { firstNode = new DListNode();//如果为空,新添加的就是第一个节点 firstNode.data = element; } else { DListNode dlTmp = firstNode; //通过循环找到最后一个节点 while(true) { if (dlTmp.nextNode == null)//插入新的节点 { dlTmp.nextNode = new DListNode(); dlTmp.nextNode.data = element; dlTmp.nextNode.preNode = dlTmp; break; } else { dlTmp = dlTmp.nextNode; } } } this.count++;//链表长度加1 } /// <summary> /// 移除所有元素 /// </summary> public void Clear() { this.firstNode = null; } /// <summary> /// 搜索指定的对象的索引 /// </summary> /// <param name="temp"></param> /// <returns></returns> public int indexOf(int temp) { DListNode dlTmp = this.firstNode; int index = 0; while (true) { //如果没有找到,则返回-1 if (dlTmp == null) { return -1; } else { if (dlTmp.data == temp)//找到则返回索引 { return index; } dlTmp = dlTmp.nextNode; index++; } } } /// <summary> /// 从链表中删除指定的工序 /// </summary> /// <param name="temp"></param> public void Delete(int temp) { DListNode dlTm = this.firstNode; while (true) { if (dlTm == null) { return; } else { if (dlTm.data == temp) { DListNode dlPre = new DListNode(); if (dlTm.preNode != null) { dlPre = dlTm.preNode; dlPre.nextNode = dlTm.nextNode; dlTm.nextNode.preNode = dlPre; dlTm = null; } else { this.firstNode = dlTm.nextNode; dlTm = null; } this.count--; break; } else { dlTm = dlTm.nextNode; } } } } /// <summary> /// 向链表中添加指定的工序 /// </summary> /// <param name="temp"></param> public void Insert(int temp) { DListNode node = this.firstNode; while (true) { if (node == null) { return; } else { DListNode newNode = new DListNode(); newNode.data = temp; if (temp < node.data) { if (node.preNode == null) { node.preNode = newNode; newNode.nextNode = node; newNode.preNode = null; this.firstNode = newNode; } else { newNode.preNode = node.preNode; newNode.nextNode = node; node.preNode.nextNode = newNode; node.preNode = newNode; } this.count++; break; } else { node = node.nextNode; } } } } } 边学习边创建的,可能还存在我没有发现的问题,但是基本实现了我需要的功能,实现了链表的创建、修改等功能。