- ·上一篇文章:C#中生成随机不重复数列的算法
- ·下一篇文章:C#删除字符串尾部指定的子字符串
使用C#实现顺序队列
队列(Queue)是插入操作限定在表的尾部而其它操作限定在表的头部进行的线性表。把进行插入操作的表尾称为队尾(Rear),把进行其它操作的头部称为队头(Front)。当对列中没有数据元素时称为空对列(Empty Queue)。
队列通常记为:Q= (a1,a2,…,an),a1为队头元素,an为队尾元素。元素按照a1,a2,…,an的次序依次入队,出队的次序与入队相同,即a1第一个出队,an最后一个出队。所以,对列的操作是按照先进先出(First In First Out)或后进后出( Last In Last Out)的原则进行的,因此,队列又称为FIFO表或LILO表。
队列的常用操作有:
1、构造一个空队列:InitQueue()//在C#中可以使用构造函数来实现
2、清空队列:ClearQueue()
3、判断队列是否为空:IsEmpty()
4、判断队列是否已满:IsFull()
5、求队列长度:QueueLength()
6、入队操作:In()
7、出队操作:Out()
8、得到队头元素:GetHead()
下面给出一个实现顺序栈的源代码:
usingSystem;
classQueue
{
object[] data; //数据元素
intmaxsize; //最大容量
intfront; //指向队头
intrear; //指向队尾
//初始化队列
publicQueue(intsize)
{
this.maxsize=size;
data=newobject[size];
front=rear=-1;
}
//最大容量属性
publicintMaxSize
{
get
{
returnthis.maxsize;
}
set
{
this.maxsize=value;
}
}
//队尾属性
publicintRear
{
get
{
returnthis.rear;
}
}
//队头属性
publicintFront
{
get
{
returnthis.front;
}
}
//数据属性
publicobjectthis[intindex]
{
get
{
returndata[index];
}
}
//获得队列的长度
publicintGetQueueLength()
{
returnrear-front;
}
//判断队列是否满
publicboolIsFull()
{
if(GetQueueLength() ==maxsize)
returntrue;
else
returnfalse;
}
//判断队列是否为空
publicboolIsEmpty()
{
if(rear==front)
returntrue;
else
returnfalse;
}
//清空队列
publicvoidClearQueue()
{
rear=front=-1;
}
//入队
publicvoidIn(objecte)
{
if(IsFull())
{
Console.WriteLine("队列已满!");
return;
}
data[++rear]=e;
}
//出队
publicobjectOut()
{
if(IsEmpty())
{
Console.WriteLine("队列为空!");
returnnull;
}
if(rear-front>0)
{
objecttmp=data[++front];
returntmp;
}
else
{
Console.WriteLine("全出队了!");
ClearQueue();
returnnull;
}
}
//获得队头元素
publicobjectGetHead()
{
if(IsEmpty())
{
Console.WriteLine("队列为空!");
returnnull;
}
returndata[front+1];
}
}
classTest
{
staticvoidMain()
{
Queueq=newQueue(1);
intrdNum;
Randomrd=newRandom();
while(!q.IsFull())
{
rdNum=rd.Next(10,100);
q.In(rdNum);
Console.WriteLine("{0}入队,队列元素个数:{1}",rdNum,q.GetQueueLength());
:2013-05-24 06:26:12
使用C#实现顺序队列