引言:
队列的实现除了链表外,也可用数组实现。
分析描述:
队列的结构:
typedef int ElementType; typedef struct QueueRecord{ int Capacity; int Front; int Rear; int Size; ElementType *Array; }QueueRecord, *Queue;
创建队列:
void MakeEmpty(Queue Q) { Q->Size = 0; Q->Front = 1; Q->Rear = 0; } Queue CreateQueue(int MaxElements) { Queue QueueHead = (Queue)malloc(sizeof(struct QueueRecord)); if(QueueHead == NULL){ fprintf(stderr, "out of sapce .\n"); exit(0); } QueueHead->Array = (ElementType *)malloc(sizeof(ElementType)*MaxElements); if(QueueHead->Array == NULL){ fprintf(stderr, "Out of sapce .\n"); } QueueHead->Capacity = MaxElements; MakeEmpty(QueueHead); return QueueHead; }
判断队列为空或队列已满:
int IsEmpty(Queue Q) { return Q->Size == 0; } int IsFull(Queue Q) { return Q->Size == Q->Capacity; }
入队列:
static int Succ(int Value, Queue Q) { if(++Value == Q->Capacity) Value = 0; return Value; } void Enqueue(ElementType data, Queue Q) { if(IsFull(Q)) fprintf(stderr, "full queue.\n"); else{ Q->Size++; Q->Rear = Su(Q->Rear, Q); Q->Array[Q->Rear] = X; } }
出队列:
void Dequeue(Queue Q) { if(IsEmpty(Q)) fprintf(stderr, "Empty queue.\n"); else{ Q->Size--; Q->Front = Succ(Q->Front, Q); } }
时间: 2024-12-30 03:51:42