隊(duì)列(Queue)是插入操作限定在表的尾部而其它操作限定在表的頭部進(jìn)行的線(xiàn)性表。把進(jìn)行插入操作的表尾稱(chēng)為隊(duì)尾(Rear),把進(jìn)行其它操作的頭部稱(chēng)為隊(duì)頭(Front)。當(dāng)對(duì)列中沒(méi)有數(shù)據(jù)元素時(shí)稱(chēng)為空對(duì)列(Empty Queue)。
隊(duì)列通常記為:Q= (a1,a2,…,an),a1為隊(duì)頭元素,an為隊(duì)尾元素。元素按照a1,a2,…,an的次序依次入隊(duì),出隊(duì)的次序與入隊(duì)相同,即a1第一個(gè)出隊(duì),an最后一個(gè)出隊(duì)。所以,對(duì)列的操作是按照先進(jìn)先出(First In First Out)或后進(jìn)后出( Last In Last Out)的原則進(jìn)行的,因此,隊(duì)列又稱(chēng)為FIFO表或LILO表。
隊(duì)列的常用操作有:
1、構(gòu)造一個(gè)空隊(duì)列:InitQueue()//在C#中可以使用構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)
2、清空隊(duì)列:ClearQueue()
3、判斷隊(duì)列是否為空:IsEmpty()
4、判斷隊(duì)列是否已滿(mǎn):IsFull()
5、求隊(duì)列長(zhǎng)度:QueueLength()
6、入隊(duì)操作:In()
7、出隊(duì)操作:Out()
8、得到隊(duì)頭元素:GetHead()
下面給出一個(gè)實(shí)現(xiàn)順序棧的源代碼:
using System;
class Queue
{
object[] data; //數(shù)據(jù)元素
int maxsize; //最大容量
int front; //指向隊(duì)頭
int rear; //指向隊(duì)尾
//初始化隊(duì)列
public Queue(int size)
{
this.maxsize = size;
data = new object[size];
front = rear = -1;
}
//最大容量屬性
public int MaxSize
{
get
{
return this.maxsize;
}
set
{
this.maxsize = value;
}
}
//隊(duì)尾屬性
public int Rear
{
get
{
return this.rear;
}
}
//隊(duì)頭屬性
public int Front
{
get
{
return this.front;
}
}
//數(shù)據(jù)屬性
public object this[int index]
{
get
{
return data[index];
}
}
//獲得隊(duì)列的長(zhǎng)度
public int GetQueueLength()
{
return rear-front;
}
//判斷隊(duì)列是否滿(mǎn)
public bool IsFull()
{
if(GetQueueLength() == maxsize)
return true;
else
return false;
}
//判斷隊(duì)列是否為空
public bool IsEmpty()
{
if(rear==front)
return true;
else
return false;
}
//清空隊(duì)列
public void ClearQueue()
{
rear = front = -1;
}
//入隊(duì)
public void In(object e)
{
if(IsFull())
{
Console.WriteLine("隊(duì)列已滿(mǎn)!");
return;
}
data[++rear]=e;
}
//出隊(duì)
public object Out()
{
if(IsEmpty())
{
Console.WriteLine("隊(duì)列為空!");
return null;
}
if(rear-front>0)
{
object tmp = data[++front];
return tmp;
}
else
{
Console.WriteLine("全出隊(duì)了!");
ClearQueue();
return null;
}
}
//獲得隊(duì)頭元素
public object GetHead()
{
if(IsEmpty())
{
Console.WriteLine("隊(duì)列為空!");
return null;
}
return data[front+1];
}
}
class Test
{
static void Main()
{
Queue q = new Queue(1);
int rdNum;
Random rd = new Random();
while(!q.IsFull())
{
rdNum = rd.Next(10,100);
q.In(rdNum);
Console.WriteLine("{0}入隊(duì),隊(duì)列元素個(gè)數(shù):{1}",rdNum,q.GetQueueLength());
新聞熱點(diǎn)
疑難解答