数据结构小白学习笔记(三) 队列

队列的定义

限定在表的一端进行删除,另一端进行插入操作的线性表。
队头(front):允许删除的一端。
队尾(rear): 允许插入的一端。
特性:FIFO(先进先出)。
图示
数据结构小白学习笔记(三) 队列_第1张图片
基本操作

序号 方法名 & 描述
1 public virtual void Clear(); 从 Queue 中移除所有的元素。
2 public virtual bool Contains( object obj ); 判断某个元素是否在 Queue 中。
3 public virtual object Dequeue();移除并返回在 Queue 的开头的对象。
4 public virtual void Enqueue( object obj ); 向 Queue 的末尾添加一个对象。
5 public virtual object[] ToArray();复制 Queue 到一个新的数组中。
6 public virtual void TrimToSize();设置容量为 Queue 中元素的实际个数。

实例

using System;
using System.Collections;

namespace CollectionsApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         Queue q = new Queue();

         q.Enqueue('A');
         q.Enqueue('M');
         q.Enqueue('G');
         q.Enqueue('W');
         
         Console.WriteLine("Current queue: ");
         foreach (char c in q)
            Console.Write(c + " ");
         Console.WriteLine();
         q.Enqueue('V');
         q.Enqueue('H');
         Console.WriteLine("Current queue: ");         
         foreach (char c in q)
            Console.Write(c + " ");
         Console.WriteLine();
         Console.WriteLine("Removing some values ");
         char ch = (char)q.Dequeue();
         Console.WriteLine("The removed value: {0}", ch);
         ch = (char)q.Dequeue();
         Console.WriteLine("The removed value: {0}", ch);
         Console.ReadKey();
      }
   }
}

输出:
Current queue:
A M G W
Current queue:
A M G W V H
Removing values
The removed value: A
The removed value: M
队列的顺序存储结构:

  • 顺序队列:用一组连续的存储单元依次存放从队列头到队列尾元素。
  • 两个指针:
    Q.front:指向队列头元素。
    Q.rear:指向队列尾元素的下一个位置。
  • 初始状态(空队列):
    Q.front=Q.rear=0
  • 队列的真满和假满
    真满:
    数据结构小白学习笔记(三) 队列_第2张图片
    假满:虽然还有存储空间,但是rear指针已无法移动,此时为队列的假满状态。
    数据结构小白学习笔记(三) 队列_第3张图片
    顺序队列的进队和出队
    进队时,新元素按Q.rear指示位置加入,然后变动队尾指针,Q.rear=Q.rear+1.
    出队时,将下标为Q.front的元素取出,然后变动队头指针,Q.front=Q.front+1.
    队满时再进队溢出。队空时出队作队空处理。
    数据结构小白学习笔记(三) 队列_第4张图片

循环队列

数据结构小白学习笔记(三) 队列_第5张图片
循环队列可以解决队列的假满问题。
数据结构小白学习笔记(三) 队列_第6张图片
循环队列如何判断队空队满
牺牲一个空间,来作为队空队满的判断。

  • Q.front=Q.rear为队空。
  • (Q.front+1)%Num=Q.rear为队满。Num为申请的队列空间。

循环队列的6个操作:

  1. 申请空间.Num
  2. 最多存放元素 Num-1
  3. 队空Q.front=Q.rear
  4. 队满(Q.front+1)%Num=Q.rear
  5. 进队:Q.rear=(Q.rear+1)%Num
    出队:Q.front=(Q.front+1)%Num
  6. 实际存放元素
    当Q.front 实际元素=Q.rear-Q.front
    当Q.front>Q.rear
    实际元素=(Q.rear+Num-Q.front)%Num.

你可能感兴趣的:(Unity学习笔记,数据结构,unity,unity3d,c#)