首页 > 其他分享 >两个栈模拟一个队列(Stacks Imitate Queue)

两个栈模拟一个队列(Stacks Imitate Queue)

时间:2024-04-26 20:11:06浏览次数:20  
标签:return temp Imitate s2 s1 元素 Queue 出栈 Stacks

image

/***************************************************************************
  * @file name:		:StacksSimulateQueue
  * @brief  		:两个栈实现队列的功能
  * @author 		:[email protected]
  * @date 			:2024/04/26
  * @version 1.0 	:V1.0
  * @property 		:None
  * @note   		:None
  * CopyRight (c)  2023-2024   [email protected]   All Right Reseverd
*****************************************************************************/



//利用栈s1和s2实现队列,栈的思想是“后进先出”,队列的思想是“先进先出”,可以选择把栈s1作为入队缓存,把栈s2作为出队缓存

//入队
bool enQueue(s1,s2,int x)
{
	int temp; //用于存储出栈的元素的值

	//1.判断栈s1是否已满,此时分为两种情况(满了 or 未满)
	if (s1->top + 1 >= maxSize)
	{
		//说明栈s1已满,此时分为两种情况(栈s2空 or 栈s2不空)
		if ( isEmpty(s2) )
		{
			//此时栈s2为空,所以需要把栈s1的元素依次出栈到s2中
			while( ! isEmpty(s1) )
			{
				pop(s1,&temp); //把出栈元素暂时存储在temp中
				push(s2,temp); //把变量temp中的元素入栈到s2
			}

			push(s1,x); //此时栈s1为空,所以可以把元素x入栈到s1
			return true;
		}
		else
		{
			//此时栈s2不空,所以无法入队
			return false;
		}
	}
	else
	{
		//此时栈s1未满,所以可以把元素x入栈到s1中
		push(s1,x); 
	}

	return true;
}

//判断队列为空
int isQueueEmpty(s1,s2)
{
	if (isEmpty(s1) && isEmpty(s2))
	{
		return 1;
	}
	else
		return 0;
}


//出队

bool enQueue(s1,s2,&x)
{
	int temp; //为了存储出栈的元素

	//1.判断队列是否为空,此时分为两种情况(空 or 不空)
	if (isQueueEmpty(s1,s2))
	{
		return false;
	}
	else
	{
		//说明队列不空,此时又分为两种情况(栈s2空 or 栈s2不空)
		if ( !isEmpty(s2) )
		{
			//说明栈s2不空,则直接把元素出栈
			pop(s2,&x);
		}
		else
		{
			//说明栈s2为空,此时需要把栈s1的元素依次出栈到s2中
			while( ! isEmpty(s1) )
			{
				pop(s1,&temp); //把出栈元素暂时存储在temp中
				push(s2,temp); //把变量temp中的元素入栈到s2
			}

			pop(s2,&x);
		}
	}

	return true;
}

标签:return,temp,Imitate,s2,s1,元素,Queue,出栈,Stacks
From: https://www.cnblogs.com/hhail08/p/18160788

相关文章

  • Java ---- 阻塞队列 Blocking Queue
    阻塞队列(BlockingQueue)是一种特殊类型的队列,用于多线程环境中,实现进程通信;常见的Java阻塞队列包括:(1)ArrayBlockingQueue(有界队列)内部是采用数组存储元素的,初始化需要指定容器大小,ArrayBlockingQueue可以用于实现数据缓存、限流、生产者-消费者模式等各种应用。在队列的......
  • 【专题STM32F03】FreeRTOS 队列queue传递结构体,野火例程代码简单修改。
    /************************************************************************@filemain.c*@authorfire*@versionV1.0*@date2018-xx-xx*@briefFreeRTOSV9.0.0+STM32消息队列******************************************************......
  • Queue Sort
    原题链接题解1.最小数在操作之前是第一位,操作之后也必然是第一位,这就导致了如果原数组最小数后的数遍历不到,如果非有序就真的没法有序了,否则每个数都刚好大于前面一个数一定有序code#include<bits/stdc++.h>usingnamespacestd;inta[200005]={0};intmins=2e9,index;int......
  • C++ 标准库类型priority_queue
    C/C++总述:StudyC/C++-CSDN博客 堆(数据结构):堆-CSDN博客priority_queue(优先队列)在优先队列中,元素被赋予优先级(按约定的函数来赋予优先级,底层通过堆来实现)。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出(firstin,largestout)的行为特征。定义......
  • # C++之STL整理(7)之queue用法(创建、赋值、增删查改)详解
    C++之STL整理(7)之queue用法(创建、赋值、增删查改)详解注:整理一些突然学到的C++知识,随时mark一下例如:忘记的关键字用法,新关键字,新数据结构C++的queue用法整理C++之STL整理(7)之queue用法(创建、赋值、增删查改)详解queue1.queue构造函数2.queue存取、插入和删除操作3.......
  • LeetCode 1944. Number of Visible People in a Queue
    原题链接在这里:https://leetcode.com/problems/number-of-visible-people-in-a-queue/description/题目:Thereare n peoplestandinginaqueue,andtheynumberedfrom 0 to n-1 in lefttoright order.Youaregivenanarray heights of distinct integers......
  • C++ 遍历queue
    在C++中,std::queue是一个遵循先进先出(FIFO)原则的容器。由于std::queue不提供直接访问容器内部元素的方法,因此不能直接遍历。但是,您可以使用一个临时队列来遍历。以下是如何做到这一点的示例代码: #include<iostream>#include<queue>intmain(){std::queue<i......
  • 使用POOL+Queue的多进程爬虫
    前面说的multiprocessing里面的Process动态生成多个进程,如果限制数量过大就繁琐了,现在就可以使用Pool进程的功效。在使用Pool前,我们先了解一下阻塞和非阻塞两个概念。阻塞和非阻塞关注的是程序在等待调用结果时的状态。阻塞要等到回调结果出来,在有结果之前,当前进程会被挂起。......
  • AbstractQueuedSynchronizer源码分析
    在分析Java并发包java.util.concurrent源码的时候,少不了需要了解AbstractQueuedSynchronizer(以下简写AQS)这个抽象类,因为它是Java并发包的基础工具类,是实现ReentrantLock、CountDownLatch、Semaphore、FutureTask等类的基础。在分析Java并发包java.util.concurren......
  • Queue 容器
    queue容器1.1queue基本概念概念:Queue是一种先进先出(FirstInFirstOut,FIFO)的数据结构,它有两个出口队列容器允许从一端新增元素,从另一端移除元素队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据称为---入队push队列中出数据称为---......