A sor adatszerkezet működési szempontból a verem ellentettje. A verem esetén az utolsó elem az, amit a legelsőként ki tudunk venni, míg a sor esetében az elsőnek behelyezett elem vehető ki elsőként. Ez a működési elv FIFO (First in, First out) néven is ismert.
A sor struktúra számítógépek esetén legtöbb esetben a kommunikációs átmeneti tárak (pufferek) megvalósításában szerepel.
A sor szintén két alapvető művelettel rendelkezi: Enqueue és Dequeue műveletekkel. Az Enqueue művelet felvesz egy elemet a sorba, míg a Dequeue művelet eltávolít egy elemet. A sor belső működésében a .NET-ben szintén egy listaként van implementálva.
A Queue<T> osztály fontosabb tulajdonságai és metódusai:
Queue(IEnumerable<T> collection)
Paraméteres konstruktor. A sor elemei a paraméterként megadott IEnumerable felületet implementáló osztály elemei lesznek.
Queue(int capacity)
Paraméteres konstruktor. A paraméter a kiindulásként tárolni kívánt elemek számát adja meg.
T Peek()
Visszaadja a sor elején lévő elemet anélkül, hogy azt kivenné a sorból.
T Dequeue()
Visszaadja a sor elején lévő elemet, majd eltávolítja azt a sorból.
void Enqueue(T item)
A sor végére teszi a paraméterként megadott elemet.
T[] ToArray()
A sor elemeit visszaadja egy tömbben.
void TrimExcess()
Átméretezi a belső listát úgy, hogy csak annyi elemnek foglaljon helyet, mint amennyi ténylegesen használva van.
Az alábbi példaprogram a sor használatát mutatja be:
using System;
using System.Collections.Generic;
namespace PeldaSor
{
class Program
{
static void Main(string[] args)
{
var sor = new Queue<char>();
var be = "SOR RULEZ";
Console.WriteLine("Sorba írás: {0}", be);
foreach (var chr in be)
{
sor.Enqueue(chr);
}
Console.WriteLine("Sorból kiolvasás:");
while (sor.Count > 0)
{
var karakter = sor.Dequeue();
Console.Write(karakter);
}
Console.WriteLine();
Console.ReadKey();
}
}
}
A program kimenete:
Sorba írás: SOR RULEZ
Sorból kiolvasás:
SOR RULEZ