Рубрики

Сторнирование очереди с использованием другой очереди

Учитывая очередь . Задача состоит в том, чтобы перевернуть очередь, используя другую другую пустую очередь.

Примеры:

Input: queue[] = {1, 2, 3, 4, 5}
Output: 5 4 3 2 1

Input: queue[] = {10, 20, 30, 40}
Output: 40 30 20 10

Подходить:

  • Дана очередь и пустая очередь.
  • Последний элемент очереди должен быть первым элементом новой очереди.
  • Чтобы получить последний элемент, нужно вытолкнуть очередь одну за другой и добавить ее в конец очереди, размер — 1 раз.
  • Поэтому после этого мы получим последний элемент перед очередью. Теперь извлеките этот элемент и добавьте его в новую очередь. Повторите шаги s — 1 раз, где s — исходный размер очереди.

Ниже приведена реализация подхода:

C ++

// C ++ реализация вышеуказанного подхода
#include <bits/stdc++.h>

using namespace std;

  
// Функция для возврата обращенной очереди

queue<int> reverse(queue<int> q)

{

    // размер ууэ

    int s = q.size();

  

    // Вторая очередь

    queue<int> ans;

  

    for (int i = 0; i < s; i++) {

  

        // Получить последний элемент

        // фронт очереди

        for (int j = 0; j < q.size() - 1; j++) {

            int x = q.front();

            q.pop();

            q.push(x);

        }

  

        // Получить последний элемент и

        // добавляем его в новую очередь

        ans.push(q.front());

        q.pop();

    }

    return ans;

}

  
// Код драйвера

int main()

{

    queue<int> q;

  

    // Вставить элементы

    q.push(1);

    q.push(2);

    q.push(3);

    q.push(4);

    q.push(5);

  

    q = reverse(q);

  

    // Распечатать очередь

    while (!q.empty()) {

        cout << q.front() << " ";

        q.pop();

    }

  

    return 0;

}

Джава

// Java реализация вышеуказанного подхода

import java.util.*;

class GFG

{

  
// Функция для возврата обращенной очереди

static Queue<Integer> reverse(Queue<Integer> q)

{

    // размер ууэ

    int s = q.size();

  

    // Вторая очередь

    Queue<Integer> ans = new LinkedList<>();

  

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

    {

  

        // Получить последний элемент

        // фронт очереди

        for (int j = 0; j < q.size() - 1; j++) 

        {

            int x = q.peek();

            q.remove();

            q.add(x);

        }

  

        // Получить последний элемент и

        // добавляем его в новую очередь

        ans.add(q.peek());

        q.remove();

    }

    return ans;

}

  
// Код драйвера

public static void main(String[] args) 

{

    Queue<Integer> q = new LinkedList<>();

  

    // Вставить элементы

    q.add(1);

    q.add(2);

    q.add(3);

    q.add(4);

    q.add(5);

  

    q = reverse(q);

  

    // Распечатать очередь

    while (!q.isEmpty()) 

    {

        System.out.print(q.peek() + " ");

        q.remove();

    }

    }

  
// Этот код предоставлен Принчи Сингхом

python3

# Python3 реализация вышеуказанного подхода

from collections import deque

  
# Функция для возврата обращенной очереди

def reverse(q):

      

    # Размер уэуэ

    s = len(q)

  

    # Вторая очередь

    ans = deque()

  

    for i in range(s):

  

        # Получить последний элемент в

        # начало очереди

        for j in range(s - 1):

            x = q.popleft()

            q.appendleft(x)

  

        # Получить последний элемент и

        # добавить его в новую очередь

        ans.appendleft(q.popleft())

    return ans

  
Код водителя

q = deque()

  
# Вставить элементы

q.append(1)

q.append(2)

q.append(3)

q.append(4)

q.append(5)

  

q = reverse(q)

  
# Распечатать очередь

while (len(q) > 0):

    print(q.popleft(), end = " ")

  
# Этот код предоставлен Мохитом Кумаром

C #

// C # Программа для печати заданного шаблона

using System;

using System.Collections.Generic; 

      

class GFG

{

  
// Функция для возврата обращенной очереди

static Queue<int> reverse(Queue<int> q)

{

    // размер ууэ

    int s = q.Count;

  

    // Вторая очередь

    Queue<int> ans = new Queue<int>();

  

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

    {

  

        // Получить последний элемент

        // фронт очереди

        for (int j = 0; j < q.Count - 1; j++) 

        {

            int x = q.Peek();

            q.Dequeue();

            q.Enqueue(x);

        }

  

        // Получить последний элемент и

        // добавляем его в новую очередь

        ans.Enqueue(q.Peek());

        q.Dequeue();

    }

    return ans;

}

  
// Код драйвера

public static void Main(String[] args) 

{

    Queue<int> q = new Queue<int>();

  

    // Вставить элементы

    q.Enqueue(1);

    q.Enqueue(2);

    q.Enqueue(3);

    q.Enqueue(4);

    q.Enqueue(5);

  

    q = reverse(q);

  

    // Распечатать очередь

    while (q.Count!=0) 

    {

        Console.Write(q.Peek() + " ");

        q.Dequeue();

    }

    }

}

  
// Этот код предоставлен Принчи Сингхом

Выход:

5 4 3 2 1

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

Сторнирование очереди с использованием другой очереди

0.00 (0%) 0 votes