设计一个队形(通常指队列)可以通过多种编程语言和结构来实现。以下是一个使用C++实现的基本队列的示例,包括顺序队列和循环队列的实现思路。
顺序队列的实现
顺序队列通常使用数组来实现,需要两个指针:一个指向队头,另一个指向队尾。
```cpp
include include // 定义顺序队列结构 typedef struct { int *data; int front; int rear; int capacity; } SeqQueue; // 初始化队列 void initQueue(SeqQueue *q, int capacity) { q->data = (int *)malloc(capacity * sizeof(int)); if (!q->data) { std::cerr << "Memory allocation failed!" << std::endl; exit(1); } q->front = q->rear = 0; q->capacity = capacity; } // 入队 bool enqueue(SeqQueue *q, int value) { if ((q->rear + 1) % q->capacity == q->front) { return false; // 队列已满 } q->data[q->rear] = value; q->rear = (q->rear + 1) % q->capacity; return true; } // 出队 bool dequeue(SeqQueue *q) { if (q->front == q->rear) { return false; // 队列为空 } q->front = (q->front + 1) % q->capacity; return true; } // 获取队头元素 int front(SeqQueue *q) { if (q->front == q->rear) { return -1; // 队列为空 } return q->data[q->front]; } // 获取队尾元素 int rear(SeqQueue *q) { if (q->front == q->rear) { return -1; // 队列为空 } return q->data[(q->rear - 1 + q->capacity) % q->capacity]; } // 检查队列是否为空 bool isEmpty(SeqQueue *q) { return q->front == q->rear; } // 检查队列是否已满 bool isFull(SeqQueue *q) { return (q->rear + 1) % q->capacity == q->front; } // 释放队列内存 void freeQueue(SeqQueue *q) { free(q->data); q->data = nullptr; q->front = q->rear = 0; q->capacity = 0; } int main() { SeqQueue q; initQueue(&q, 5); enqueue(&q, 1); enqueue(&q, 2); enqueue(&q, 3); std::cout << "Front: " << front(&q) << std::endl; std::cout << "Rear: " << rear(&q) << std::endl; dequeue(&q); std::cout << "Front after dequeue: " << front(&q) << std::endl; std::cout << "Rear after dequeue: " << rear(&q) << std::endl; freeQueue(&q); return 0; } ``` 循环队列的实现 循环队列使用数组实现,但需要处理队头和队尾的循环逻辑。