ููŠ ุงู„ู…ู‚ุงู„ ุฏู‡ุŒ ู‡ู†ุชูƒู„ู… ุนู† QueueุŒ ูˆู‡ูˆ ูˆุงุญุฏ ู…ู† ุงู„ู€ Non-Generic Collections ุงู„ู…ู‡ู…ุฉ ููŠ C# ูˆุงู„ู„ูŠ ุจูŠู…ุซู„ ู…ุจุฏุฃ First-In, First-Out (FIFO).

ุงู„ู€ Queue ู…ูˆุฌูˆุฏ ููŠ System.CollectionsุŒ ูˆุจู†ุณุชุฎุฏู…ู‡ ู„ู…ุง ู†ูƒูˆู† ู…ุญุชุงุฌูŠู† ู†ูˆุตู„ ู„ู„ุนู†ุงุตุฑ ุจู†ูุณ ุงู„ุชุฑุชูŠุจ ุงู„ู„ูŠ ุฏุฎู„ุช ุจูŠู‡.

What is Queue and How Does it Work?

ุงู„ู€ Queue ู‡ูˆ collection ุจูŠุดุชุบู„ ุจู…ุจุฏุฃ FIFOุŒ ูŠุนู†ูŠ โ€œุฃูˆู„ ูˆุงุญุฏ ุฏุฎู„ ู‡ูˆ ุฃูˆู„ ูˆุงุญุฏ ูŠุฎุฑุฌโ€.

ุฃุญุณู† ู…ุซุงู„ ุนุดุงู† ู†ูู‡ู… ุงู„ู…ุจุฏุฃ ุฏู‡ ู‡ูˆ ุทุงุจูˆุฑ ุงู„ู†ุงุณ ุงู„ู„ูŠ ูˆุงู‚ููŠู† ุนุดุงู† ูŠู‚ุทุนูˆุง ุชุฐุงูƒุฑ ุณูŠู†ู…ุง. ุฃูˆู„ ุดุฎุต ุจูŠุฏุฎู„ ุงู„ุทุงุจูˆุฑ ู‡ูˆ ุฃูˆู„ ุดุฎุต ุจูŠูˆุตู„ ู„ู„ุดุจุงูƒ ูˆุจูŠุงุฎุฏ ุงู„ุชุฐูƒุฑุฉ.

ููŠ C#ุŒ ุงู„ู€ Queue ุจูŠุดุชุบู„ ุจู†ูุณ ุงู„ุทุฑูŠู‚ุฉ. ุงู„ุนู†ุงุตุฑ ุจุชุฏุฎู„ ุงู„ุทุงุจูˆุฑ ู…ู† ู†ู‡ุงูŠุชู‡ุŒ ูˆุจุชุฎุฑุฌ ู…ู† ุจุฏุงูŠุชู‡. ุงู„ุนู…ู„ูŠุงุช ุงู„ุฃุณุงุณูŠุฉ ู„ูŠู‡ุง ุฃุณู…ุงุก ุฎุงุตุฉ:

  • ุงู„ู€ Enqueue: ุฏูŠ ุนู…ู„ูŠุฉ ุฅุถุงูุฉ ุนู†ุตุฑ ุฌุฏูŠุฏ ููŠ ุขุฎุฑ ุงู„ู€ Queue.
  • ุงู„ู€ Dequeue: ุฏูŠ ุนู…ู„ูŠุฉ ุฅุฒุงู„ุฉ ุงู„ุนู†ุตุฑ ุงู„ู„ูŠ ู…ูˆุฌูˆุฏ ููŠ ุฃูˆู„ ุงู„ู€ Queue.
graph TD
    subgraph Queue Flow
        direction LR
        Input --> A[Enqueue];
        A --> B{Queue};
        B --> C[Dequeue];
        C --> Output;
    end

ู…ู„ุญูˆุธุฉ: ุฒูŠ ุงู„ู€ StackุŒ ููŠู‡ ู†ุณุฎุชูŠู† ู…ู† Queue ููŠ C#. ูˆุงุญุฏุฉ Non-Generic ููŠ System.Collections (ุงู„ู„ูŠ ุจู†ุชูƒู„ู… ุนู†ู‡ุง ู‡ู†ุง)ุŒ ูˆูˆุงุญุฏุฉ Generic ูˆ type-safe ุงุณู…ู‡ุง Queue<T> ููŠ System.Collections.Generic.

Characteristics of Queue

  • ุงู„ู€ Enqueue() ุจุชุถูŠู ุนู†ุตุฑ ููŠ ุขุฎุฑ ุงู„ู€ Queue.
  • ุงู„ู€ Dequeue() ุจุชุญุฐู ุฃู‚ุฏู… ุนู†ุตุฑ (ุงู„ู„ูŠ ููŠ ุฃูˆู„ ุงู„ู€ Queue).
  • ุงู„ู€ Peek() ุจุชุฑุฌุน ุฃู‚ุฏู… ุนู†ุตุฑ ู…ู† ุบูŠุฑ ู…ุง ุชุญุฐูู‡.
  • ุงู„ู€ Capacity ุจุชุงุนุชู‡ ุจุชุฒูŠุฏ ุชู„ู‚ุงุฆูŠู‹ุง ู„ู…ุง ุจู†ุถูŠู ุนู†ุงุตุฑ.
  • ุจูŠู‚ุจู„ ู‚ูŠู… null ูˆู‚ูŠู… ู…ูƒุฑุฑุฉ.

Creating a Queue

ุฃูˆู„ ุญุงุฌุฉุŒ ู„ุงุฒู… ู†ุนู…ู„ using System.Collections;. ุจุนุฏูŠู† ุจู†ู†ุดุฆ instance ู…ู† ุงู„ู€ Queue.

// Create an empty queue with default capacity
Queue queue = new Queue();

ููŠู‡ ุทุฑู‚ ุชุงู†ูŠุฉ ู„ู„ุฅู†ุดุงุกุŒ ุฒูŠ ุฅู†ูƒ ุชุญุฏุฏ ุงู„ู€ capacity ุงู„ุฃูˆู„ูŠุฉุŒ ุฃูˆ ุชู†ุดุฆู‡ ู…ู† collection ุชุงู†ูŠุฉ.

Adding Elements (Enqueue)

ุนุดุงู† ู†ุถูŠู ุนู†ุงุตุฑ ู„ู„ู€ QueueุŒ ุจู†ุณุชุฎุฏู… ุงู„ู€ method ุงู„ู„ูŠ ุงุณู…ู‡ุง Enqueue(). ุงู„ู€ method ุฏูŠ ุจุชุถูŠู ุงู„ุนู†ุตุฑ ููŠ ุขุฎุฑ ุงู„ู€ Queue.

// Create a queue collection
Queue queue = new Queue();
 
// Add items to the queue using the Enqueue() method
queue.Enqueue(101);
queue.Enqueue("Hello");
queue.Enqueue(3.14f);
queue.Enqueue(true);
queue.Enqueue(67.8);
queue.Enqueue('A');
 
// Printing the queue items using a foreach loop
// The loop starts from the first element added
foreach (var item in queue)
{
    Console.WriteLine(item);
}

ุงู„ู€ Queue ูƒู€ Non-Generic collection ุจูŠู‚ุจู„ ุฃูŠ ู†ูˆุน ุจูŠุงู†ุงุช.

Removing Elements

Dequeue() vs. Clear()

  • ุงู„ู€ Dequeue(): ุฏูŠ ุงู„ู€ method ุงู„ุฃุณุงุณูŠุฉ ุงู„ู„ูŠ ุจุชุญุฐู ุงู„ุนู†ุตุฑ ุงู„ู„ูŠ ููŠ ุฃูˆู„ ุงู„ู€ Queue ูˆุจุชุฑุฌุนู‡ูˆู„ูƒ. ู„ูˆ ุงู„ู€ Queue ูุงุถูŠ ูˆุญุงูˆู„ุช ุชุนู…ู„ Dequeue()ุŒ ู‡ูŠุญุตู„ InvalidOperationException.
  • ุงู„ู€ Clear(): ุจุชุญุฐู ูƒู„ ุงู„ุนู†ุงุตุฑ ุงู„ู„ูŠ ููŠ ุงู„ู€ Queue ู…ุฑุฉ ูˆุงุญุฏุฉ.
Console.WriteLine($"All Queue Elements: Count {queue.Count}");
foreach (var item in queue)
{
    Console.Write($"{item} ");
}
 
// Remove and return an item from the queue using the Dequeue() method
Console.WriteLine($"\n\nDeleted Element: {queue.Dequeue()}"); // The first element (101) is removed
 
Console.WriteLine($"\nAll Queue Elements After Deletion: Count {queue.Count}");
foreach (var item in queue)
{
    Console.Write($"{item} ");
}
 
// Clear all elements
queue.Clear();
Console.WriteLine($"\n\nQueue Elements After Clear Operation: Count {queue.Count}"); // Count will be 0

Getting the First Element

ุฅุฒุงูŠ ุชุดูˆู ุงู„ุนู†ุตุฑ ุงู„ู„ูŠ ููŠ ุฃูˆู„ ุงู„ุทุงุจูˆุฑ ู…ู† ุบูŠุฑ ู…ุง ุชุญุฐูู‡ุŸ ู‡ู†ุง ุจูŠุฌูŠ ุงู„ูุฑู‚ ุจูŠู† Dequeue() ูˆ Peek().

Dequeue() vs. Peek()

  • ุงู„ู€ Dequeue(): ุจุชุญุฐู ุงู„ุนู†ุตุฑ ุงู„ู„ูŠ ููŠ ุฃูˆู„ ุงู„ู€ Queue ูˆุจุชุฑุฌุนู‡.
  • ุงู„ู€ Peek(): ุจุชุฑุฌุน ุงู„ุนู†ุตุฑ ุงู„ู„ูŠ ููŠ ุฃูˆู„ ุงู„ู€ Queue ู…ู† ุบูŠุฑ ู…ุง ุชุญุฐูู‡.

ู„ูˆ ุงู„ู€ Queue ูุงุถูŠุŒ ุงู„ุงุชู†ูŠู† ุจูŠุฑู…ูˆุง InvalidOperationException.

Console.WriteLine($"Total Elements present in Queue: {queue.Count}"); // e.g., 6
 
// Using Dequeue()
Console.WriteLine($"First Element of Queue is {queue.Dequeue()}"); // Returns 101 and removes it
Console.WriteLine($"Total Elements present in Queue: {queue.Count}"); // Now 5
 
// Using Peek()
Console.WriteLine($"First Element of Queue is {queue.Peek()}"); // Returns "Hello" but doesn't remove it
Console.WriteLine($"Total Elements present in Queue: {queue.Count}"); // Still 5

Checking for an Element

ุนุดุงู† ุชุชุฃูƒุฏ ุฅุฐุง ูƒุงู† ููŠู‡ ุนู†ุตุฑ ู…ุนูŠู† ู…ูˆุฌูˆุฏ ููŠ ุงู„ู€ Queue ุฃูˆ ู„ุฃุŒ ุจู†ุณุชุฎุฏู… Contains(object).

if (queue.Contains("Hello"))
{
    Console.WriteLine("Element 'Hello' is found");
}
else
{
    Console.WriteLine("Element 'Hello' is not found");
}

ู…ู„ุญูˆุธุฉ ุฃุฏุงุก: ุงู„ู€ Contains() ุจุชุงุฎุฏ ูˆู‚ุช O(n)ุŒ ูŠุนู†ูŠ ุจุชู„ู ุนู„ู‰ ูƒู„ ุงู„ุนู†ุงุตุฑ ุนุดุงู† ุชู„ุงู‚ูŠ ุงู„ุนู†ุตุฑ ุงู„ู…ุทู„ูˆุจุŒ ูู…ู…ูƒู† ุชูƒูˆู† ุจุทูŠุฆุฉ ู„ูˆ ุงู„ู€ Queue ูƒุจูŠุฑ ุฌุฏู‹ุง.

Other Useful Methods and Properties

  • ุงู„ู€ Clone(): ุจุชุนู…ู„ shallow copy ู…ู† ุงู„ู€ Queue.
  • ุงู„ู€ CopyTo(array, index): ุจุชู†ุณุฎ ุนู†ุงุตุฑ ุงู„ู€ Queue ู„ู€ array ุนุงุฏูŠุฉุŒ ุจู†ูุณ ุงู„ุชุฑุชูŠุจ (ู…ู† ุงู„ุฃูˆู„ ู„ู„ุขุฎุฑ).

Properties

  • ุงู„ู€ Count: ุจุชุฑุฌุน ุนุฏุฏ ุงู„ุนู†ุงุตุฑ ุงู„ุญุงู„ูŠุฉ ููŠ ุงู„ู€ Queue.
  • ุงู„ู€ IsSynchronized: ุจุชุนุฑููƒ ุฅุฐุง ูƒุงู† ุงู„ู€ Queue ุฏู‡ thread-safe.
  • ุงู„ู€ SyncRoot: ุจุชุฑุฌุน object ู…ู…ูƒู† ู†ุณุชุฎุฏู…ู‡ ุนุดุงู† ู†ุนู…ู„ synchronization ูŠุฏูˆูŠ.

ู†ุตูŠุญุฉ: ุฒูŠ ุจุงู‚ูŠ ุงู„ู€ Non-Generic CollectionsุŒ ูŠููุถู„ ุงุณุชุฎุฏุงู… ุงู„ู†ุณุฎุฉ ุงู„ู€ Generic ูˆู‡ูŠ Queue<T> ููŠ ุงู„ุฃูƒูˆุงุฏ ุงู„ุญุฏูŠุซุฉ ุนุดุงู† ุชุณุชููŠุฏ ู…ู† ุงู„ู€ type safety ูˆุงู„ุฃุฏุงุก ุงู„ุฃูุถู„.