c#实现链表

c#实现链表
首先定义结点类型,定义了,前一个指针域,后一个指针域,如下:

 


using System;


namespace List
{
 /// <summary>
 /// Summary description for ListNode.
 /// </summary>


// 结点类



 public class ListNode
 {
  public ListNode(int NewValue)
  {
   Value=NewValue;
  }


  /// <summary>
  /// 前一个
  /// </summary>


     
  public ListNode Previous;



  /// <summary>
  /// 后一个
  /// </summary>



  public ListNode Next;



  /// <summary>
  /// 值
  /// </summary>



  public int Value;
 }
}


using System;

namespace List
{


 /// <summary>
 /// 链表类
 /// </summary>

定义结点之后,开始类线性表的操作编程了.在LIST 类中,采用了,Head ,Tail,  Current,三个指针,使用Append ,MoveFrist,MovePrevious,MoveNext,MoveLast ,Delete,InsertAscending,InsertUnAscending ,Clear 实现移动,添加,删除,升序插入,降序插入,清空链表操作,GetCurrentValue() 方法取得当前的值。


 public class Clist
 {
  public Clist()

  {

   //构造函数

   //初始化


   ListCountValue=0;

   Head=null;

   Tail=null;


  }


  /// <summary>
  /// 头指针
  /// </summary>


  private ListNode Head;


  /// <summary>
  /// 尾指针
  /// </summary>
  
  private ListNode Tail;

  /// <summary>
  /// 当前指针
  /// </summary>
  
  private ListNode Current;

  /// <summary>
  /// 链表数据的个数
  /// </summary>
  
  private int ListCountValue;

  /// <summary>
  /// 尾部添加数据
  /// </summary>
 
  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;

  }
        
  /// <summary>
  /// 删除当前的数据
  /// </summary>


  public void Delete()
  {  
   //若为空链表

   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>
  /// 向后移动一个数据
  /// </summary>


  public void MoveNext()
  {
     if (! IsEof()) Current=Current.Next ;
  }
  /// <summary>
  /// 向前移动一个数据
  /// </summary>
  
  public void MovePrevious()
  {
   if (!IsBof()) Current=Current.Previous  ;
  }

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

  /// <summary>
  /// 移动到最后一个数据
  /// </summary>


  public void MoveLast()
  {
   Current=Tail;
  }

  /// <summary>
  /// 判断是否为空链表
  /// </summary>


  public bool IsNull()
  {
   if (ListCountValue==0)
   return true;

   return false;
  }

  /// <summary>
  /// 判断是否为到达尾部
  /// </summary>
  
  public bool IsEof()
  {
   if( Current  ==Tail )
   return true;

   return false;
  }

  /// <summary>
  /// 判断是否为到达头部
  /// </summary>
  

  public bool IsBof()
  {
   if( Current ==Head)
    return true;

      return false;

  }

  public int GetCurrentValue()
  {
   
   return Current.Value ;

  }
       
  /// <summary>
  /// 取得链表的数据个数
  /// </summary>
  
  public int ListCount
  {
   get
   {
    return ListCountValue;
   }
  }

  /// <summary>
  /// 清空链表
  /// </summary>
  
  public void Clear()
  {  
   MoveFrist();
   while (!IsNull())
   {
    //若不为空链表,从尾部删除
     
    Delete();

   }
  }

  /// <summary>
  /// 在当前位置前插入数据
  /// </summary>
  
  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+=1;

      return;
   }

   //中间插入
           
           
   NewNode.Next =Current;

   NewNode.Previous =Current.Previous ;

   Current.Previous.Next =NewNode;

   Current.Previous =NewNode;
          
   Current=NewNode;

   ListCountValue+=1;

  }

  /// <summary>
  /// 进行升序插入
  /// </summary>
  
  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();

   }
     }


  /// <summary>
  /// 进行降序插入
  /// </summary>


  public void InsertUnAscending(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();

   }
  }
 }
}
 



       好了,一个简单的链表类实现了,当然还有许多的功能,可以根据自己的需要添加就好了。TO BE CONTINUE 。


posted on 2007-01-31 09:20 zwgood 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/zw0736/archive/2007/01/31/635391.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[笔试题]交换两个数不使用第三方变量 深入理解按位异或运算符

异或运算相当与mod 2运算&#xff1a; 1^1 0, 1^0 1, 0^1 1, 0 ^ 0 0 (11)%2 0, (10)%2 1, (01)%2 1, (00)%2 0 Single Number II 这题从所有出现3次的数组中找只出现一次的数&#xff0c;相当于mod 3运算 以下部分为转载&#xff1a; 转载&#xff1a;http://blog.csdn…

微软面向初学者的机器学习课程:1.4-机器学习技术

写在前面&#xff1a;最近在参与microsoft/ML-For-Beginners的翻译活动&#xff0c;欢迎有兴趣的朋友加入&#xff08;https://github.com/microsoft/ML-For-Beginners/issues/71&#xff09;机器学习技术构建、使用和维护机器学习模型及其使用的数据的过程与许多其他开发工作流…

四川大学计算机科学与技术专业分数线,2015年四川大学计算机科学与技术硕士考研复试分数线是290分...

2015年四川大学计算机科学与技术硕士考研复试分数线是290分 (4页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;19.90 积分2015 年四川大学计算机科学与技术硕士考研复试分数线是 290 分2015 年四川大…

一个男人逐渐变心的过程。。 | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;渣男&#xff0c;实锤&#xff01;↓ ↓ ↓

2013-10-10

为什么80%的码农都做不了架构师&#xff1f;>>> http://wordpress.org/plugins/find-duplicates/ 检测文章的标题是否重复的插件 转载于:https://my.oschina.net/520yzw/blog/167580

arm cpu 超频_树莓派 400 超频方法介绍

对树莓派 400 进行超频非常容易实现。散热上&#xff0c;树莓派 400 设计了一个面积很大的被动散热器&#xff0c;这很有用。无需额外的主动降温就可以应对超频的散热需求。尽管有些用户通过配置&#xff0c;让树莓派 400 超频到了 2.2GHz&#xff0c;但我相信 2GHz 更稳一些。…

Blazor Server 和 WebAssembly 应用程序入门指南

翻译自 Waqas Anwar 2021年3月12日的文章 《A Beginner’s Guide To Blazor Server and WebAssembly Applications》 [1]如果您一直紧跟 .NET 世界的最新发展趋势&#xff0c;那么现在您一定听说过 Blazor。目前在 .NET 社区中有很多关于 Blazor 的宣传&#xff0c;这种宣传最常…

张萍萍山东大学计算机科学系毕业生,并行驰骋,放“码”来战!看先导杯大奖赛上山大风采...

原标题&#xff1a;并行驰骋&#xff0c;放“码”来战&#xff01;看先导杯大奖赛上山大风采近日&#xff0c;山东大学计算机科学与技术学院2018级硕士研究生杨林、2020级硕士研究生李威宇组成的团队获得中科院“先导杯”并行应用大赛人工智能赛“大规模物体检测”和“神经网络…

利用percona-toolkit工具检查MySQL数据库主从复制数据的一致性,以及修复。

利用percona-toolkit工具检查MySQL数据库主从复制数据的一致性&#xff0c;以及修复。一、pt-table-checksum检查主从库数据的一致性pt-table-checksum在MASTER上校验指定库、表&#xff0c;将结果存在一个库表里&#xff0c;复制进程将检验sql传递到slave上再执行一次。通过比…

终于丫你奶奶的浩方了!

使用NTFS权限管理清除浩方对战平台广告 作者:feixing 时间:2005-7-14 18:33:17第 1 楼相信坛子里用到浩方上网玩游戏的人应该不下少数吧&#xff1f;随着浩方越做越大。当然也就随之会多很多我们根本不想要的东西。例如在登录浩方时。下方的广告框。进入浩方时。一个劲弹出的窗…

一个妄想的技术宅, 一个自己挖的核掩体, 一起怪异的死亡事件!!

世界只有3.14 % 的人关注了青少年数学之旅2017年9月10日&#xff0c;美国马里兰Bethesda&#xff0c;一个名叫Maplewood的社区如往日般平静。一位居民正在修理自己车挡风玻璃上的裂缝&#xff0c;突然他听到有人大喊&#xff1a;快出来&#xff01;快出来&#xff01;他往声音传…

bigint在java中用什么表示_为什么说开车最能看出一个人的人品和情商?这几条说的太精辟了...

人们常说&#xff0c;想要看清一个女人&#xff0c;就和她逛一次街&#xff0c;想要认清一个男人&#xff0c;就和他喝一次酒&#xff0c;无论是男人和女人&#xff0c;想要认清一个普通人&#xff0c;通过他开车就能看出来。因为每一次开车&#xff0c;都可以看出一个人的底线…

NET问答: 如何使用 C# 直接从 JSON String 中提取特定值 ?

咨询区 Alon Shmiel&#xff1a;我有一个 string&#xff0c;现在我想从中提取出一些值&#xff0c;格式大概如下&#xff1a;string1:"{\r\n \"id\": \"100000280905615\",\r\n \"name\": \"Jerard Jones\",\r\n \"fir…

计算机Word应用程序,Word2007目录设置_计算机软件和应用程序_IT /计算机_信息

Word2007形成目录的方法步骤/方法1.设置目录样式. 此步骤是整理论文和文章&#xff0c;然后定义和设置多级序列的样式(普通论文需要第一级序列XX字体&#xff0c;几个大小的单词等). 主要用途是word2007的样式区域. 打开word2007&#xff0c;然后在“开始”区域中找到“样式”区…

英国出土1600年前的文物,上面居然刻着简体中文?!

全世界只有3.14 % 的人关注了青少年数学之旅最近&#xff0c;一幅大约1600年前的罗马马赛克壁画在英国考古界引起了轰动。这幅壁画的长度和宽度均为6米&#xff0c;埋藏在英国西伯克郡的Boxford村。据考古专家介绍&#xff0c;算上它在内&#xff0c;类似的马赛克壁画全世界一共…

asp.net控件开发基础(20)

示例代码上面我们讨论了数据绑定控件的做法&#xff0c;但都未涉及到asp.net2.0中数据源控件的用法&#xff0c;让用惯了数据源控件的人可能感觉不适应。这次我们就开始讨论在asp.net2.0中&#xff0c;我们该如何重新定义数据绑定控件。我一直在想&#xff0c;是先讨论数据源控…

Win7 Ubuntu13.04互通(win7下用vbox安装Ubuntu)

2019独角兽企业重金招聘Python工程师标准>>> <p>VirtualBox设置</p> <p>采用的是Bridgehost方式</p> <p><a href"http://static.oschina.net/uploads/img/201310/11213732_gHMq.jpg"><img style"background-…

后端接口重定向_接口自动化面试题,建议收藏!

1、get和post的区别&#xff1f;l http是上层请求协议&#xff0c;主要定义了服务端和客户端的交互规格&#xff0c;底层都是tcp/ip协议l Get会把参数附在url之后&#xff0c;用&#xff1f;分割&#xff0c;&连接不同参数&#xff0c;Get获取资源&#xff0c;post会把参数…

.net core ——利用 roslyn 编译C#代码

Rosyln介绍Rosyln1 是 .NET Core和 .NET 4.6 中 的C# 、VB的编译器&#xff0c;宇宙最强IDE Visual Studio 也是使用其来编译代码的&#xff0c; 基于编译器也是服务的理念&#xff0c;微软开发者把其独立出来&#xff0c;并开源维护&#xff0c;开源地址参见注脚2。在工作流引…

期货市场计算机分析指南在线,期货市场计算机分析指南

39.60定价&#xff1a;55.00(7.2折)(美)勒博&#xff0c;(美)卢卡斯 著&#xff0c;何苗 译/2012-04-01《期货市场计算机分析指南》花费了作者大量的心血&#xff0c;这从书中的内容就可以看出。我所读过的有关技术分析的大部分书未能给各种技巧及随后的交易方法打下坚实的基础…