当前位置:  编程技术>.net/c#/asp.net

C#定义并实现单链表实例解析

    来源: 互联网  发布时间:2014-10-31

    本文导语:  本文以实例详细描述了C#定义并实现单链表的过程及原理。一般来说C#定义并实现单链表,代码包括构成链表的结点定义、用变量来实现表头、清空整个链表 、链表复位,使第一个结点成为当前结点、判断链表是否为空、判断...

本文以实例详细描述了C#定义并实现单链表的过程及原理。一般来说C#定义并实现单链表,代码包括构成链表的结点定义、用变量来实现表头、清空整个链表 、链表复位,使第一个结点成为当前结点、判断链表是否为空、判断当前结点是否为最后一个结点、返回当前结点的下一个结点的值,并使其成为当前结点、将当前结点移出链表,下一个结点成为当前结点等内容。

具体实现代码如下所示:

using System;
using System.IO;
// 构成链表的结点定义 
public class Node 
{
 public Object data;
 public Node next;
 public Node( Object d ) 
 {
 data = d;
 next = null;
 }
}
public class List 
{
 // 用变量来实现表头
 private Node Head = null;
 private Node Tail = null;
 private Node Pointer = null;
 private int Length = 0;
 //清空整个链表 
 public void deleteAll( ) 
 {
 Head = null;
 Tail = null;
 Pointer = null;
 Length = 0;
 }
 //链表复位,使第一个结点 成为当前结点
 public void reset( ) 
 {
 Pointer = null;
 }
 //判断链表是否为空
 public bool isEmpty( ) 
 {
 return (Length == 0);
 }
 //判断当前结点是否 为最后一个结点
 public bool isEnd( ) 
 {
 if (Length == 0)
  throw new System.Exception( );
 else if (Length == 1)
  return true;
 else
  return (cursor( ) == Tail);
 }
 //返回当前结点的下一个结点的值, 并使其成为当前结点
 public Object nextNode( ) 
 {
 if (Length == 1)
  throw new System.Exception( );
 else if (Length == 0)
  throw new System.Exception( );
 else 
 {
  Node temp = cursor();
  Pointer = temp;
  if (temp != Tail)
  return (temp.next.data);
  else
  throw new System.Exception( );
 }
 }
 //返回当前结点的值
 public Object currentNode( ) 
 {
 Node temp = cursor( );
 return temp.data;
 }
 //在当前结点前插入一个结点, 并使其成为当前结点
 public void insert( Object d ) 
 {
 Node e = new Node( d );
 if (Length == 0) 
 {
  Tail = e;
  Head = e;
 } 
 else 
 {
  Node temp = cursor( );
  e.next = temp;
  if (Pointer == null)
  Head = e;
  else
  Pointer.next = e;
 }
 Length++;
 }
 //返回链表的大小
 public int size( ) 
 {
 return Length;
 }
 //将当前结点移出链表,下一个结点成为当前结点
 //如果移出的结点是最后一个结点,则第一个结点成为当前结点
 public Object remove( ) 
 {
 Object temp;
 if (Length == 0)
  throw new System.Exception( );
 else if (Length == 1) 
 {
  temp = Head.data;
  deleteAll( );
 } 
 else 
 {
  Node cur = cursor( );
  temp = cur.data;
  if (cur == Head)
  Head = cur.next;
  else if (cur == Tail) 
  {
  Pointer.next = null;
  Tail = Pointer;
  reset( );
  } 
  else
  Pointer.next = cur.next;
  Length--;
 }
 return temp;
 }
 //返回当前结点的指针
 private Node cursor( ) 
 {
 if (Head == null)
  throw new System.Exception( );
 else if (Pointer == null)
  return Head;
 else
  return Pointer.next;
 }
 //链表的简单应用举例
 public static void Main( ) 
 {
 List a = new List();
 for (int i = 1; i 

    
 
 

您可能感兴趣的文章:

  • C#实现自定义双击事件
  • 如何实现C#自定义结构的强制转换
  • C#通过反射创建自定义泛型
  • C#自定义控件添加右键菜单的实现代码
  • C#使用yield关键字让自定义集合实现foreach遍历的方法
  • Visual C#类的定义及实现方法实例解析
  • C# Form自定义光标的简单实现
  • C#常用自定义函数小结
  • 提取html中文字 C#自定义函数
  • C# .NET自定义类实现伪静态页面的代码
  • C#学习笔记之用户定义类(或结构)的类型转换
  • c#自定义泛型类的实现
  • c# 自定义泛型链表类的详解
  • 深入解析c#中枚举类型的定义与使用
  • C#自定义函数NetxtString生成随机字符串
  • C#中HashTable的定义与使用方法
  • 解决C# winForm自定义鼠标样式的两种实现方法详解
  • C#用户定义类型转换详解
  • thinkphp自定义标签与view直接标签实例教程 iis7站长之家
  • 解析C#自定义控件的制作与使用实例的详解
  • 既然在定义实例变量的时候可以初始化实例变量的值,那还要构造函数干吗?谢谢!
  • 内部类 如何得到定义它的类的实例句柄?
  • 高分火速求解,请在线朋友回答:java自定义类怎样生成实例数组?( className[] N=new className[X];怎么不行?)
  • Python过滤函数filter()使用自定义函数过滤序列实例
  • java的虚函数是怎样定义的,现想将类A中的变量x定义为只能给子类B与自己类中可访问,而又不能给其他类中用实例A a = new A()的a访问,可
  • PHP获取指定函数定义在哪个文件中以及其所在的行号实例
  • EXTJS自定义表单验证的实例代码
  • asp.net实例 定义和使用asp:AccessDataSource
  • thinkphp自定义标签与view直接标签实例教程
  • jQuery中使用data()方法读取HTML5自定义属性data-*实例
  • Android中的Button自定义点击效果实例代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • c/c++中变量的声明和定义深入解析
  • 解析C++浮点数无效值的定义与无效值判定的小结
  • 内联函数inline与宏定义深入解析
  • shell自定义函数及参数调用解析
  • 变量定义与声明的区别详细解析
  • C/C++宏定义的可变参数详细解析
  • 解析Android中使用自定义字体的实现方法
  • C语言中的内联函数(inline)与宏定义(#define)详细解析
  • 头文件不宜定义变量的原因全面解析
  • 共用体的定义与应用详细解析
  • 解析结构体的定义及使用详解
  • 解析在Android中为TextView增加自定义HTML标签的实现方法
  • Android自定义属性 format的深入解析
  • java命名空间java.awt类radialgradientpaint的类成员方法: getradius定义及介绍
  • 请问可以用宏定义定义一个二维数组吗?
  • java命名空间javax.xml.stream类xmlinputfactory成员方法: seteventallocator定义参考
  • 想修改路径定义,想找到在哪里定义的,应该怎么办?
  • java命名空间java.text接口attributedcharacteriterator的类成员方法: getallattributekeys定义及介绍
  • php定义数组和使用示例(php数组的定义方法)
  • java命名空间java.beans接口propertyeditor的类成员方法: supportscustomeditor定义及介绍
  • 上次问题解决了,原来是extern被重定义了。。。天阿,关键字也可以被重定义。。。。。欢迎接分
  • java命名空间javax.swing类jtextarea的类成员方法: getcolumnwidth定义及介绍
  • 如何定义一个可变参数的自定义函数
  • java命名空间javax.swing类jtextfield的类成员方法: getcolumnwidth定义及介绍
  • 下面的变量我都下了定义,为什么还出现没定义的信息
  • java命名空间javax.swing类actionmap的类成员方法: allkeys定义及介绍
  • oracle异常(预定义异常,自定义异常)应用介绍
  • java命名空间javax.swing类inputmap的类成员方法: allkeys定义及介绍
  • 为什么我在头文件time.h里找不到time_t的定义呢?只有这个定义typedef __time_t time_t;
  • java命名空间javax.rmi.corba接口valuehandler的类成员方法: iscustommarshaled定义及介绍
  • 函数有定义怎么提示没有低能定义的错误呢?




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3