- front 和 rear 都是Node, front 指向队首元素,rear 指向队尾元素
- 队列空:front = null, rear = null
- 初始状态下,front = null, rear = null
using System; class Node<T> { private T data; private Node<T> next; public Node(T value) { data = value; next = null; } public T Data { get{return data;}set{data = value;} } public Node<T> Next { get{return next;} set{next = value;} } } interface IQueue<T> { int Count{get;} int GetLength(); bool IsEmpty(); void Clear(); void EnQueue(T element); T DeQueue(); T Peek(); } class LinkQueue<T> : IQueue<T> { private Node<T> front; private Node<T> rear; private int count = 0; public LinkQueue() { front = null; rear = null; count = 0; } public int Count{get{return count;}} public int GetLength(){return count;} public bool IsEmpty(){return count == 0;} public void Clear(){count = 0; front = null; rear = null;} public void EnQueue(T value) { Node<T> nodeNew = new Node<T>(value); if(front == null && rear == null) { front = nodeNew; rear = nodeNew; } else { rear.Next = nodeNew; rear = nodeNew; } count++; } public T DeQueue() { if(front == null && rear == null) { Console.WriteLine("queue is empty, can not DeQueue!"); return default(T); } else if(count == 1) { T value = front.Data; Clear(); return value; } else { Node<T> temp = front; front = front.Next; temp.Next = null; count--; return temp.Data; } } public T Peek() { return front.Data; } } public class Test { public static void Main() { IQueue<string> queue = new LinkQueue<string>(); queue.EnQueue("aaa"); queue.EnQueue("bbb"); queue.EnQueue("ccc"); Console.WriteLine("EnQueue aaa bbb ccc, queue.Count:{0}", queue.Count); Console.WriteLine("queue.Peek:{0}", queue.Peek()); while(queue.Count > 0) { Console.WriteLine("queue.DeQueue:{0}", queue.DeQueue()); } queue.EnQueue("111"); queue.EnQueue("222"); queue.EnQueue("333"); queue.EnQueue("444"); queue.EnQueue("555"); queue.EnQueue("666"); queue.EnQueue("777"); Console.WriteLine("EnQueue 111 222 333 444 555 666 777, queue.Count:{0}", queue.Count); Console.WriteLine("queue.Count:{0}", queue.Count); while(queue.Count > 0) { Console.WriteLine("queue.DeQueue:{0}", queue.DeQueue()); } Console.WriteLine("queue.Count:{0}", queue.Count); } }
EnQueue aaa bbb ccc, queue.Count:3 queue.Peek:aaa queue.DeQueue:aaa queue.DeQueue:bbb queue.DeQueue:ccc EnQueue 111 222 333 444 555 666 777, queue.Count:7 queue.Count:7 queue.DeQueue:111 queue.DeQueue:222 queue.DeQueue:333 queue.DeQueue:444 queue.DeQueue:555 queue.DeQueue:666 queue.DeQueue:777 queue.Count:0
文章来源: 链队列