当前位置:K88软件开发文章中心编程语言.NET.NET01 → 文章内容

使用C#实现顺序队列

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2018-12-31 11:48:30

:2013-05-24 06:26:12

队列(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

        }

        Console.WriteLine("***************************");

        while(!q.IsEmpty())

        {

            Console.WriteLine("{0}出队,队列元素个数:{1}",q.Out(),q.GetQueueLength());

        }      

    }

}

 

运行结果如下:

本文为自己原创,请勿转载。如需转载请注明出处:翔宇亭IT乐园

上一页  [1] [2] 


使用C#实现顺序队列