用c语言代码实现并添加注释
时间: 2024-02-20 17:58:17 浏览: 72
好的,以下是用C语言实现基于两个栈实现队列的代码,并添加注释说明:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 10
// 定义栈结构体
typedef struct {
int top; // 栈顶指针
int data[MAX_SIZE]; // 栈内数据
} Stack;
// 初始化栈
void init_stack(Stack *s) {
s->top = -1;
}
// 压栈操作
bool push(Stack *s, int value) {
if (s->top >= MAX_SIZE - 1) {
// 栈已满,压栈失败
return false;
}
s->top++;
s->data[s->top] = value;
return true;
}
// 弹栈操作
int pop(Stack *s) {
if (s->top < 0) {
// 栈为空,弹栈失败
return -1;
}
int value = s->data[s->top];
s->top--;
return value;
}
// 判断栈是否为空
bool is_empty(Stack *s) {
return s->top < 0;
}
// 定义队列结构体
typedef struct {
Stack s1; // 用于入队的栈
Stack s2; // 用于出队的栈
} Queue;
// 初始化队列
void init_queue(Queue *q) {
init_stack(&q->s1);
init_stack(&q->s2);
}
// 入队操作
bool enqueue(Queue *q, int value) {
if (!push(&q->s1, value)) {
// 入队失败,栈已满
return false;
}
return true;
}
// 出队操作
int dequeue(Queue *q) {
int value;
if (!is_empty(&q->s2)) {
// 如果s2不为空,则直接从s2出队
value = pop(&q->s2);
} else {
// 如果s2为空,则将s1中的所有元素弹出并压入s2中,再从s2出队
while (!is_empty(&q->s1)) {
push(&q->s2, pop(&q->s1));
}
value = pop(&q->s2);
}
return value;
}
// 判断队列是否为空
bool is_queue_empty(Queue *q) {
return is_empty(&q->s1) && is_empty(&q->s2);
}
// 测试代码
int main() {
Queue q;
init_queue(&q);
printf("enqueue 1: %d\n", enqueue(&q, 1));
printf("enqueue 2: %d\n", enqueue(&q, 2));
printf("enqueue 3: %d\n", enqueue(&q, 3));
printf("dequeue: %d\n", dequeue(&q));
printf("dequeue: %d\n", dequeue(&q));
printf("enqueue 4: %d\n", enqueue(&q, 4));
printf("enqueue 5: %d\n", enqueue(&q, 5));
printf("dequeue: %d\n", dequeue(&q));
printf("dequeue: %d\n", dequeue(&q));
printf("dequeue: %d\n", dequeue(&q));
printf("dequeue: %d\n", dequeue(&q));
printf("enqueue 6: %d\n", enqueue(&q, 6));
printf("enqueue 7: %d\n", enqueue(&q, 7));
printf("enqueue 8: %d\n", enqueue(&q, 8));
printf("enqueue 9: %d\n", enqueue(&q, 9));
printf("enqueue 10: %d\n", enqueue(&q, 10));
printf("enqueue 11: %d\n", enqueue(&q, 11)); // 队列已满,入队失败
while (!is_queue_empty(&q)) {
printf("dequeue: %d\n", dequeue(&q));
}
return 0;
}
```
注:上述代码中,为了简化,我们假设元素类型为int,队列最大大小为10,当队列满时无法再插入元素。如果需要支持其他类型或者无限制的插入,可以进行相应的修改。
阅读全文