单向链表数据结构是有节点组成,每个节点包含两部分,第一部分为存储数据,
第二部分为指向下一个节点的指针。注意,有两个特色的节点,分别为“头节点”
和“尾节点”,头节点本身没有数据,只存储下一个节点的指针,尾节点只存数据

  1   //节点类
public class ListNode
{
public ListNode(int NewValue)
{
Value = NewValue;
}
//前一个
public ListNode Previous;
//后一个
public ListNode Next;
//值
public int Value; }
//链表类
public class Clist
{
public Clist()//构造函数
{
//初始化
ListCountValue = ;
Head = null;
Tail = null;
}
private ListNode Head;//头指针
private ListNode Tail;//尾指针
private ListNode Current;//当前指针
private int ListCountValue;//链表数据的个数
//向尾部添加数据方法
public void Append(int DataValue)
{
ListNode NewNode = new ListNode(DataValue); if (IsNull())//如果头指针为空
{
Head = NewNode;
Tail = NewNode;
}
else
{
Tail.Next = NewNode;
NewNode.Previous = Tail;
Tail = NewNode;
}
Current = NewNode;
ListCountValue += ;//链表个数加 1
}
public void Delete()
{
if (!IsNull())//若为空链表
{
if (!IsBof())//若删除头
{
Head = Current.Next;
Current = Head;
ListCountValue -= ;
return;
}
if (!IsEof())//若删除尾
{
Tail = Current.Previous;
Current = Tail;
ListCountValue -= ;
return;
}
Current.Previous.Next = Current.Next;//若删除中间数据
Current = Current.Previous;
ListCountValue -= ;
return;
}
}
//向后移动一个数据的方法
public void MoveNext()
{
if (!IsEof()) Current = Current.Next;
}
//向前移动一个数据的方法
public void MovePrevious()
{
if (!IsBof()) Current = Current.Previous;
}
//移动到第一个数据方法
public void MoveFrist()
{
Current = Head;
}
//移动到最后一个数据方法
public void MoveLast()
{
Current = Tail;
}
//判断是否为空链表方法
public bool IsNull()
{
if (ListCountValue == )
return true;
return false;
}
//判断是否为到达尾部方法
public bool IsEof()
{
if (Current == Tail)
return true;
return false;
}
//判断是否为到达头部方法
public bool IsBof()
{
if (Current == Head)
return true;
return false;
}
//取得当前结点的值方法
public int GetCurrentValue()
{
return Current.Value;
}
//取得链表的数据个数方法
public int ListCount
{
get { return ListCountValue; }
}
//清空链表方法
public void Clear()
{
MoveFrist();
while (!IsNull())
{
Delete();//若不为空链表,从尾部删除
}
}
//在当前位置前输入数据方法
public void Insert(int DataValue)
{
ListNode NewNode = new ListNode(DataValue);
if (IsNull())
{
Append(DataValue);//为空表,则添加
return;
}
if (IsBof())
{
//为头部插入
NewNode.Next = Head;
Head.Previous = NewNode;
Head = NewNode;
Current = Head;
ListCountValue += ;
return;
}
//中间插入
NewNode.Next = Current;
NewNode.Previous = Current.Previous;
Current.Previous.Next = NewNode;
Current = NewNode;
ListCountValue += ;
}
//进行升序插入方法
public void InsertAscending(int InsertValue)
{
//参数:InsertValue 插入的数据
//为空链表
if (IsNull())
{
//添加
Append(InsertValue);
return;
}
MoveFrist();//移动到头
if ((InsertValue < GetCurrentValue()))
{
Insert(InsertValue);//满足添加,则插入
return;
}
while (true)
{
if (InsertValue < GetCurrentValue())
{
//满足条件,则插入,退出
Insert(InsertValue);
break;
}
if (IsEof())
{//从尾部插入
Append(InsertValue);
break;
}
//移动到下一个指针
MoveNext();
}
} //进行降序插入方法
public void InsertUnAscending(int InsertValue)
{
//参数:InsertValue 插入的数据
//为空链表
if (IsNull())
{
//添加
Append(InsertValue);
return;
}
//移动到头
MoveFrist();
if (InsertValue > GetCurrentValue())
{
//满足条件,则插入,退出
Insert(InsertValue);
return;
}
while (true)
{
if (InsertValue > GetCurrentValue())
{
//满足条件,则插入,退出
Append(InsertValue);
break;
}
if (IsEof())
{
//尾部添加
Append(InsertValue);
break;
}
//移动到下一个指针
MoveNext();
} }
}

C# 单向链表数据结构 (一)的更多相关文章

  1. 数据结构-单向链表 C和C++的实现

    数据结构,一堆数据的存放方式. 今天我们学习数据结构中的 链表: 链表的结构: 链表是一种特殊的数组,它的每个元素称为节点,每个节点包括两个部分: 数据域:存放数据,此部分与数组相同 指针域:存放了下 ...

  2. Linux C 数据结构 ->单向链表<-(~千金散尽还复来~)

    之前看到一篇单向链表的博文,代码也看着很舒服,于是乎记录下来,留给自己~,循序渐进,慢慢 延伸到真正的内核链表~(敢问路在何方?路在脚下~) 1. 简介 链表是Linux 内核中最简单,最普通的数据结 ...

  3. 数据结构(1) 第一天 算法时间复杂度、线性表介绍、动态数组搭建(仿Vector)、单向链表搭建、企业链表思路

    01 数据结构基本概念_大O表示法 无论n是多少都执行三个具体步骤 执行了12步 O(12)=>O(1) O(n) log 2 N = log c N / log c N (相当于两个对数进行了 ...

  4. Linux C 数据结构 ->单向链表

    之前看到一篇单向链表的博文,代码也看着很舒服,于是乎记录下来,留给自己~,循序渐进,慢慢 延伸到真正的内核链表~(敢问路在何方?路在脚下~) 1. 简介 链表是Linux 内核中最简单,最普通的数据结 ...

  5. C语言 - 基础数据结构和算法 - 单向链表

    听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...

  6. 数据结构——Java实现单向链表

    结点类: /** * @author zhengbinMac * 一个OnelinkNode类的对象只表示链表中的一个结点,通过成员变量next的自引用方式实现线性表中各数据元素的逻辑关系. */ p ...

  7. [置顶] ※数据结构※→☆线性表结构(list)☆============单向链表结构(list single)(二)

    单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始:链表是使用指针进行构造的列表:又称为结点列表,因为链表是由一个个结点组装起来的:其中每个结点都有指 ...

  8. 数据结构——求单向链表的倒数第K个节点

    首先,对于链表来说,我们不能像数组一样直接访问,所以我们想到要求倒数第K个节点首先要知道最后一个节点. 然后从最后一个节点往前数K个. 最后得到想要的值. 但是这是不对的,为什么呢?因为题目给出的是单 ...

  9. python数据结构链表之单向链表

    单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. 表元素域ele ...

随机推荐

  1. MyBatis 注解

    注解 目标 相对应的 XML 描述 @CacheNamespace 类 <cache> 为给定的命名空间 (比如类) 配置缓存. 属性:implemetation,eviction, fl ...

  2. Nexus远程Maven仓库索引下载教程

    下载Maven仓库索引有两种方式: 一.手动下载 首先将索引下载到本地,下载地址:nexus-maven-repository-index.zip 解压索引压缩包,将里面内容全部拷贝   关闭当前Ne ...

  3. YY的困境:除了终止私有化 还有更多的担忧

    界面 刘莎 已大热一段时间的中概股私有化浪潮随着中国股市的下跌而降温,很多在美上市的中概股不得不因此叫停私有化,欢聚时代(下称YY)首当其冲,成为私有化大军中首个被迫撤退的中资公司. 虽然从表面看,私 ...

  4. 读<<代码整洁之道>>的感想

    花去了近一周的时间浏览一下这本书.总体感觉这本书写得不错. 我发现自己以前写的代码时多么的糟糕.有很多改进之处... 同时我也发现写出优秀的代码不易.优秀的代码不仅仅易读,并且易修改,易维护,程序易维 ...

  5. PDM使用问题总结

    1.连接postgres生成pdm 直接连postgres数据库生成的可以生成表名,但表结构为空,不知为何,后来直接用生成数据库sql脚本后转成pdm成功.但是列注释没有了. 2.sql语句生成的pd ...

  6. Node.js 参考学习地址

    前段时间研究过Node.js 自从由于笔记本硬盘崩了之后就很少在家里搞程序了,但是很想学习之,只因最近在努力学习英文.技术之外的事也需要做好,我们毕竟不是为了技术而生,技术是我们生存的一门得力技能,唯 ...

  7. uva 10245 The Closest Pair Problem_枚举

    题意:求任意两点之间的距离的最少一个距离 思路:枚举一下就可以了 #include <iostream> #include<cstdio> #include<cmath& ...

  8. [转]Java汉字按照拼音排序

    最近项目上使用到汉字排序的问题,网上搜索了一下后普遍使用下面的方法比较. @Test public void test_sort_pinyin() { Collator cmp = Collator. ...

  9. jQuery 遍历 - siblings() 方法

    本文来自:http://www.w3school.com.cn/jquery/traversing_siblings.asp jQuery 遍历参考手册 实例 查找每个 p 元素的所有类名为 &quo ...

  10. 启动监听报错:TNS-12537: TNS:connection closed TNS-12560: TNS:protocol adapter error TNS-00507: Connection closed Linux Error: 29: Illegal seek

    启动监听程序报错: 说明:在rhel5.8上安装完成oracle11g数据库后,使用netca创建完监听,启动监听时报错.还未使用dbca创建实例. [oracle@rusky-oracle11g ~ ...