队列操作的时间和空间复杂度分析


介绍

队列是一种线性数据结构,它使用FIFO(先进先出)方法插入和删除元素。它可以使用数组和链表来实现。在本教程中,我们将分析基于数组的队列的不同操作的时间和空间复杂度。

使用数组实现队列

队列的原理是其FIFO方法,它规定先进入队列的元素将首先被移除。元素从队尾插入,从队首移除。队列在现实生活中的例子是售票窗口前的队伍。

我们可以使用数组和链表来实现队列。在基于数组的队列中,队列的大小最初是定义好的。

队列的重要函数是:

  • enQueue() − 用于向队列中插入数据。

  • deQueue() − 用于从队列中移除数据。

  • isEmpty() − 检查队列是否为空。返回布尔值。

  • peek() − 返回队列的顶部值。

时间复杂度 − 执行所用的时间量。

空间复杂度 − 内存利用率。

示例1

分析C/C++中不同队列操作的时间和空间复杂度

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

class Queue  {
public:
   int queue[capacity];
   int front;
   int rear;
 
   Queue() {
      front = -1;
      rear = -1;
   }
   	
   void enqueue(int val1) {
      if (front == -1) {
         front++;
      }
 
      if (rear == capacity - 1) {
         cout << "Queue is overflow!!!
"; return; } queue[++rear] = val1; cout << " Successful insertion of " << val1 <<"
"; } }; int main() { Queue aq; //using enQueue() to insert 5 and 7 in the queue aq.enqueue(5); aq.enqueue(7); return 0; }

输出

Successful insertion of 5
Successful insertion of 7

复杂度分析

时间复杂度:使用数组的enQueue()操作的时间复杂度为O(1)。

空间复杂度:它是常数,不使用额外的空间。它是O(1)

示例2

使用C/C++中的deQueue()操作查找队列操作的时间和空间复杂度分析

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

class Queue {
public:
   int queue[capacity];
   int last;
   int first;
    
   Queue() {
      last = -1;
      first = -1;
   }
    
   void enqueue(int val1) {
      if (last == -1) {
         last++;
      }
    
      if (first == capacity - 1) {
         cout << "Queue overflow!!!
"; return; } queue[++first] = val1; } void dequeue() { if (last == -1 || last > first) { cout << "Queue is empty!!!
"; return; } cout << "Element deleted from queue is : " << queue[last++] << "
"; } }; int main() { Queue aq; //Inserting Queue elements aq.enqueue(7); aq.enqueue(2); //removing Queue element aq.dequeue(); return 0; }

输出

Element deleted from Queue is 7

复杂度分析

时间复杂度:O(1):这是因为使用了单个算术运算符。

空间复杂度:O(1)

示例3

使用C/C++中队列的peek()操作查找时间和空间复杂度分析

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

class Queue  {
public:
   int queue[capacity];
   int last;
   int first;
   
   Queue() {
      last = -1;
      first = -1;
   }
   
   void enqueue(int v) {
      if (last == -1) {
         last++;
      }
   
      if (first == capacity - 1) {
         cout << "Queue is overflowed!!!
"; return; } queue[++first] = v; } void peek() { if (last == -1 || last > first) { cout << "Queue is empty !
"; return; } cout << "Front Element of the Queue is : " << queue[last] << "
"; } }; int main(){ Queue aq; aq.enqueue(16); aq.enqueue(20); //it will give the first element of the Queue aq.peek(); return 0; }

输出

Front Element of the Queue is : 16

复杂度分析

时间复杂度 = O(1)

空间复杂度 = O(1)

示例4

使用C/C++中的isempty()操作查找队列操作的时间和空间复杂度分析

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

class Queue  {
public:
   int queue[capacity];
   int head;
   int tail;
    
   Queue() {
      head = -1;
      tail = -1;
   }
    
   bool isempty() {
          
      if (head == -1 || head > tail)  {
         return 1;
      }
    
      return 0;
   }
};

int main() {
   Queue aq;
    
   if (aq.isempty())  {
      cout << "It is empty queue
"; } else cout << "Queue has space
"; return 0; }

输出

It is empty Queue

复杂度分析

时间复杂度 = O(1)。它检查队列的元素,这是常数。

空间复杂度 = O(1)

结论

在本教程中,我们分析了基于数组的队列对于enQueue()、deQueue()、peek()和isEmpty()操作的时间和空间复杂度。我们发现它们都具有相同的时间复杂度O(1),因为它们只使用一个操作来执行这些方法。

所有操作的空间复杂度也相同。这是因为它们使用固定内存,并且不使用超出该内存的内存。

更新于:2023年2月22日

2K+ 浏览量

开启你的职业生涯

完成课程获得认证

开始学习
广告