您的位置:首页 > 其它

顺序队列的操作

2017-12-05 16:29 330 查看
例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--;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: