VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > c#教程 >
  • C#教程之C#教程之 实现 数据结构 链队列

本站最新发布   C#从入门到精通
试听地址  
https://www.xin3721.com/eschool/CSharpxin3721/

namespace _003_队列
{
interface IQueueDS
{
int Count// count属性
{
get;
}

int GetLength();//取得队长度

void Enqueue(T item);//入队

T Dequeue();//出队

T Peek();//取值

void Clear();//清空

bool IsEmpty();//判断队是否为空
}
}



namespace _003_队列
{
class Node<T>
{
private T data; //节点的值
private Node<T> next; //节点的引用

public Node(T data) //构造
{
this.data = data;
Next = null;
}

public T Data //节点的值的属性
{
get { return data; }
set { data = value; }
}

public Node<T> Next //节点的引用的属性
{
get{ return next; }
set{ next = value; }
}
}
}



namespace _003_队列
{
class LinkQueue:IQueueDS
{
private Node front; //头节点
private Node rear; //尾节点
private int count; //记录队列中数据个数

public LinkQueue() //构造
{
front = null;
rear = null;
count = 0;
}

public int Count { get { return count; } } //属性

public int GetLength() //取得队列数据个数方法
{
return count; 
}

public void Enqueue(T item) //入队 
{
Node newNode = new Node(item); 

if (count == 0) //空队时入队,首尾节点都指向新节点

front = newNode;
rear = newNode;
count = 1;
}
else //非空队入队,首节点无需操作,尾节点指向新节点
{
rear.Next = newNode;
rear = newNode;
count++;
}
}

public T Dequeue() //出队
{
T temp = front.Data; //temp 存头节点值
if (count == 0) //空队无法出队
{
Console.WriteLine("空队无法出队!!!!!"); 
return default(T);
}
else if (count == 1) //队列仅有的一个数据时,出队后,首尾节点都置空(null)
{
front = rear = null;
count = 0;
return temp;
}
else //队列有一个以上数据时,出队后,头节点指向下一个节点
{
front = front.Next;
count--;
return temp;
}
}

public T Peek() //取得头节点值得方法
{
if (front != null) //非空队时直接返回头节点值
{
return front.Data;
}
else //空队时返回该类型默认值
{
Console.WriteLine("空队无法Peek!!!!!!!!");
return default(T);
}
}

public void Clear() //清空
{
count = 0;
front = rear = null;
}

public bool IsEmpty() //判断是否为空
{
return count == 0;
}
}
}





namespace _003_队列
{
class Program
{
static void Main(string[] args)
{
//Queue testQueue = new Queue(); //1.使用BCL中的队

//SeqQueue testQueue = new SeqQueue(); //2.使用自己编写的顺序队

LinkQueue testQueue = new LinkQueue(); //3.使用自己编写的链队

Console.WriteLine(testQueue.IsEmpty());//true
testQueue.Enqueue(1);
testQueue.Enqueue(2);
testQueue.Enqueue(3);

Console.WriteLine("1,2,3,入队后,队中数据个数是" + testQueue.Count);//3
Console.WriteLine(testQueue.IsEmpty());//false

int i = testQueue.Dequeue();
Console.WriteLine(i + "出队了");//1
Console.WriteLine("1出队之后,队中数据个数是" + testQueue.Count);//2

int k = testQueue.Dequeue();
Console.WriteLine(k + "出队了");//2
Console.WriteLine("2出队之后,队中数据个数是" + testQueue.Count);//1

int j = testQueue.Peek();
Console.WriteLine(j + "peek 了");//3
Console.WriteLine("3peek之后,队中数据个数是" + testQueue.Count);//1

testQueue.Clear();
Console.WriteLine("Clear 之后队中数据个数是" + testQueue.Count);//0

Console.ReadKey();
相关教程