#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
#pragma warning(disable:6031)
#define MaxStackSize 8
/*
算法功能: 将数字 1 - N(暂定为 8) 升序入栈,指定一个出栈顺序, 判断该出栈顺序是否合理.
基本要求: 数组 PopSeq 中, 除最后一个位置为 0, 其余位置上都是 1 - N, 每个数字各出现一次.
判断依据: 对数组中的每个元素 E, 只需看 E 后面值小于 E 的所有元素, 如果这些元素不是严格递减, 则出栈顺序不合法.
*/
void main()
{
//用一个数组记录元素出栈顺序, 最后一个留空.
//在满足基本要求的前提下, 顺序可以随意打乱.
int PopSeq[MaxStackSize + 1] = { 2,4,6,7,8,5,3,1,0 };
int Min = 0;
//展示本次生成的出栈顺序.
printf("本次指定的出栈序列为: [");
for (int i = 0; i < MaxStackSize; i++)
{
printf("%d", PopSeq[i]);
if (i != MaxStackSize - 1) printf(", ");
else printf("],\n该出栈顺序是否合法: ");
};
//执行判断, 并输出结果.
for (int* p1 = PopSeq; p1 <= &PopSeq[MaxStackSize-2]; p1++)
{
Min = *p1;
for (int* p2 = p1 + 1; p2 <= &PopSeq[MaxStackSize]; p2++)
{
if ((*p2 < *p1) && (*p2 > Min))
{
printf("\033[31m否.\033[0m\n");
return;
}
else Min = *p2;
}
if (*p1 == MaxStackSize)break;
}
printf("\033[32m是.\033[0m\n");
return;
}