C#自定义链表
来源:互联网 发布:手机网络兼职 编辑:程序博客网 时间:2024/05/21 09:16
C#中的链表结构在程序中十分常见,用处很广。
链表结构中,每个节点由值部分和指针部分组成,值部分即存储的数据,指针指向下一个节点,从而使得每个节点能够连接起来,值和指针就像骨骼和关节一样。
一、节点结构
自定义链表,首先定义出节点的结构,用类表示为:
public Class Node<T>{ //不确定value的值类型所以用泛型public T value; //值public Node<T> point; //指针}
二、自定义List链表
定义完节点,下面开始构造List链表结构。自定义链表中属性有:元素个数、索引器,方法有添加、插入、遍历。其中遍历方法需要实现IEnumerable接口。
思路
改变链表中节点的指向。
1.添加方法Add(T value)
(1)定义全局变量first和last表示链表中的根节点和最后一个节点;
(2)判断last是否为空,为空证明链表中没有元素,将需要插入的value值赋予给first,然后让last指向first;
(3)当last不为空时,新建节点node并赋予value值,用来表示插入的节点。将当前最后一个节点last指针指向node,然后node节点即成为最后一个节点
(4)元素个数+1
2.插入方法Insert(T value,int index)
(1)新建要插入的节点node并赋予value值;
(2)如果index=0,则需要更换根节点,让node指向first,然后重新赋予first的值为node;
(3)如果index>0,则先找出index-1位置的节点temp,让node指向原来index位置的节点(temp.point),然后让temp指向node节点,这样node便成为了index处的节点。
(4)元素个数+1
MyList类代码
public Class MyList<T>:IEnumerable{ //表示根节点 public Node<T> first = new Node<T>(); //表示最后一个节点 public Node<T> last = new Node<T>(); //节点个数 private int count ; //属性 public int Count{ get{ return count; } } //索引器,根据节点一一连接的特点,利用While循环找出第index个节点 public T this[int index]{ get{ Node<T> node = first; int i = 0; while(i!=index) { i++; node = node.point; } return node.value; } } //添加方法 public void Add(T value){ //最后一个节点为空,证明first节点未添加元素 if(temp == null) { //将value值赋予根节点 first.value = value; last = first; } //最后一个节点不为空 else{ //新建一个节点 Node<T> node = new Node<T>(); //赋予value值 node.value = value; //将最后一个节点指向当前新建的节点 last.point = node; //新建的节点变为最后一个节点 last = node; } } //插入方法 public void Insert(T value ,int index) { //新建需要插入的节点并赋予value值 Node<T> newNode = new Node<T>(); new Node.value = value; //如果插入到0的位置,需要更换根节点 if(index == 0){ //首先将新的节点指向根节点 newNode.point = first; //更换根节点 first = newNode; } //如果插入非0的位置 else{ Node<T> node = first; int i = 0; //找出插入点的前一个节点 while(i!=index){ i++; node = node.point; } //将节点插入 newNode.point = node.point; node.point = newNode; } count++; } //foreach遍历,需要实现IEnumerable接口 public IEnumerator GetEnumerator(){ Node node = first; while(node != null){ yield return node.value; node = node.point; } }}
0 0
- C#自定义链表
- C#自定义链表
- C# 双向链表及自定义链表
- C#自定义双向链表,功能类似C++中的CList
- C# 自定义sqlserver表值函数
- C#调用自定义表类型参数
- C# 自定义控件,自定义属性,自定义事件
- c#自定义简单链表通过IEnumerable接口实现内部迭代
- c#自定义简单链表通过IEnumerable接口,范型实现内部迭代
- C#自定义Attribute举例!
- 自定义显示图片--c#
- C# 自定义异常类
- C# 自定义EVENT
- C#中的自定义消息
- C#中自定义异常
- c#自定义属性
- C# 自定义属性
- C# 自定义用户控件
- 208. Implement Trie (Prefix Tree)
- 链表逆序
- 学习Log中'main', 'system', 'radio', 'events' | 如何查看linux用户和组信息 | chown命令学习
- WebView和Web的交互
- Data URL和图片
- C#自定义链表
- 《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。附小文:招.NET开发,结果他转JAVA了,一切都是为了生活
- eclipse配置环境
- 实验二—任务一
- 如何从svn检出maven项目
- 编码格式简介(ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE)
- linux中cat、more、less命令区别详解
- [FAQ09065][Others]MTK发布的Android software Tools 工具包中所有工具的说明
- 输出100-200内的素数