用两个栈来实现一个队列

本文介绍了如何利用两个栈来模拟队列的Push和Pop操作。在算法设计阶段,首先初始化两个栈S1和S2,然后将输入的数字依次压入S1,再通过将S1中的元素转移至S2完成队列化。最后,可以从S2顶部弹出数字,实现队列的出队操作。
摘要由CSDN通过智能技术生成

用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。

算法设计

  • 初始化两个栈S1,S2
    *将用户输入的一串数字依次压入S1中,不断弹出S1中的数字并压入S2中
  • 从S2中弹出一个数字

具体实现

#include <stdio.h> 
#include <stdlib.h>
#define MAXSIZE 100
typedef struct
{
	int *base;
	int *top;
	int stacksize;
}Stack;

//栈操作 
bool InitStack(Stack &S);
bool IsEmpty(Stack S);
bool Push(Stack &S, int e);
bool Pop(Stack &S, int &e);

int main()
{
	int num[64]={0};
	int length=0;
	int t=0;
	Stack S1;
	Stack S2;
	InitStack(S1);
	InitStack(S2);
	
	printf("请输入数字(输入'-1'结束输入):");
	for(int i=0;num[i-1]!=-1;i++)
	{
		scanf("%d", &num[i]);
		++length;
	}
	length--;
	for(int i=0;i<length;i++) 
		Push(S1, num[i]);
	while(!IsEmpty(S1)) 
	{
		Pop(S1, t);
		Push(S2, t);
	}
	while(!IsEmpty(S2)) 
	{
		Pop(S2, t);
		printf("%d ",t);
	}
}

bool InitStack(Stack &S)
{
	S.base = (int*)malloc(MAXSIZE*sizeof(int));
	if(!S.base) return 0;
	S.top = S.base;
	S.stacksize = MAXSIZE;
	return 1;
}
bool IsEmpty(Stack S)
{
	if(S.top == S.base) return 1;
	return 0;
}
bool Push(Stack &S, int e)
{
	if(S.top-S.base == S.stacksize) return 0;
	*S.top = e;
	S.top++;
	return 1;
} 
bool Pop(Stack &S, int &e)
{
	if(S.top == S.base) return 0;
	S.top--;
	e = *S.top;
	return 1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值