1. 链队
使用一个结点类Node,包含了数据域和指针域,定义了一个接口,和一个类实现接口。
1.1 Node.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _403_队列
{
class Node<T>
{
private T data;
private Node<T> next;
public Node(T data)
{
this.data = data;
}
public T Data
{
get
{
return data;
}
set
{
data = value;
}
}
public Node<T> Next
{
get
{
return next;
}
set
{
next = value;
}
}
}
}
1.2 IQueue.cs(接口)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _403_队列
{
interface IQueue<T>
{
int Count { get; }
int GetLength();
bool IsEmpty();
void Clear();
void Enqueue(T item);
T Dequeue();
T Peek();
}
}
1.3 LinkQueue.cs(实现接口)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _403_队列
{
class LinkQueue<T> : IQueue<T>
{
private Node<T> front;//头结点
private Node<T> rear;//尾结点
private int count;//队列中元素个数
public LinkQueue()
{
front = null;
rear = null;
count = 0;
}
public int Count
{
get
{
return count;
}
}
/// <summary>
///清空对列
/// </summary>
public void Clear()
{
front = rear = null;
count = 0;
}
/// <summary>
/// 出队,取得队头元素并删除
/// </summary>
/// <returns></returns>
public T Dequeue()
{
if(count==0)
{
Console.WriteLine("队列为空,无法出队");
return default(T);
}
else if(count==1)
{
T temp = front.Data;
front = rear = null;
count = 0;
return temp;
}
else
{
T temp = front.Data;
front = front.Next;
count--;
return temp;
}
}
/// <summary>
/// 入队
/// </summary>
/// <param name="item"></param>
public void Enqueue(T item)
{
Node<T> newNode = new Node<T>(item);
if (count==0)
{
front = newNode;
rear = newNode;
count = 1;
}
else
{
rear.Next = newNode;
rear = newNode;
count++;
}
}
/// <summary>
/// 取得队列长度
/// </summary>
/// <returns></returns>
public int GetLength()
{
return count;
}
/// <summary>
/// 队列是否为空
/// </summary>
/// <returns></returns>
public bool IsEmpty()
{
return count == 0;
}
/// <summary>
/// 取得队首元素,不删除
/// </summary>
/// <returns></returns>
public T Peek()
{
return front.Data;
}
}
}
1.4 Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _403_队列
{
class Program
{
static void Main(string[] args)
{//3.使用自己定义的链队
LinkQueue<int> queue = new LinkQueue<int>();
//入队(添加数据)
queue.Enqueue(3);//入队(放在队尾)
queue.Enqueue(4);//入队(放在队尾)
queue.Enqueue(5);//入队(放在队尾)
queue.Enqueue(6);//入队(放在队尾)
queue.Enqueue(7);//入队(放在队尾)
Console.WriteLine("添加了3 4 5 6 7后队列大小为:" + queue.Count);
//出队(取得队首数据并删除)
int i = queue.Dequeue();
Console.WriteLine("取得队首元素为:" + i);
Console.WriteLine("出队后队列大小为:" + queue.Count);
//取得队首元素但不删除
int j = queue.Peek();
Console.WriteLine("Peek后取得的元素:" + j);
Console.WriteLine("Peek后对列大小:" + queue.Count);
queue.Clear();
Console.WriteLine("Clear后队列大小:" + queue.Count);
Console.ReadKey();
}
}
}