顺序队列的操作
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--;
}
}
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--;
}
}