在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
初学C#记录历程,记录心情。 在学习的过程中严重参考了前辈们在网上的分享,当然也不忘有自己的细微思想在里面,写在这里主要是对自己由不懂到能独立写下来的纪念。如有冒犯,还请原谅。 定义接口:
View Code
1 //定义接口IList,来规范后面类的功能实现 2 public interface IList<T> 3 { 4 int GetLength(); //得到链表的数据个数 5 bool IsEmpty(); //判断链表是否为空 6 void Clear(); //清空链表 7 void Add(T item); //增加数据到链表(初始化) 8 9 }
定义节点类:
View Code
1 //节点类 2 public class LinkNode<T> 3 { 4 private LinkNode<T> next; //指向下一个结点对象 字段 5 private T data; //结点的数据 字段 6 7 /// <summary> 8 /// 结点的数据 属性 9 /// </summary> 10 public T Data 11 { 12 get { return this.data; } 13 set { this.data = value; } 14 } 15 16 /// <summary> 17 /// 指向下一个结点对象 属性 18 /// </summary> 19 public LinkNode<T> Next 20 { 21 get { return this.next; } 22 set { this.next = value; } 23 } 24 25 public LinkNode() 26 { 27 this.data = default(T); 28 this.next = null; 29 } 30 31 public LinkNode(T t) 32 { 33 this.data = t; 34 this.next = null; 35 } 36 37 public LinkNode(T t, LinkNode<T> node) 38 { 39 this.data = t; 40 this.next = node; 41 } 42 } 定义链表类,继承接口IList:
View Code
1 //定义链表类,继承接口IList 2 public class LinkList<T>:IList<T> 3 { 4 5 private LinkNode<T> head; //单链表的表头 6 public LinkNode<T> Head 7 { 8 get { return this.head; } 9 set { this.head = value; } 10 } 11 12 public LinkList() 13 { 14 this.head = null; 15 } 16 17 public LinkList(LinkNode<T> node) 18 { 19 this.head = node; 20 } 21 22 public enum AddPosition //添加在什么位置的枚举 23 { Head, 24 Tail 25 }; 26 27 /// <summary> 28 /// 增加节点 29 /// </summary> 30 /// <param name="item">要增加的节点的数据</param> 31 /// <param name="p">在头部增加还是尾部增加</param> 32 public void Add(T item, AddPosition p) 33 { 34 if (p == AddPosition.Tail) 35 { 36 this.Add(item); //调用Add(item), 添加在尾部 37 } 38 else 39 { 40 LinkNode<T> node = this.head; 41 // LinkNode<T> nodeTemp; 42 LinkNode<T> AddedNode = new LinkNode<T>(item); 43 if (this.head == null) 44 { 45 this.head = AddedNode; 46 } 47 else 48 { 49 AddedNode.Next= node; 50 this.head = AddedNode; 51 } 52 53 } 54 55 } 56 57 /// <summary> 58 /// 添加数据到链表尾部 59 /// </summary> 60 /// <param name="item">要添加的结点的数据</param> 61 public void Add(T item) 62 { 63 LinkNode<T> AddedNode = new LinkNode<T>(item, null); //创建一个结点 64 if (this.head == null) 65 { 66 this.head = AddedNode; 67 68 } 69 else 70 { 71 LinkNode<T> node=this.head; 72 while (node.Next != null) 73 { 74 node = node.Next; 75 } 76 node.Next =AddedNode; 77 } 78 } 79 80 /// <summary> 81 /// 返回链表元素个数 82 /// </summary> 83 /// <returns></returns> 84 public int GetLength() 85 { 86 LinkNode<T> node = new LinkNode<T>(); 87 int count = 0; 88 node = this.head; 89 while (node!= null) 90 { 91 count++; 92 node = node.Next; 93 } 94 return count; 95 96 } 97 98 /// <summary> 99 /// 判断链表是否为空 100 /// </summary> 101 /// <returns></returns> 102 public bool IsEmpty() 103 { 104 return this.head == null; 105 } 106 107 /// <summary> 108 /// 清空链表 109 /// </summary> 110 public void Clear() 111 { 112 this.head =null; 113 } 114 } 测试是否通过:
View Code
1 static void Main(string[] args) 2 { 3 LinkList<int> MyList = new LinkList<int>(); 4 LinkNode<int> node = new LinkNode<int>(); 5 6 //验证返回链表个数 7 MyList.Add(3); 8 MyList.Add(4); 9 Console.WriteLine("The total data of list is:{0}", MyList.GetLength()); 10 11 //验证是否已清空 12 MyList.Clear(); //清空链表 13 node = MyList.Head; 14 if (node == null) 15 { 16 Console.WriteLine("List has been cleared"); 17 } 18 else 19 { 20 node = PrintData(node); 21 } 22 23 //验证是否为空 24 Console.WriteLine("Empty?:{0}",MyList.IsEmpty()); 25 Console.ReadLine(); 26 } 27 28 private static LinkNode<int> PrintData(LinkNode<int> node) 29 { 30 while (node != null) 31 { 32 Console.WriteLine("The data of List are:{0}", node.Data); 33 node = node.Next; 34 } 35 return node; 36 }
|
请发表评论