对于两种操作受限的线性结构,栈(Array, LIFO)和队列(Queue,FIFO)两种结构可应用于出栈顺序的计算。其基本结构为:
Que out ← Stack st ← Que in
其中,核心操作为:
def fun(){
if(isEmpty Stack) Push(stack,e);
else if(isFull Stack) while(!isEmpty Stack) Pop(Stack);
else{ //复制已有的结构和结果i
//先弹栈的情况(需要递归)
//先压栈的情况(需要递归)
}}
王老师的解法:
//其实不太懂回溯这里……但是看到cnt感觉很高级,整个函数很完善
#include <stdio.h>
#include <stdlib.h>
typedef struct {int* arr; int size; int maxSize;} Stack;
Stack* createStack(int maxSize) {
Stack* stack = (Stack*)malloc(sizeof(Stack));
stack->arr = (int*)malloc(sizeof(int) * maxSize);
stack->size = 0;
stack->maxSize = maxSize;
return stack;
}
void freeStack(Stack* stack) {free(stack->arr); free(stack);}
Stack* pushToStac