Рубрики

Круговая Очередь | Набор 1 (Введение и реализация массива)

Обязательное условиеочереди

Циклическая очередь — это линейная структура данных, в которой операции выполняются на основе принципа FIFO (First In First Out), а последняя позиция соединяется обратно с первой позицией для образования круга. Он также называется кольцевым буфером .

В обычной очереди мы можем вставлять элементы, пока очередь не заполнится. Но как только очередь заполнится, мы не сможем вставить следующий элемент, даже если перед ней есть пробел.

Операции с круговой очередью:

  • Front: получить передний элемент из очереди.
  • Сзади: получить последний элемент из очереди.
  • enQueue (значение) Эта функция используется для вставки элемента в круговую очередь. В круговой очереди новый элемент всегда вставляется в заднем положении.
      шаги:

    1. Проверьте, заполнена ли очередь — проверьте ((сзади == SIZE-1 && front == 0) || (сзади == front-1)).
    2. Если он заполнен, то дисплей Очередь заполнена. Если очередь не заполнена, проверьте, задано ли (Rear == SIZE — 1 && front! = 0) значение true = 0 и вставьте элемент.
  • deQueue () Эта функция используется для удаления элемента из циклической очереди. В круговой очереди элемент всегда удаляется из передней позиции.
      шаги:

    1. Проверить, является ли очередь пустым, означает проверку (front == — 1).
    2. Если он пуст, то дисплей Очередь пуст. Если очередь не пуста, тогда шаг 3
    3. Проверьте, если (передний == задний), если это правда, тогда установите передний = задний = -1, иначе проверьте, если (передний = = размер-1), если это верно, тогда установите передний = 0 и верните элемент.

C ++

// C или C ++ программа для вставки и
// удаление в круговой очереди
#include<bits/stdc++.h>

using namespace std;

  

struct Queue

{

    // Инициализация спереди и сзади

    int rear, front;

  

    // Круговая очередь

    int size;

    int *arr;

  

    Queue(int s)

    {

       front = rear = -1;

       size = s;

       arr = new int[s];

    }

  

    void enQueue(int value);

    int deQueue();

    void displayQueue();

};

  

  
/ * Функция для создания круговой очереди * /

void Queue::enQueue(int value)

{

    if ((front == 0 && rear == size-1) ||

            (rear == (front-1)%(size-1)))

    {

        printf("\nQueue is Full");

        return;

    }

  

    else if (front == -1) / * Вставить первый элемент * /

    {

        front = rear = 0;

        arr[rear] = value;

    }

  

    else if (rear == size-1 && front != 0)

    {

        rear = 0;

        arr[rear] = value;

    }

  

    else

    {

        rear++;

        arr[rear] = value;

    }

}

  
// Функция для удаления элемента из круговой очереди

int Queue::deQueue()

{

    if (front == -1)

    {

        printf("\nQueue is Empty");

        return INT_MIN;

    }

  

    int data = arr[front];

    arr[front] = -1;

    if (front == rear)

    {

        front = -1;

        rear = -1;

    }

    else if (front == size-1)

        front = 0;

    else

        front++;

  

    return data;

}

  
// Функция отображения элементов
// Круговой очереди

void Queue::displayQueue()

{

    if (front == -1)

    {

        printf("\nQueue is Empty");

        return;

    }

    printf("\nElements in Circular Queue are: ");

    if (rear >= front)

    {

        for (int i = front; i <= rear; i++)

            printf("%d ",arr[i]);

    }

    else

    {

        for (int i = front; i < size; i++)

            printf("%d ", arr[i]);

  

        for (int i = 0; i <= rear; i++)

            printf("%d ", arr[i]);

    }

}

  
/ * Драйвер программы * /

int main()

{

    Queue q(5);

  

    // Вставка элементов в круговую очередь

    q.enQueue(14);

    q.enQueue(22);

    q.enQueue(13);

    q.enQueue(-6);

  

    // Показать элементы, присутствующие в круговой очереди

    q.displayQueue();

  

    // Удаление элементов из круговой очереди

    printf("\nDeleted value = %d", q.deQueue());

    printf("\nDeleted value = %d", q.deQueue());

  

    q.displayQueue();

  

    q.enQueue(9);

    q.enQueue(20);

    q.enQueue(5);

  

    q.displayQueue();

  

    q.enQueue(20);

    return 0;

}

Python 3

class CircularQueue():

  

    # конструктор

    def __init__(self, size): # инициализация класса

        self.size = size

          

        # инициализация очереди без

        self.queue = [None for i in range(size)] 

        self.front = self.rear = -1

  

    def enqueue(self, data):

          

        # условие, если очередь заполнена

        if ((self.rear + 1) % self.size == self.front): 

            print(" Queue is Full\n")

              

        # условие для пустой очереди

        elif (self.front == -1): 

            self.front = 0

            self.rear = 0

            self.queue[self.rear] = data

        else:

              

            # следующая позиция сзади

            self.rear = (self.rear + 1) % self.size 

            self.queue[self.rear] = data

              

    def dequeue(self):

        if (self.front == -1): # кодировка для пустой очереди

            print ("Queue is Empty\n")

              

        # условие только для одного элемента

        elif (self.front == self.rear): 

            temp=self.queue[self.front]

            self.front = -1

            self.rear = -1

            return temp

        else:

            temp = self.queue[self.front]

            self.front = (self.front + 1) % self.size

            return temp

  

    def display(self):

      

        # условие для пустой очереди

        if(self.front == -1): 

            print ("Queue is Empty")

  

        elif (self.rear >= self.front):

            print("Elements in the circular queue are:"

                                              end = " ")

            for i in range(self.front, self.rear + 1):

                print(self.queue[i], end = " ")

            print ()

  

        else:

            print ("Elements in Circular Queue are:"

                                           end = " ")

            for i in range(self.front, self.size):

                print(self.queue[i], end = " ")

            for i in range(0, self.rear + 1):

                print(self.queue[i], end = " ")

            print ()

  

        if ((self.rear + 1) % self.size == self.front):

            print("Queue is Full")

  
Код водителя

ob = CircularQueue(5)

ob.enqueue(14)

ob.enqueue(22)

ob.enqueue(13)

ob.enqueue(-6)

ob.display()

print ("Deleted value = ", ob.dequeue())

print ("Deleted value = ", ob.dequeue())

ob.display()

ob.enqueue(9)

ob.enqueue(20)

ob.enqueue(5)

ob.display()

  
# Этот код предоставлен AshwinGoel


Выход:

Elements in Circular Queue are: 14 22 13 -6 
Deleted value = 14
Deleted value = 22
Elements in Circular Queue are: 13 -6 
Elements in Circular Queue are: 13 -6 9 20 5 
Queue is Full

Сложность времени: временная сложность операции enQueue (), deQueue () равна O (1), поскольку в любой из операций нет цикла.

Приложения:

  1. Управление памятью: неиспользуемые области памяти в случае обычных очередей могут использоваться в циклических очередях.
  2. Система дорожного движения: В управляемой компьютером системе дорожного движения круговые очереди используются для многократного включения светофора в соответствии с установленным временем.
  3. Планирование ЦП. Операционные системы часто поддерживают очередь процессов, которые готовы к выполнению или ожидают определенного события.

Эта статья предоставлена Акашем Гуптой . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Круговая Очередь | Набор 1 (Введение и реализация массива)

0.00 (0%) 0 votes