C++中的队列

时间:2020-02-23 14:30:02  来源:igfitidea点击:

介绍

今天,在本教程中,我们将讨论另一种数据结构,C++中的Queue。

什么是队列?

基本上,队列也是线性数据结构,在插入或者删除数据时遵循先进先出(FIFO)模式。
就模式而言,首先删除插入的第一个元素,最后删除进入队列的最后一个元素。

与堆栈不同,队列操作在两侧进行。
但是,请注意,一个操作应在一端执行,另一端应在另一端执行。
因此,插入和删除操作不会在同一侧进行。

C++中的队列工作

队列类似于现实世界中的队列。
它以先到先得的原则工作。
因此,如前所述,首先删除进入队列的第一个元素,并在所有先前成员都已被删除之后,删除最后一个输入的元素。
现在让我们看一下可以在队列上执行的基本操作,

  • 入队
  • 出队
  • 节目

在下一节中,我们将详细介绍上述技术。

1.队列中的enqueue()

enqueue()将元素插入队列。
只需在队列末尾添加元素即可完成。
因此,我们可以推断,此操作将在最后执行。

排队算法如下:

Procedure ENQUEUE(VALUE)
  If REAR==Size_of_Stack
      Write OVERFLOW
  else
      REAR=REAR+1
      QUEUE[REAR]=VALUE
  END IF
END of Procedure

2.队列中的dequeue()

另一方面,dequeue()删除并访问队列中存在的第一个元素。
请注意,此元素是在所有其他元素之前插入的元素,因此是第一个要出队的元素。
此出队操作发生在当前队列的前面。
因此,与执行入队的一侧相反。

出队算法如下:

Procedure DEQUEUE()
  If FRONT==-1 OR FRONT>REAR  //If the queue is empty
      Write UNDERFLOW
  else
      FRONT=FRONT+1
      RETURN QUEUE[FRONT-1]
  END IF
END of Procedure

3.显示

表演基本上是一种操作,其中将队列的相应元素显示给用户或者换句话说,进行打印。
这使用户可以在任何时间点检查队列的当前状态。

展示算法如下:

Procedure DEQUEUE()
  If FRONT==-1 OR FRONT>REAR  //If the queue is empty
      Write UNDERFLOW
  else
      Repeat While FRONT<=REAR
          PRINT QUEUE[FRONT]
          FRONT=FRONT+1
  END IF
END of Procedure

C++中队列的实现

现在让我们在C++中实现Queue的整个概念,这将使我们对它的工作有一个清晰的了解。

#include<iostream>
using namespace std;
#define max 10                

int queue[max],front=-1,rear=-1;           //queue declaration

void enqueue(int num) //enqueue() inserts an element into the Queue
{
	if(rear==max)  //check if Queue is full
	{
		cout<<"OVERFLOW!";
	}
	else if(front==-1 && rear==-1) //For 1st insertion in Queue
	{
		front++;
		rear++;
		queue[rear]=num;
	}
	else 
	{
		rear++;
		queue[rear]=num;
	}
} 
int dequeue() //dequeue() deletes out the 1st element from the Queue
{
	if(front==-1 || front>rear)  //check if Queue is empty
	{
		cout<<"UNDERFLOW!";
		return -1;
	}
	else
	{
		cout<<"The deleted data is : "<<queue[front++];   //printing the deleted element
		return queue[front-1];
	}
}

void show()
{
	int i=front;
	if(front==-1 || front>rear)    //if Queue is empty
	{
		cout<<"UNDERFLOW!";
	}
	else
	{
		while(i<=rear) //printing the current Queue elements
		{
			cout<<"\t"<<queue[i];
			i++;
		}
		cout<<endl;
	}
}
int main() 
{ 
  int ch,val;
  cout<<"   :::MENU:::";   //Menu for Queue operations
  cout<<"\n1.enqueue\n2.dequeue\n3.Show\n4.Exit";
  while(1)    
  {
      printf("\nEnter the choice:");
      scanf("%d",&ch);
       
      switch(ch)
      {
          case 1: cout<<"Enter the value to be pushed: ";
          		cin>>val;
          		enqueue(val);
                  break;
          case 2: dequeue();
                  break;
          case 3: cout<<"Stack : ";
					show();
                  break;
          case 4: exit(0);
           
          default: printf("\nError! Invalid choice!...");
      }
  }
  return 0;
}

输出:

在C++输出中排队

了解代码,

  • 首先,首先声明了两个变量front = -1和Rear = -1,以表示队列为空。
    队列的大小存储在常量" max"中
  • enqueue()–顾名思义,我们使用此函数执行入队操作。
    它将传递的值添加到后面位置的队列中
  • dequeue()–类似地用于从队列中删除或者访问前端元素。
    此函数返回从队列中删除的第一个值
  • show()–此函数打印整个队列及其所有元素。
    从前到后。

正如我们在堆栈教程中所看到的,重复检查顶部对于避免错误很重要。
同样在队列的情况下,我们需要检查给定队列是否已满或者为空,并分别打印OVERFLOW和UNDERFLOW错误。