转:C#数据结构和算法学习系列七----队列、队列的实现和应用

队列是一种把数据从表的末端放入并在表的前端移除的数据结构。队列会按照数据项出现的顺序来存储它们。队列是先进先出(FIFO)数据结构的实例。队列用 来对提交给操作系统或打印池的任务进行排序,而模拟应用程序则用队列对用户等待队列进行模拟。队列包含两种主要的操作。一个是给队列添加新的数据项,另一 个则是把数据项从队列中移除。添加新数据项的操作被称为是Enqueue,而从队列中移除数据项的操作则被称为是Dequeue。Enqueue 操作会在队列的末尾添加一个数据项,而Dequeue 操作则会从队列的
前端(或开始处)移除一个数据项。

(1).Queue类。下面这个Queue 类的实现包含EnQueue 方法、DeQueue 方法、ClearQueue 方法(清除队列)、Peek 方法以及Count 方法,而且还有一个用于此类的默认构造器。

  1. public class CQueue  
  2. {  
  3.      private ArrayList pqueue;  
  4.      public CQueue()  
  5.      {  
  6.           pqueue = new ArrayList();  
  7.      }  
  8.      public void EnQueue(object item)  
  9.      {  
  10.           pqueue.Add(item);  
  11.      }  
  12.      public void DeQueue()  
  13.      {  
  14.           pqueue.RemoveAt(0);  
  15.      }  
  16.      public object Peek()  
  17.      {  
  18.           return pqueue[0];  
  19.      }  
  20.      public void ClearQueue()  
  21.      {  
  22.           pqueue.Clear();  
  23.      }  
  24.      public int Count()  
  25.      {  
  26.           return pqueue.Count;  
  27.      }  
  28. }  

(2).Queue的应用

     1.几种初始化方式

        Queue myQueue = new Queue(100);

        Queue myQueue = new Queue(32, 3);

        Queue<int> numbers = new Queue<int>();

      2.实例应用

  1. using System;  
  2. using System.Collections;  
  3. using System.IO ;  
  4. namespace csqueue  
  5. {  
  6.      public struct Dancer  
  7.      {  
  8.           public string name;  
  9.           public string sex;  
  10.           public void GetName(string n)  
  11.           {  
  12.                name = n;  
  13.           }  
  14.           public override string ToString()  
  15.           {  
  16.                return name;  
  17.      }  
  18. }  
  19. class Class1  
  20. {  
  21.      static void newDancers(Queue male, Queue female)  
  22.      {  
  23.           Dancer m, w;  
  24.           m = new Dancer();  
  25.           w = new Dancer();  
  26.           if (male.Count > 0 && female.Count > 0)  
  27.           {  
  28.                m.GetName(male.Dequeue().ToString());  
  29.                w.GetName(female.Dequeue().ToString());  
  30.           }  
  31.           else if ((male.Count > 0) && (female.Count == 0))  
  32.                Console.WriteLine("Waiting on a female dancer.");  
  33.           else if ((female.Count > 0) && (male.Count == 0))  
  34.                Console.WriteLine("Waiting on a male dancer.");  
  35.      }  
  36.      static void headOfLine(Queue male, Queue female)  
  37.      {  
  38.           Dancer w, m;  
  39.           m = new Dancer();  
  40.           w = new Dancer();  
  41.           if (male.Count > 0)  
  42.           m.GetName(male.Peek().ToString());  
  43.           if (female.Count > 0)  
  44.                w.GetName(female.Peek().ToString());  
  45.           if (m.name != " " && w.name != "")  
  46.                Console.WriteLine("Next in line are: " + m.name + "\t" + w.name);  
  47.           else  
  48.                if (m.name != ""//!=  
  49.                     Console.WriteLine("Next in line is: " + m.name);  
  50.                else  
  51.                     Console.WriteLine("Next in line is: " + w.name);  
  52.      }  
  53.      static void startDancing(Queue male, Queue female)  
  54.      {  
  55.           Dancer m, w;  
  56.           m = new Dancer();  
  57.           w = new Dancer();  
  58.           Console.WriteLine("Dance partners are: ");  
  59.           Console.WriteLine();  
  60.           for (int count = 0; count <= 3; count++)  
  61.           {  
  62.                m.GetName(male.Dequeue().ToString());  
  63.                w.GetName(female.Dequeue().ToString());  
  64.                Console.WriteLine(w.name + "\t" + m.name);  
  65.           }  
  66.      }  
  67.      static void formLines(Queue male, Queue female)  
  68.      {  
  69.           Dancer d = new Dancer();  
  70.           StreamReader inFile;  
  71.           inFile = File.OpenText(@"c:\dancers.dat");  
  72.           string line;  
  73.           while (inFile.Peek() != -1)  
  74.           {  
  75.                line = inFile.ReadLine();  
  76.                d.sex = line.Substring(0, 1);  
  77.                d.name = line.Substring(2, line.Length - 2);  
  78.                if (d.sex == "M")  
  79.                     male.Enqueue(d);  
  80.                else  
  81.                     female.Enqueue(d);  
  82.           }  
  83.      }  
  84.      static void Main(string[] args)  
  85.      {  
  86.           Queue males = new Queue();  
  87.           Queue females = new Queue();  
  88.           formLines(males, females);  
  89.           startDancing(males, females);  
  90.           if (males.Count > 0 || females.Count > 0)  
  91.                headOfLine(males, females);  
  92.           newDancers(males, females);  
  93.           if (males.Count > 0 || females.Count > 0)  
  94.                headOfLine(males, females);  
  95.           newDancers(males, females);  
  96.           Console.Write(" press enter");  
  97.           Console.Read();  
  98.      }  

posted @ 2011-11-07 15:58  追_bk  阅读(203)  评论(0编辑  收藏  举报