#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define Max_Size 1000
typedef struct {
int* data;
int front;
int rear;
int maxSize;
} SeqQueue;
SeqQueue* initQueue(int maxSize) {
SeqQueue* Q = (SeqQueue*)malloc(sizeof(SeqQueue));
Q->data = (int*)malloc(maxSize * sizeof(int));
Q->front = Q->rear = 0;
Q->maxSize = maxSize;
return Q;
}
bool queueEmpty(SeqQueue* Q) {
return Q->front == Q->rear;
}
bool queueFull(SeqQueue* Q) {
return (Q->rear + 1) % Q->maxSize == Q->front;
}
bool enqueue(SeqQueue* Q, int e) {
if (queueFull(Q)) {
// 队列已满,申请新空间,并将原有数据搬移到新空间中
int newMaxSize = Q->maxSize * 2;
int* newData = (int*)malloc(newMaxSize * sizeof(int));
int i = 0;
int j = Q->front;
while (j != Q->rear) {
newData[i] = Q->data[j];
j = (j + 1) % Q->maxSize;
i++;
}
free(Q->data);
Q->data = newData;
Q->front = 0;
Q->rear = i;
Q->maxSize = newMaxSize;
}
Q->data[Q->rear] = e;
Q->rear = (Q->rear + 1) % Q->maxSize;
return true;
}
int dequeue(SeqQueue* Q) {
if (queueEmpty(Q)) {
return -1; // 表示队列为空
}
int e = Q->data[Q->front];
Q->front = (Q->front + 1) % Q->maxSize;
return e;
}
void freeQueue(SeqQueue* Q) {
free(Q->data);
free(Q);
}
int main() {
SeqQueue* queue = initQueue(3);
printf("Enqueuing elements into the queue:\n");
enqueue(queue, 10);
enqueue(queue, 20);
enqueue(queue, 30);
printf("Dequeuing elements from the queue: ");
while (!queueEmpty(queue)) {
int e = dequeue(queue);
printf("%d ", e);
}
printf("\n");
freeQueue(queue);
return 0;
}
顺序队列的基本操作
最新推荐文章于 2024-05-16 08:58:20 发布