链队列

匿名 (未验证) 提交于 2019-12-03 00:30:01
  • 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   
文章来源: 链队列
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!