📜  以镜像逆序追加队列元素

📅  最后修改于: 2021-09-08 12:45:52             🧑  作者: Mango

给定一个包含N 个字符串的队列Q ,任务是重构队列使其大小加倍,使得后半部分代表前半部分的镜像。
例子:

处理方法:仔细观察,我们可以说输出队列的后半部分与前半部分相反。那是:

  1. 将队列的大小存储在名为size的变量中。
  2. 将 Queue 元素推入堆栈而不实际丢失元素。这可以通过使用 emplace() 来实现。
  3. 重复这个过程,直到size变为 0。
  4. 将堆栈中的元素推回队列。

下面是上述方法的实现。

C++
// C++ program to arrange the
// elements of the queue
// to the end such that
// the halves are mirror
// order of each other
#include 
using namespace std;
 
// Function to display
// the elements of
// the queue
void showq(queue q)
{
    // Iterating through the queue
    // and printing the elements
    while (!q.empty()) {
        cout << q.front() << " ";
        q.pop();
    }
}
 
// Function to produce mirror elements
void mirrorQueue(queue& q)
{
    int size = q.size();
 
    // Defining a stack
    stack st;
 
    // Pushing the elements
    // of a queue
    // in a stack without
    // losing them
    // from the queue
    while (size--) {
        string x = q.front();
        // Push the element
        // to the end of the
        // queue
        q.emplace(x);
        // Push the element
        // into the stack
        st.push(x);
        // Remove the element
        q.pop();
    }
 
    // Appending the elements
    // from the stack
    // to the queue
    while (!st.empty()) {
        string el = st.top();
        q.push(el);
        st.pop();
    }
}
 
// Driver Code
int main()
{
    queue q;
    q.push("Hello");
    q.push("World");
    mirrorQueue(q);
    showq(q);
    return 0;
}


Java
// Java program to arrange the
// elements of the queue
// to the end such that
// the halves are mirror
// order of each other
import java.util.*;
class GFG{
 
// Function to display
// the elements of
// the queue
static void showq(Queue q)
{
    // Iterating through the queue
    // and printing the elements
    while (!q.isEmpty())
    {
        System.out.print(q.peek() + " ");
        q.remove();
    }
}
 
// Function to produce mirror elements
static void mirrorQueue(Queue q)
{
    int size = q.size();
 
    // Defining a stack
    Stack st = new Stack<>();
 
    // Pushing the elements
    // of a queue
    // in a stack without
    // losing them
    // from the queue
    while (size-->0)
    {
        String x = q.peek();
       
        // Push the element
        // to the end of the
        // queue
        q.add(x);
       
        // Push the element
        // into the stack
        st.add(x);
       
        // Remove the element
        q.remove();
    }
 
    // Appending the elements
    // from the stack
    // to the queue
    while (!st.isEmpty())
    {
        String el = st.peek();
        q.add(el);
        st.pop();
    }
}
 
// Driver Code
public static void main(String[] args)
{
    Queue q =
          new inkedList();
    q.add("Hello");
    q.add("World");
    mirrorQueue(q);
    showq(q);
}
}
 
// This code is contributed by gauravrajput1


Python3
# Python3 program to arrange the
# elements of the queue
# to the end such that
# the halves are mirror
# order of each other
 
# Function to display
# the elements of
# the queue
def showq(q) :
 
    # Iterating through the queue
    # and printing the elements
    while (len(q) != 0) :
     
        print(q[0] , end = " ")
        q.pop(0)
         
# Function to produce mirror elements
def mirrorQueue(q) :
 
    size = len(q)
  
    # Defining a stack
    st = []
  
    # Pushing the elements
    # of a queue
    # in a stack without
    # losing them
    # from the queue
    while (size > 0) :
     
        x = q[0]
        
        # Push the element
        # to the end of the
        # queue
        q.append(x)
        
        # Push the element
        # into the stack
        st.append(x)
        
        # Remove the element
        q.pop(0)
         
        size -= 1
  
    # Appending the elements
    # from the stack
    # to the queue
    while (len(st) != 0) :
     
        el = st[len(st) - 1]
        q.append(el)
        st.pop()
         
q = []
q.append("Hello")
q.append("World")
mirrorQueue(q)
showq(q)
 
# This code is contributed by divyeshrabadiya07


C#
// C# program to arrange the
// elements of the queue
// to the end such that
// the halves are mirror
// order of each other
using System;
using System.Collections.Generic;
class GFG{
 
// Function to display
// the elements of
// the queue
static void showq(Queue q)
{
  // Iterating through the queue
  // and printing the elements
  while (q.Count != 0)
  {
    Console.Write(q.Peek() + " ");
    q.Dequeue();
  }
}
 
// Function to produce mirror elements
static void mirrorQueue(Queue q)
{
  int size = q.Count;
 
  // Defining a stack
  Stack st = new Stack();
 
  // Pushing the elements
  // of a queue
  // in a stack without
  // losing them
  // from the queue
  while (size --> 0)
  {
    String x = q.Peek();
 
    // Push the element
    // to the end of the
    // queue
    q.Enqueue(x);
 
    // Push the element
    // into the stack
    st.Push(x);
 
    // Remove the element
    q.Dequeue();
  }
 
  // Appending the elements
  // from the stack
  // to the queue
  while (st.Count != 0)
  {
    String el = st.Peek();
    q.Enqueue(el);
    st.Pop();
  }
}
 
// Driver Code
public static void Main(String[] args)
{
  Queue q = new Queue();
  q.Enqueue("Hello");
  q.Enqueue("World");
  mirrorQueue(q);
  showq(q);
}
}
 
// This code is contributed by Rajput-Ji


输出:

Hello World World Hello

时间复杂度: O(N) ,其中 N 是队列的大小。

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live