• 1.摘要
  • 2.基本信息
  • 3.如何实现
  • 4.如何编辑
  • 4.1.建立
  • 4.2.插入
  • 4.3.删除

单向链表

单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。 通过指针连接起来,但是只能单向遍历的内存块。由于它是单向的,或者说不可逆的,所以我们可以把它比作我们的人生:小学->中学->大学->工作->养老。

基本信息

  • 中文名

    单向链表

  • 外文名

    One-way LinkedList

  • 定义

    链表的一种

  • 特点

    链表的链接方向是单向的

  • 目的

    学习单向链表

如何实现

链表是一种重要的 数据结构,该结构由 节点组成。每个节点包含两部分数据,第一部分是节点本身的数据,第二部分是指向下一个节点的 指针。对于单向链表,链表中存在两个特殊的节点,分别为“头节点”和“尾节点”。头节点本身没有数据,只存储下一个节点的指针,尾节点只存储数据。结点的定义及对 线性表的操作如下:

首先,定义一个结点类用于对结点的描述。其中,私有成员Value用于储存节点本身的数据,Next用于存储下一个节点的指针,Previous用于存储上一个节点的指针。对于链表的操作,无非是进行节点的查找、插入和删除操作。代码如下:

// 结点类

publicclassListNode
{
    publicListNode(intNewValue)//,intNewCurrent)
    {
      Value=NewValue;
        //Current=NewCurrent;
        }
    //前一个
    publicListNodePrevious; 
    //后一个
    publicListNodeNext;
    //值
    publicintValue;
    ////指针
    //publicintCurrent;
}

然后定义了一个Clist类,主要对线性表基本操作的编程。其中包括,Head、Tail、Current三个指针和Append、MoveFrist、MovePrevious、MoveNext、MoveLast、Delete、InsertAscending、InsertUnAscending、Clear、 GetCurrentValue方法,用于实现移动、添加、删除、升序插入、降序插入、清空链表、取得当前的值等操作。代码如下:

/定义结点之后,开始类线性表的操作编程了.在ClIST类中,采用了,Head,Tail, Current,三个指针,使用Append,MoveFrist,MovePrevious,MoveNext,MoveLast,Delete,InsertAscending,InsertUnAscending,Clear实现移动,添加、删除,升序插入,降序插入,清空链表操作,GetCurrentValue()方法取得当前的值。 
publicclassClist
{
///<summary>
///初始化线性表
///</summary>
publicClist()
{
  //构造函数
  //初始化
  ListCountValue=0;
  Head=null;
  Tail=null;
}
//头指针
privateListNodeHead; 
//尾指针 
privateListNodeTail; 
//当前指针
privateListNodeCurrent; 
//链表数据的个数
privateintListCountValue;

在链表尾部添加数据的代码如下:

///尾部添加数据
///</summary> 
///<paramname="DataVal
ue"></param>
publicvoidAppend(intDataValue)//,intDataCurrent)
{
  ListNodeNewNode=newListNode(DataValue);//,DataCurrent);
  if(IsNull())
  //如果头指针为空
  {
    Head=NewNode;
    Tail=NewNode;
  }
  else 
  {
    Tail.Next=NewNode;
    NewNode.P
        revious=Tail;
    Tail=NewNode;
  }
  Current=NewNode;
  //链表数据个数加一
  ListCountValue+=1;
}

删除当前位置的结点的代码如下:

///删除当前的数据
///</summary>
publicvoidDelete()
{
  //若为空链表
  if(!IsNull())
  {
    //若删除头
    if(IsBof())
    {
      Head=Current.Next;
      Current=Head;
      ListCountValue-=1;
      return;
    }
    //若删除尾
    if(IsEof())
    {
      Tail=Current.Previous;
      Current=Tail;
      ListCountValue-=1;
      return;
    }
    //若删除
中间数据
    Current.Previous.Next=Current.Next;
     Current=Current.Previous;
    ListCountValue-=1;
    return;
  }
}

向后移动一个结点的代码如下:

//向后移动一个数据
///</summary>
publicvoidMoveNext()
{
  if(!IsEof())Current=Current.Next;
}

向前移动一个结点的代码如下:

///向前移动一个数据
///</summary>
publicvoidMoveP
revious()
{
  if(!IsBof())Current=Current.Previous;
}

移动到第一个结点的代码如下:

///移动到第一个数据
///</summary>
publicvoidMoveFrist()
{
  Current=Head;
}

移动到最后一个结点的代码如下:

///移动到最后一个数据
///</summary>
publicvoidMoveLast()
{
  Current=Tail;
}

判断链表是否为空的代码如下: