首页 >> WEB开发

C#单链表--数据结构(C#) 链表基础入门

2011-03-22 09:13:33

C#单链表--数据结构(C#) 单链表基础入门:

与顺序表相比,链表有自己的特点:插入、删除操作无需移动元素;能够高效实现动态内存分配;但不能按节点索引快速定位到节点;由于需要记录指针域,系统开销较大。

C#-Codeusing System;
using System.Collections.Generic;
using System.Text;

namespace Framework2._0Demo.单项链表
{
//定义单链表的表头
public class Node
{
//存储数据,定义为基类,可以存不同类型的数据
public Object Element;
//指向下一个结点的引用
public Node Link;

//构造空结点
public Node()
{
this.Element = null;
this.Link = null;
}
//带参数的构造器
public Node(Object element)
{
this.Element = element;
this.Link = null;
}
}

public class LinkedList
{
//此处原书有误,不应该设置为peotected,这样会导致结点没有实例化
public Node Header;
public LinkedList()
{
Header = new Node("header");
}

//查找链表中的元素
private Node Find(Object item)
{
Node Current = Header;
while (Current.Element != item)
{
Current = Current.Link;
}
return Current;
}

//在链表中插入元素
public void InsertNode(Object newItem, Object after)
{
Node Current = Find(after);
Node NewNode = new Node(newItem);
if (Current != null)
{
NewNode.Link = Current.Link;
Current.Link = NewNode;
}
}


public Node FindPrevious(Object n)
{
Node Current = Header;
while (!(Current.Link == null) && (Current.Link.Element != n))
{
Current = Current.Link;
}
return Current;
}

//删除结点
public void Remove(Object item)
{
Node P = FindPrevious(item);
if (!(P.Link == null))
{
P.Link = P.Link.Link;
}
}

//打印链表
public void PrintList()
{
Node Current = new Node();
Current = this.Header;
while (Current.Link != null)
{
Console.WriteLine(Current.Link.Element);
Current = Current.Link;
}
}

}
//Test
public class SinglyLinkedList
{
public void Test()
{
//实例化结点
Node FirstNode = new Node("1");
Node SecondNode = new Node("2");
Int32 Num = 5;
//因为我们定义结点的时候是用object类型,所以结点可以存储不同类型
Node ThirdNode = new Node(Num);
FirstNode.Link = SecondNode;
SecondNode.Link = ThirdNode;
ThirdNode.Link = null;
LinkedList MyList = new LinkedList();
//将头结点指向第一个结点
MyList.Header.Link = FirstNode;
//插入结点
MyList.InsertNode("3", "1");
MyList.InsertNode("4", "2");
//打印链表中的结点元素
MyList.PrintList();
Console.ReadLine();
}
}
}
using System;
using System.Collections.Generic;
using System.Text;

namespace Framework2._0Demo.单项链表
{
//定义单链表的表头
public class Node
{
//存储数据,定义为基类,可以存不同类型的数据
public Object Element;
//指向下一个结点的引用
public Node Link;

//构造空结点
public Node()
{
this.Element = null;
this.Link = null;
}
//带参数的构造器
public Node(Object element)
{
this.Element = element;
this.Link = null;
}
}

public class LinkedList
{
//此处原书有误,不应该设置为peotected,这样会导致结点没有实例化
public Node Header;
public LinkedList()
{
Header = new Node("header");
}

//查找链表中的元素
private Node Find(Object item)
{
Node Current = Header;
while (Current.Element != item)
{
Current = Current.Link;
}
return Current;
}

//在链表中插入元素
public void InsertNode(Object newItem, Object after)
{
Node Current = Find(after);
Node NewNode = new Node(newItem);
if (Current != null)
{
NewNode.Link = Current.Link;
Current.Link = NewNode;
}
}


public Node FindPrevious(Object n)
{
Node Current = Header;
while (!(Current.Link == null) && (Current.Link.Element != n))
{
Current = Current.Link;
}
return Current;
}

//删除结点
public void Remove(Object item)
{
Node P = FindPrevious(item);
if (!(P.Link == null))
{
P.Link = P.Link.Link;
}
}

//打印链表
public void PrintList()
{
Node Current = new Node();
Current = this.Header;
while (Current.Link != null)
{
Console.WriteLine(Current.Link.Element);
Current = Current.Link;
}
}

}
//Test
public class SinglyLinkedList
{
public void Test()
{
//实例化结点
Node FirstNode = new Node("1");
Node SecondNode = new Node("2");
Int32 Num = 5;
//因为我们定义结点的时候是用object类型,所以结点可以存储不同类型
Node ThirdNode = new Node(Num);
FirstNode.Link = SecondNode;
SecondNode.Link = ThirdNode;
ThirdNode.Link = null;
LinkedList MyList = new LinkedList();
//将头结点指向第一个结点
MyList.Header.Link = FirstNode;
//插入结点
MyList.InsertNode("3", "1");
MyList.InsertNode("4", "2");
//打印链表中的结点元素
MyList.PrintList();
Console.ReadLine();
}
}
}