栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

栈与队列的相互实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

栈与队列的相互实现

注:这里用的都是c语言,栈和队列都是我自己写的,想知道可以看我之前写的线性表综合讲述,会c++的可以直接使用库中模板。

目录

一、用两个栈实现队列

二、两个队列实现栈


一、用两个栈实现队列

#pragma once
#include"Stack.h"
typedef int QUD;
typedef struct Queue
{
	S in;
	S out;
}Queue;
void QueueInit(Queue*p)
{
	InitStack(&p->in);
	InitStack(&p->out);
}
void QueuePush(Queue*p, QUD n)
{
	StackPush(&p->in, n);
}
void transfer(Queue*p)//输入栈数据转输出栈
{
	if (StackEmpty(&p->out))
	{
		while (StackSize(&p->in) > 0)
		{
			StackPush(&p->out, StackTop(&p->in));
			StackPop(&p->in);
		}
	}
}
void QueuePop(Queue*p)
{
	transfer(p);
	StackPop(&p->out);
}
QUD QueueFront(Queue*p)
{
	transfer(p);
	return StackTop(&p->out);
}
QUD QueueBack(Queue*p)
{
	if (StackEmpty(&p->in))
		return p->out.base[0];
	else
		return StackTop(&p->in);
}
bool QueueEmpty(Queue*p)
{
	return StackEmpty(&p->in) && StackEmpty(&p->out);
}
QUD QueueSize(Queue*p)
{
	if (StackEmpty(&p->in))
		return StackSize(&p->out);
	else
		return StackSize(&p->in);
}
void QueueDestory(Queue*p)
{
	StackDestory(&p->in);
	StackDestory(&p->out);
}

二、两个队列实现栈

#pragma once
#include"Queue.h"
typedef int STD;
typedef struct Stack
{
	Queue q1;
	Queue q2;
}Stack;
void InitStack(Stack*p)
{
	QueueInit(&p->q1);
	QueueInit(&p->q2);
}
void StackPush(Stack*p, STD n)
{
	if (QueueEmpty(&p->q1))
		QueuePush(&p->q2, n);
	else
		QueuePush(&p->q1, n);
}
STD StackPop(Stack*p)
{
	Queue*emptyQ = &p->q1;//设置空与非空队列
	Queue*notemptyQ = &p->q2;
	if (!QueueEmpty(&p->q1))
	{
		emptyQ = &p->q2;
		notemptyQ = &p->q1;
	}
	while (QueueSize(notemptyQ)>1)
	{
		QueuePush(emptyQ, QueueFront(notemptyQ));//将队头数据转入另一队列中
		QueuePop(notemptyQ);
	}
	STD top= QueueFront(notemptyQ);
	QueuePop(notemptyQ);
	return top;
}
STD StackTop(Stack*p)
{
	if (QueueEmpty(&p->q1))
		return QueueBack(&p->q2);//队尾即为栈顶
	else
		return QueueBack(&p->q1);
}
bool StackEmpty(Stack*p)
{
	return QueueEmpty(&p->q1) && QueueEmpty(&p->q2);
}
void StackFree(Stack*p)
{
	QueueDestory(&p->q1);
	QueueDestory(&p->q2);
}

这属于数据结构的灵活运用,希望对大家能有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875341.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号