顺序队列的操作

来源:互联网 发布:密度聚类算法处理轨迹 编辑:程序博客网 时间:2024/06/08 20:09

例1:完成Queue CreateQueue(int MaxElements)函数,该函数创建一个基于数组的队列,并返回队列指针,其中MaxElements为预分配的数组单元数。

Queue CreateQueue(int MaxElements) //1,2,3步骤类似于数组栈的创建。
{
Queue Q=(Queue)malloc(sizeof(QueueRecord)); 1
Q->Front=0;
Q->Rear=-1;
Q->Capacity=MaxElements; 2
Q->Array=(ElemType*)malloc(sizeof(ElemType)*MaxElements); 3
Q->Size=0;
return Q;
}

例2:顺序队列的判满即队尾指针Q->rear==Q->capacity-1;

例3:完成Queue DisposeQueue(Queue Q)函数,该函数销毁队列Q(释放所有空间)并返回NULL指针,其中Q是基于数组的非循环队列。

Queue DisposeQueue(Queue Q)
{
free(Q->Array);
return NULL;
}

例4:将顺序队列置空。按照题意

void MakeEmpty(Queue Q)
{
Q->Front=0;
Q->Rear=-1;
Q->Size=0;
}

例5:完成ElemType FrontAndDequeue(Queue Q)函数,该函数返回非空队列Q的队首数据并将队首数据出队,其中Q是基于数组的非循环队列。

ElemType FrontAndDequeue(Queue Q)
{
ElemType x;
x=Q->Array[Q->Front];
  Q->Front++;  //
队首指针后移,或者表达为Q->front=(Q->front+1)%Maxsize;
Q->Size--;
return x;
}


例6:完成void Enqueue(Queue Q,ElemType X)函数,该函数把数据X进入队列,如果队列已满,则什么都不做,其中Q是基于数组的非循环队列。

void Enqueue(Queue Q,ElemType X)
{
if(Q->Size!=Q->Capacity) //如果队列未满
{
  Q->Size++;
Q->Rear++; //从队尾入队,队尾指针后移。
Q->Array[Q->Rear]=X;
}

例7:完成void Dequeue(Queue Q);函数,该函数将队列Q的队首数据出队,如果队列为空,则什么都不做。其中Q是基于数组的非循环队列。

void Dequeue(Queue Q)
{
if(Q->Size!=0)
{
Q->Front++;
Q->Size--;
}

}

原创粉丝点击