queue(7)

NUME
queue - implementări ale listelor legate și ale cozilor de așteptare

DESCRIERE
Fișierul de antet <sys/queue.h> oferă un set de macrocomenzi care definesc și operează cu următoarele structuri de date:

SLIST
    liste legate individual

LIST
    liste dublu legate

STAILQ
    cozi de așteptare legate individual

TAILQ
    cozi de așteptare dublu legate

CIRCLEQ
    cozi circulare dublu legate

Toate structurile suportă următoarele funcționalități:

•   Inserarea unei noi intrări în capul listei.

•   Inserarea unei noi intrări după orice element din listă.

•   O(1) eliminarea unei intrări din capul listei.

•   Deplasare înainte prin listă.

Dimensiunea codului și timpul de execuție depind de complexitatea structurii de date utilizate, astfel încât programatorii trebuie să aibă grijă să o aleagă pe cea potrivită.

  Liste legate individual (SLIST)
Listele legate individual sunt cele mai simple și acceptă doar funcționalitatea de mai sus. Listele legate individual sunt ideale pentru aplicațiile cu seturi de date mari și cu puține sau deloc eliminări sau pentru implementarea unei cozi LIFO. Listele legate individual adaugă următoarele funcționalități:

•   O(n) eliminarea oricărei intrări din listă.

  Cozi de așteptare legate individual (STAILQ)
Cozile de așteptare legate individual adaugă următoarea funcționalitate:

•   Se pot adăuga intrări la sfârșitul unei liste.

•   O(n) eliminarea oricărei intrări din listă.

•   Acestea pot fi concatenate.

Cu toate acestea:

•   Toate inserările de liste trebuie să precizeze capul de listă.

•   Fiecare intrare de cap necesită doi indicatori în loc de unul.

Cozile de așteptare legate individual sunt ideale pentru aplicațiile cu seturi mari de date și cu puține sau deloc eliminări sau pentru implementarea unei cozi FIFO.

  Structuri de date dublu legate
Toate tipurile de structuri de date dublu legate (liste și cozi de coadă) permit în plus:

•   Inserarea unei noi intrări înaintea oricărui element din listă.

•   O(1) eliminarea oricărei intrări din listă.

Cu toate acestea:

•   Fiecare element necesită doi indicatori în loc de unul.

  Liste dublu legate (LIST)
Listele dublu legate sunt cele mai simple dintre structurile de date dublu legate. Acestea adaugă următoarele funcționalități față de cele de mai sus:

•   Acestea pot fi parcurse în sens invers.

Cu toate acestea:

•   Pentru a parcurge în sens invers, trebuie să se precizeze o intrare pentru a începe parcurgerea și lista în care aceasta este conținută.

  Cozi de așteptare dublu legate (TAILQ)
Cozile de așteptare adaugă următoarea funcționalitate:

•   Se pot adăuga intrări la sfârșitul unei liste.

•   Acestea pot fi parcurse în sens invers, de la coadă la cap.

•   Acestea pot fi concatenate.

Cu toate acestea:

•   Toate inserările și eliminările din listă trebuie să precizeze capul de listă.

•   Fiecare intrare de cap necesită doi indicatori în loc de unul.

  Cozi circulare dublu legate (CIRCLEQ)
Cozile circulare adaugă următoarele funcționalități față de cele de mai sus:

•   Prima și ultima intrare sunt conectate.

Cu toate acestea:

•   Condiția de încheiere pentru parcurgere este mai complexă.

STANDARDE
BSD.

ISTORIC
Macrocomenzile <sys/queue.h> au apărut pentru prima dată în 4.4BSD.

NOTE
Unele BSD-uri oferă SIMPLEQ în loc de STAILQ. Ele sunt identice, dar din motive istorice au fost denumite diferit pe diferite BSD-uri. STAILQ provine de pe FreeBSD, iar SIMPLEQ provine de pe NetBSD. Din motive de compatibilitate, unele sisteme furnizează ambele seturi de macrocomenzi. glibc furnizează atât STAILQ, cât și SIMPLEQ, care sunt identice, cu excepția unui echivalent SIMPLEQ lipsă pentru STAILQ_CONCAT().

CONSULTAȚI ȘI
circleq(3), insque(3), list(3), slist(3), stailq(3), tailq(3)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.