6-7 在一个数组中实现两个堆栈 (20分) PTA

首先,用一个数组实现双链表我也想到了,思路是用两个下标指针分别指向数组的首尾,然后push栈1就让指针1++,push栈2让指针2–,两个指针相碰即满。
想吐槽下,首先我用的两个指针初始化指向的是0和MaxSize-1,然后运行超时,我用例都能过,结果这,挺坑的就是,他们题目没提但是要求的是两个指针下标必须指向栈首元素,如果栈空则应该是-1和MaxSize,这点要注意下其他没了

	Stack CreateStack(int MaxSize)
	{
		Stack stack = (Stack)malloc(sizeof(struct SNode));
		stack->MaxSize = MaxSize;
		stack->Data = (ElementType*)malloc(MaxSize * sizeof(ElementType));
		stack->Top1 = -1;
		stack->Top2 = MaxSize;
		return stack;
	}
	bool Push(Stack S, ElementType X, int Tag)
	{
		if (S->Top1+1 == S->Top2)
		{
			printf("Stack Full\n");
			return 0;
		}
		if (Tag == 1)
		{
			S->Data[++S->Top1] = X;
		}
		else if (Tag == 2)
		{
			S->Data[--S->Top2] = X;
		}
		else return 0;
		return true;
	}
	ElementType Pop(Stack S, int Tag)
	{
		int res = ERROR;
		if ((Tag == 1 && S->Top1 == -1) ||
			(Tag == 2 && S->Top2 == S->MaxSize))
		{
			printf("Stack %d Empty\n",Tag);
			return res;
		}
		if (Tag == 1)
		{
			res = S->Data[S->Top1--];
		}
		else if (Tag == 2)
		{
			res = S->Data[S->Top2++];
		}
		return res;
	}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值