#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef struct { int data[MAXSIZE]; int top; } Stack; void init(Stack *s) { s->top = -1; } int push(Stack *s, int x) { if(s->top == MAXSIZE-1) { return 0; } s->data[++s->top] = x; return 1; } int pop(Stack *s) { if(s->top == -1) { return 0; } s->top--; return 1; } int getTop(Stack *s) { if(s->top == -1) { return 0; } return s->data[s->top]; } void printStack(Stack *s) { int i; for(i=s->top; i>=0; i--) { printf("%d ", s->data[i]); } printf("\n"); } void train(int n, int *a) { int i, j; Stack s; init(&s); j = 0; for(i=1; i<=n; i++) { push(&s, i); while(s.top != -1 && getTop(&s) == a[j]) { pop(&s); j++; } } if(s.top == -1) { printStack(&s); } } int main() { int n, i; scanf("%d", &n); int a[n]; for(i=0; i<n; i++) { scanf("%d", &a[i]); } train(n, a); return 0; }对该代码逐行注释
时间: 2024-01-07 15:04:42 浏览: 88
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义栈的最大大小为100
typedef struct { // 定义栈结构体
int data[MAXSIZE]; // 栈中元素以数组的形式存储
int top; // 栈顶指针
} Stack;
void init(Stack *s) { // 初始化栈
s->top = -1; // 将栈顶指针设为-1,表示栈为空
}
int push(Stack *s, int x) { // 将元素x入栈
if(s->top == MAXSIZE-1) { // 栈已满,无法入栈
return 0;
}
s->data[++s->top] = x; // 栈顶指针加1,将元素x入栈
return 1;
}
int pop(Stack *s) { // 将栈顶元素出栈
if(s->top == -1) { // 栈为空,无法出栈
return 0;
}
s->top--; // 栈顶指针减1,表示栈顶元素已经出栈
return 1;
}
int getTop(Stack *s) { // 获取栈顶元素
if(s->top == -1) { // 栈为空,无法获取栈顶元素
return 0;
}
return s->data[s->top]; // 返回栈顶元素
}
void printStack(Stack *s) { // 打印栈中元素
int i;
for(i=s->top; i>=0; i--) { // 从栈顶开始遍历,打印栈中所有元素
printf("%d ", s->data[i]);
}
printf("\n");
}
void train(int n, int *a) { // 模拟火车调度
int i, j;
Stack s;
init(&s); // 初始化栈
j = 0; // j表示要进站的火车编号
for(i=1; i<=n; i++) { // i表示要出站的火车编号
push(&s, i); // 将火车i进站
while(s.top != -1 && getTop(&s) == a[j]) { // 当栈不为空且栈顶元素等于要出站的火车编号时,将栈顶元素出栈
pop(&s);
j++; // 要出站的火车编号加1
}
}
if(s.top == -1) { // 如果栈为空,表示所有火车都已出站
printStack(&s); // 打印火车出站顺序
}
}
int main() { // 主函数
int n, i;
scanf("%d", &n); // 输入火车数量
int a[n];
for(i=0; i<n; i++) { // 输入每个火车的编号
scanf("%d", &a[i]);
}
train(n, a); // 模拟火车调度
return 0;
}
```
阅读全文