关于判断栈输出序列合理性的代码填空

求大佬们帮忙填一下这几个空吧,感谢!

img

2.下面算法的功能:设一个栈的输入序列为1.2.....n,下面所给出的算法,是判断一个
序列pP.,是否是一个合理的栈输出序列。请在空白处填入正确的语句。
void Decision_Stack(int p[ ], int n) {
SqStack S;
InitStack (S);
int i = 0, k = 0, j, _______􏲹________; do {
if (StackEmpty(S) || _______􏲺_________) ​Push (S, ++i);
else
if (!StackEmpty(S) && ______􏲻________) {
j = Pop(S);
k++; }
else
if (GetTop(S)) > p[k]) {
tag = 0;
break; }
} while (_______􏲼________);
   if(tag)printf(”是合理的出栈序列!n”);
   elseprintf(“是不合理的出序列!n”);

这个题的逻辑是真别扭,tag=0的那个if完全没必要。
填空如下:
(1) tag =1
(2) i<n
(3) GetTop(S) == p[n-1-k]
(4) k<n