VPS如何做镜像网站,wordpress会务网站模版,wordpress 生成小程序,wordpress 插件激活理论基础#xff1a; 链表是用一组任意的存储单元来存储线性表中的数据元素。 如果结点的引用域只存储该结点直接后继结点的存储地址#xff0c;则该链表叫单链表(Singly Linked List)。 单链表由头引用H唯一确定。头引用指向单链表的第一个结点#xff0c;也就是把单链表第… 理论基础 链表是用一组任意的存储单元来存储线性表中的数据元素。 如果结点的引用域只存储该结点直接后继结点的存储地址则该链表叫单链表(Singly Linked List)。 单链表由头引用H唯一确定。头引用指向单链表的第一个结点也就是把单链表第一个结点的地址放在H中。 C#实现 1接口 引用线性表的接口IListDST 2实现 首先必须定义一个单链表的节点类。 Code 1 public class NodeT 2 { 3 private T data; //数据域 4 private NodeT next; //引用域 5 6 7 public Node(T val) 8 { 9 data val;10 next null;11 }1213 public Node()14 {15 data default(T);16 next null;17 }1819 public T Data20 {21 get22 {23 return data;24 }25 set26 {27 data value;28 }29 }30 public NodeT Next31 {32 get33 {34 return next;35 }36 set37 {38 next value;39 }40 }414243 } 实现主体类 Append,Insert,InsertBack三个方法实质上都是插入操作可以考虑用overload或者override来实现有兴趣的朋友试试。 Code 1public class LinkListT : IListDST 2 { 3 private NodeT head; 4 public NodeT Head 5 { 6 get 7 { 8 return head; 9 } 10 set 11 { 12 head value; 13 } 14 } 15 public LinkList() 16 { 17 head null; 18 } 19 20 /**//// summary 21 /// 获取长度 22 /// /summary 23 /// returns/returns 24 public int GetLength() 25 { 26 NodeT p head; 27 int len 0; 28 while (p ! null) 29 { 30 len; 31 p p.Next; 32 } 33 return len; 34 } 35 36 /**//// summary 37 /// 清空操作 38 /// /summary 39 public void Clear() 40 { 41 head null; 42 } 43 44 /**//// summary 45 /// 判断线性表是否为空 46 /// /summary 47 /// returns/returns 48 public bool IsEmpty() 49 { 50 if (head null) 51 { 52 return true; 53 } 54 else 55 { 56 return false; 57 } 58 } 59 60 /**//// summary 61 /// 附加操作,线性表未满将值为item的新元素添加到末尾 62 /// /summary 63 /// param nameitem/param 64 public void Append(T item) 65 { 66 NodeT newNode new NodeT(item); //根据元素创建新的节点 67 NodeT node new NodeT(); 68 69 if (head null) 70 { 71 head newNode; 72 return; 73 } 74 node head; 75 while (node.Next ! null) 76 { 77 node node.Next; 78 } 79 node.Next newNode; 80 81 } 82 83 /**//// summary 84 /// 寻找节点 85 /// /summary 86 /// param namei/param 87 /// returns/returns 88 public NodeT FindNode(int i) 89 { 90 if (IsEmpty()) 91 { 92 Console.Write(List is empty); 93 return null; 94 } 95 if (i 1) 96 { 97 Console.Write(Index is error); 98 return null; 99 }100 NodeT current head;101 int j 1;102103 while (current.Next ! null j i)104 {105 j;106 current current.Next;107 }108 return current;109 }110111 /**//// summary112 /// 插入操作,在第i个节点前面插入item113 /// /summary114 /// param nameitem/param115 /// param namei/param116 public void Insert(T item, int i)117 {118 NodeT newNode new NodeT(item);119 NodeT node new NodeT();120 NodeT current FindNode(i);121 if (current ! null)122 {123 node current; //对目标节点备份124 newNode.Next current;125 node.Next newNode;126 }127 }128129 /**//// summary130 /// 插入操作,在第i个节点后面插入item131 /// /summary132 /// param nameitem/param133 /// param namei/param134 public void InsertBack(T item, int i)135 {136 NodeT newNode new NodeT(item);137 NodeT current FindNode(i);138 if (current ! null)139 {140 newNode.Next current.Next;141 current.Next newNode;142 }143 }144145 /**//// summary146 /// 删除操作147 /// /summary148 /// param namei/param149 /// returns/returns150 public T Delete(int i)151 {152 NodeT current FindNode(i);153 NodeT node new NodeT();154 if (current ! null)155 {156 node current; //对目标节点备份157 node.Next current.Next;158 return current.Data;159 }160 else161 {162 Console.Write(the node is not exist!);163 return default(T);164 }165 }166167 /**//// summary168 /// 去表元169 /// /summary170 /// param namei/param171 /// returns/returns172 public T GetElem(int i)173 {174 NodeT current FindNode(i);175176 if (current ! null)177 {178 return current.Data;179 }180 else181 {182 Console.Write(the node is not exist!);183 return default(T);184 }185 }186187 /**//// summary188 /// 按值查找189 /// /summary190 /// param namevalue/param191 /// returns/returns192 public int Locate(T value)193 {194 if (IsEmpty())195 {196 Console.WriteLine(List is Empty!);197 return -1;198 }199 NodeT current new NodeT();200 current head;201 int i 1;202 while (current.Next ! null !current.Data.Equals(value))203 {204 current current.Next;205 i;206 }207 return i;208 }209 } 碰到的问题1 方法参数为int类型改用object类型碰到一些问题查找节点的时候遍历整个链表如何对比参数节点 对比参数会不会影响算法的时间复杂度 2 appendinsertinsertback方法本质上都是插入操作有没有更好的方法实现 代码没有经过测试有兴趣的朋友可以试试有问题告知一下 转载于:https://www.cnblogs.com/Richet/archive/2008/10/15/1311706.html