数据结构中链表的C#实现部分示例
2016-09-21 17:34
225 查看
本文是将数据结构中常用的链表实现(C#语言)的个人课堂示例展现了一下,旨在为初学者以参考。其中大部分代码做了注释,请大家批评指正!
</pre><pre class="csharp" name="code">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//本命名空间LinkList与工程名一致,为自动生成
namespace LinkList
{
//下面即为链表LinkList的定义
class LinkList
{
//属性或字段部分
public int Length; //Length用来记录链表的长度
private Node Head; //Head是链表的头结点,不存数据
public LinkList() //链表的构造方法,结果会构建一个空链表
{
Length = 0; //链表初始长度为0
Head = new Node(); //实例化头结点Head
}
//下面为获取链表的数据元素的方法
public object GetElem(int i)
{
object e=null; //定义一个object用来返回数据元素
if (i > 0 && i <= Length)
{
Node p = Head; //定义一个结点变量p,并定位于头结点Head
for (int j = 0; j < i; j++) //利用循环标识j,控制循环使p定位于第i个结点
{
p = p.Next;
}
e = p.Data; //将选定结点的数据部分赋值给e
}
return e; //返回e的值
}
//以下为链表插入结点的方法
public bool Insert(int i, object e)
{
Node p = Head; //定义一个结点变量p,并定位于头结点Head
int j = 0; //定义整型变量j,辅助p定位到i所指结点的前驱结点
while (p != null && j < i - 1) //当p尚未移动到尾结点之后的位置(null)时,并且j仍在i的前面
{
p = p.Next; //p后移一个结点
j++; //j向后移动一位
}
if (p == null || j > i - 1) //若p移动到尾结点之后的位置(null)或j不在i的前面,返回“失败”,结束方法
return false;
Node s = new Node(); //定义结点变量s并实例化
s.Data = e; //将e赋值给s的数据域
s.Next = p.Next; //s.Next指向p.Next
p.Next = s; //p.Next指向s,完成插入结点s
Length++; //链表长度加一
return true; //返回“成功”,结束
}
//下面为输出链表的方法,结果以字符串的形式返回
public string Print()
{
string s=""; //定义空串s
Node p = Head.Next; //定义结点变量p定位于Head
while (p != null) //在p未到尾结点之后的位置时进行循环
{
s+=p.Data.ToString(); //将当前结点的Data转为string累加连接到s
if (p.Next != null) //若p不是尾结点,则之间加入“,”分隔符
s += ",";
p = p.Next; //p后移一位
}
return s;
}
//==============================================================
//此处可添加其他的方法,比如Empty(),Delete(int i)等
//==============================================================
//下面是嵌套在LinkList中的结点(Node)类
private class Node
{
public object Data; //数据域
public LinkList.Node Next; //链接域
//构造方法1,用于无数据域的结点实例化
public Node()
{
Next = null; //新的结点链接域为null
}
//构造方法2,用于给数据域直接赋值的结点实例化
public Node(object value)
{
Data = value; //给新结点数据域赋值
Next = null; //新结点链接域为null
}
}
}
}
</pre><pre class="csharp" name="code">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//本命名空间LinkList与工程名一致,为自动生成
namespace LinkList
{
//下面即为链表LinkList的定义
class LinkList
{
//属性或字段部分
public int Length; //Length用来记录链表的长度
private Node Head; //Head是链表的头结点,不存数据
public LinkList() //链表的构造方法,结果会构建一个空链表
{
Length = 0; //链表初始长度为0
Head = new Node(); //实例化头结点Head
}
//下面为获取链表的数据元素的方法
public object GetElem(int i)
{
object e=null; //定义一个object用来返回数据元素
if (i > 0 && i <= Length)
{
Node p = Head; //定义一个结点变量p,并定位于头结点Head
for (int j = 0; j < i; j++) //利用循环标识j,控制循环使p定位于第i个结点
{
p = p.Next;
}
e = p.Data; //将选定结点的数据部分赋值给e
}
return e; //返回e的值
}
//以下为链表插入结点的方法
public bool Insert(int i, object e)
{
Node p = Head; //定义一个结点变量p,并定位于头结点Head
int j = 0; //定义整型变量j,辅助p定位到i所指结点的前驱结点
while (p != null && j < i - 1) //当p尚未移动到尾结点之后的位置(null)时,并且j仍在i的前面
{
p = p.Next; //p后移一个结点
j++; //j向后移动一位
}
if (p == null || j > i - 1) //若p移动到尾结点之后的位置(null)或j不在i的前面,返回“失败”,结束方法
return false;
Node s = new Node(); //定义结点变量s并实例化
s.Data = e; //将e赋值给s的数据域
s.Next = p.Next; //s.Next指向p.Next
p.Next = s; //p.Next指向s,完成插入结点s
Length++; //链表长度加一
return true; //返回“成功”,结束
}
//下面为输出链表的方法,结果以字符串的形式返回
public string Print()
{
string s=""; //定义空串s
Node p = Head.Next; //定义结点变量p定位于Head
while (p != null) //在p未到尾结点之后的位置时进行循环
{
s+=p.Data.ToString(); //将当前结点的Data转为string累加连接到s
if (p.Next != null) //若p不是尾结点,则之间加入“,”分隔符
s += ",";
p = p.Next; //p后移一位
}
return s;
}
//==============================================================
//此处可添加其他的方法,比如Empty(),Delete(int i)等
//==============================================================
//下面是嵌套在LinkList中的结点(Node)类
private class Node
{
public object Data; //数据域
public LinkList.Node Next; //链接域
//构造方法1,用于无数据域的结点实例化
public Node()
{
Next = null; //新的结点链接域为null
}
//构造方法2,用于给数据域直接赋值的结点实例化
public Node(object value)
{
Data = value; //给新结点数据域赋值
Next = null; //新结点链接域为null
}
}
}
}
相关文章推荐
- C#实现数据结构中链表示例
- C#实现常用的数据结构(一):链表
- 重温数据结构系列随笔:单链表(c#模拟实现)
- 无聊用C#2.0泛型实现的链表(C#数据结构一)
- Java数据结构之简单链表的定义与实现方法示例
- 重温数据结构系列随笔:单链表(c#模拟实现)
- 数据结构示例之用链表实现栈
- C#实现常用的数据结构:链表
- 数据结构示例之用链表实现顺序队列
- java数据结构之实现双向链表的示例
- (转)java实现基本数据结构(堆,栈,链表)——推荐后面的链表扩展部分
- 重温数据结构系列随笔:单链表(c#模拟实现)
- 重温数据结构系列随笔:单链表(c#模拟实现)
- C#实现常用的数据结构(一):链表
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- 用C#的类实现数据结构的堆栈算法
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- .net2.0客户端回调实现 (C#) 示例
- xmlHTTP xmlDOC 与 C#中DataSet的结合 实现AJAX简单示例