C#单向链表的实现

简介:

using System ; public class LinkedList { //嵌套类表示单个节点; private class Node { public Node (object values) { item=values ; } public object item; //数据域; public LinkedList.Node next;//指针域; public override string ToString() { return item.ToString (); } } private int count;//记录元素个数; public int Count { get {return this.count ;} } private Node head;//头指针; public object this[int index]//索引器; { get {return GetByIndex (index).item;} set{GetByIndex (index).item=value ;} } //①添加元素; public void Add(object values) { Node newNode=new Node (values); if(head ==null ) //如果头指针为空; { head =newNode ; } else { GetByIndex(count-1).next=newNode; //插到链表结尾; } count ++; //链表长度+1; } //②在指定索引处插入元素; public void Insert(int index,object values) { Node tempNode; if(index ==0) { if(head ==null ) { tempNode =new Node (values ); tempNode.next =head ; head =tempNode ; } } else { Node preNode=GetByIndex(index-1); //找插入节点的前驱; Node nextNode=preNode.next ; //找插入节点的后继结点; tempNode =new Node (values); preNode.next =tempNode; tempNode.next =nextNode ; } count ++; } //③删除指定索引元素; public void RemoveAt(int index) { if (index ==0) //删除节点为头指针; { head =head.next ; } else { Node preNode=GetByIndex(index-1); if(preNode.next ==null) { throw new ArgumentOutOfRangeException("index","索引超出范围!"); } preNode.next =preNode.next.next ; } count --; } public override string ToString() { string s=""; for(Node temp=head; temp!=null; temp=temp.next) { s+=temp.ToString ()+" "; } return s; } private Node GetByIndex(int index) { if((index <0)||(index >= this.count )) { throw new ArgumentOutOfRangeException("index","索引超出范围!"); } Node tempNode=this.head ; for(int i=0;i<index ;i++) { tempNode=tempNode.next ; } return tempNode ; } } class App { static void Main() { LinkedList lst=new LinkedList (); Console .WriteLine("①添加元素:"); lst .Add (0); lst .Add (1); lst .Add (2); lst .Add (3); Console .WriteLine(lst.ToString()); Console .WriteLine("②在2号位置,添加元素50:"); lst .Insert (2,50); Console .WriteLine(lst.ToString()); Console .WriteLine("③移除1号元素:"); lst.RemoveAt(1); Console .WriteLine(lst.ToString()); Console .WriteLine("④把2号元素赋值为9:"); lst [2]=9; Console .WriteLine(lst.ToString()); } }

目录
相关文章
【数据结构】单链表之--无头单向非循环链表
【数据结构】单链表之--无头单向非循环链表
107 2
|
8月前
|
存储 Python
Python 实现单向链表,和单向链表的反转
链表是一种数据结构,每个节点存储相邻节点的位置信息。单链表中的节点仅存储下一节点的位置。通过Python实现单链表,定义`ListNode`类并关联节点可创建链表。例如,创建A-&gt;B-&gt;C的链表后,可通过反转函数`reverse`将链表反转为CBA。代码展示了如何实现和操作单链表。
166 6
Python 实现单向链表,和单向链表的反转
|
7月前
|
存储 监控 算法
员工电脑监控系统中的 C# 链表算法剖析-如何监控员工的电脑
当代企业管理体系中,员工电脑监控已成为一个具有重要研究价值与实践意义的关键议题。随着数字化办公模式的广泛普及,企业亟需确保员工对公司资源的合理利用,维护网络安全环境,并提升整体工作效率。有效的电脑监控手段对于企业实现这些目标具有不可忽视的作用,而这一过程离不开精妙的数据结构与算法作为技术支撑。本文旨在深入探究链表(Linked List)这一经典数据结构在员工电脑监控场景中的具体应用,并通过 C# 编程语言给出详尽的代码实现与解析。
118 5
|
存储 JavaScript 前端开发
JavaScript实现单向链表
JavaScript实现单向链表
255 109
|
存储
数据结构第二课 -----线性表之单向链表
数据结构第二课 -----线性表之单向链表
116 0
|
存储
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)(一)
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)
146 1
|
算法 Java
数据结构与算法学习六:单向环形链表应用实例的约瑟夫环问题
这篇文章通过单向环形链表的应用实例,详细讲解了约瑟夫环问题的解决方案,并提供了Java代码实现。
170 0
|
存储 缓存
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)(二)
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)
111 0
|
存储 算法
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
【单向链表】数据结构——单向链表的介绍与代码实现&笔记