ZOJ 3210 A Stack or A Queue?

/*

给两行,每行n个数据,判断使用栈(先进后出FILO)还是队列(先进先出FIFO)可以使第一行数据转化为第二行

如果为队列:则两行数据相同

如果为栈:则两行数据呈镜像

*/

#include <stdio.h>
#include <string.h>
int main()
{
	int t,n,m;
	scanf("%d",&t);
	while(t--)
	{
		int num[128]={0},left[128]={0},right[128]={0};/*由于下面用到memcmp,
												(比较内存,如果上个案例的数据长度比这一次大,
												则会有后半部分数据遗留)所以要每次都初始化*/
		scanf("%d",&n);
		for(int i=0;i<n;i++)
			scanf("%d",&num[i]);
		for(int i=0;i<n;i++)
		{
			scanf("%d",&m);
			left[i]=right[n-i-1]=m;//left与right为相反字符串
		}
		int queue=!memcmp(num,left,sizeof(left));/*由于memcmp返回值为int型,所以不能使用bool;
									当两者相等时,返回值为零,取反后赋给queue,则queue为真*/
		int stack=!memcmp(num,right,sizeof(right));//同上
		if(queue&&stack)
			printf("both\n");
		else if(queue)
			printf("queue\n");
		else if(stack)
			printf("stack\n");
		else
			printf("neither\n");
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值