C语言牛刀小试20241014:判断出栈顺序合法性

#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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值