将队列的前半部分与后半部分交错
给定一个偶数长度的整数队列,通过将队列的前半部分与队列的后半部分交错来重新排列元素。我们只能使用队列数据结构。
例子:
Input : 1 2 3 4
Output : 1 3 2 4
Input : 11 12 13 14 15 16 17 18 19 20
Output : 11 16 12 17 13 18 14 19 15 20
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。
创建两个辅助队列 q1 和 q2。将前半部分插入一个队列 q1,另一半插入另一个队列 q2。现在通过交替从 q1 和 q2 中选取元素将元素插入给定队列。
CPP
// CPP program to interleave queue elements
// using only queue data structure.
#include
using namespace std;
void interleave(queue &q)
{
queue q1, q2;
int n = q.size();
// Insert first half in q1
for (int i = 0; i < n / 2; i++) {
q1.push(q.front());
q.pop();
}
// insert second half in q2
for (int i = 0; i < n / 2; i++) {
q2.push(q.front());
q.pop();
}
// Insert elements of q1 and q2 back
// to q in alternate order.
for (int i = 0; i < n/2; i++) {
q.push(q1.front());
q1.pop();
q.push(q2.front());
q2.pop();
}
}
// Driver code
int main()
{
// Creating an example queue with 10
// elements.
queue q;
for (int i = 1; i <= 10; i++)
q.push(i);
interleave(q);
// Printing queue elements
int n = q.size();
for (int i = 0; i < n; i++) {
cout << q.front() << " ";
q.pop();
}
}
Java
// Java program to interleave queue elements
// using only queue data structure.
import java.util.LinkedList;
import java.util.Queue;
public class GFG {
static void interleave(Queue q)
{
Queue q1, q2;
q1 = new LinkedList();
q2 = new LinkedList();
int n = q.size();
// Insert first half in q1
for (int i = 0; i < n / 2; i++) {
q1.add(q.peek());
q.poll();
}
// insert second half in q2
for (int i = 0; i < n / 2; i++) {
q2.add(q.peek());
q.poll();
}
// Insert elements of q1 and q2 back
// to q in alternate order.
for (int i = 0; i < n / 2; i++) {
q.add(q1.peek());
q1.poll();
q.add(q2.peek());
q2.poll();
}
}
// Driver code
public static void main(String[] args)
{
// Creating an example queue with 10
// elements.
Queue q = new LinkedList();
for (int i = 1; i <= 10; i++)
q.add(i);
interleave(q);
// Printing queue elements
int n = q.size();
for (int i = 0; i < n; i++) {
System.out.print(q.peek() + " ");
q.poll();
}
}
}
// This code is contributed by jainlovely450
Python3
# Python3 program to interleave the first
# half of the queue with the second half
from queue import Queue
# Function to interleave the queue
def interLeaveQueue(q):
# Initialize an empty stack of int type
q1 = Queue()
q2 = Queue()
halfSize = int(q.qsize() / 2)
# Insert first half in q1
for i in range(halfSize):
q1.put(q.queue[0])
q.get()
# Insert second half in q2
for i in range(halfSize):
q2.put(q.queue[0])
q.get()
# Insert elements of q1 and q2 back
# to q in alternate order
for i in range(halfSize):
q.put(q1.queue[0])
q1.get()
q.put(q2.queue[0])
q2.get()
# Driver Code
if __name__ == '__main__':
q = Queue()
q.put(1)
q.put(2)
q.put(3)
q.put(4)
q.put(5)
q.put(6)
q.put(7)
q.put(8)
q.put(9)
q.put(10)
interLeaveQueue(q)
length = q.qsize()
for i in range(length):
print(q.queue[0], end=" ")
q.get()
# This code is contributed by jainlovely450
输出:
1 6 2 7 3 8 4 9 5 10
Parul Shandilya 提供的视频