给上述c语言代码添加注释
时间: 2023-07-30 22:04:29 浏览: 56
C#注释
好的,以下是已经添加了注释的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 5
typedef struct {
int top; // 栈顶指针
int *data; // 动态分配的数组存储栈中的元素
} Stack;
void init(Stack *stack) {
stack->top = -1; // 初始化栈顶指针为-1,表示栈为空
stack->data = (int *)malloc(STACK_SIZE * sizeof(int)); // 动态分配数组内存
}
void push(Stack *stack, int value) {
stack->data[++stack->top] = value; // 将元素压入栈顶
}
int pop(Stack *stack) {
return stack->data[stack->top--]; // 将栈顶元素弹出
}
int is_empty(Stack *stack) {
return stack->top == -1; // 判断栈是否为空
}
int is_full(Stack *stack) {
return stack->top == STACK_SIZE - 1; // 判断栈是否已满
}
typedef struct {
Stack s1; // 用来存储队列元素的栈s1
Stack s2; // 用来辅助操作的栈s2
} Queue;
void init_queue(Queue *queue) {
init(&queue->s1); // 初始化队列元素栈s1
init(&queue->s2); // 初始化辅助操作栈s2
}
void enqueue(Queue *queue, int value) {
if (is_full(&queue->s1)) { // 如果队列元素栈s1已满,则无法入队
printf("Queue is full\n");
return;
}
while (!is_empty(&queue->s1)) { // 如果队列元素栈s1不为空,则将其元素全部转移到辅助操作栈s2中
push(&queue->s2, pop(&queue->s1));
}
push(&queue->s1, value); // 将新元素压入队列元素栈s1的栈底,即模拟队列的队尾
while (!is_empty(&queue->s2)) { // 将辅助操作栈s2中的所有元素转移到队列元素栈s1中
push(&queue->s1, pop(&queue->s2));
}
}
int dequeue(Queue *queue) {
if (is_empty(&queue->s1)) { // 如果队列元素栈s1为空,则无法出队
printf("Queue is empty\n");
return -1;
}
return pop(&queue->s1); // 将队列元素栈s1的栈顶元素弹出,即模拟队列的队头
}
void print_queue(Queue *queue) {
if (is_empty(&queue->s1)) { // 如果队列元素栈s1为空,则队列中没有元素
printf("Queue is empty\n");
return;
}
printf("Current queue: ");
for (int i = queue->s2.top; i >= 0; i--) { // 输出辅助操作栈s2中的所有元素,即队列元素栈s1中的前面部分
printf("%d ", queue->s2.data[i]);
}
for (int i = 0; i <= queue->s1.top; i++) { // 输出队列元素栈s1中的所有元素,即队列元素栈s1中的后面部分
printf("%d ", queue->s1.data[i]);
}
printf("\n");
}
int main() {
Queue queue;
init_queue(&queue); // 初始化队列
for (int i = 1; i <= 5; i++) { // 入队5个元素
enqueue(&queue, i);
}
for (int i = 6; i <= 10; i++) { // 再入队5个元素
enqueue(&queue, i);
}
print_queue(&queue); // 输出当前队列中的所有元素
dequeue(&queue); // 出队一个元素
print_queue(&queue); // 输出当前队列中的所有元素
enqueue(&queue, 11); // 再入队一个元素
print_queue(&queue); // 输出当前队列中的所有元素
dequeue(&queue); // 出队4个元素
dequeue(&queue);
dequeue(&queue);
dequeue(&queue);
print_queue(&queue); // 输出当前队列中的所有元素
dequeue(&queue); // 出队5个元素
dequeue(&queue);
dequeue(&queue);
dequeue(&queue);
dequeue(&queue);
print_queue(&queue); // 输出当前队列中的所有元素
dequeue(&queue); // 再出队一个元素
print_queue(&queue); // 输出当前队列中的所有元素
return 0;
}
```
阅读全文