Movatterモバイル変換


[0]ホーム

URL:


Vai al contenuto
WikipediaL'enciclopedia libera
Ricerca

Deque

Da Wikipedia, l'enciclopedia libera.
Nessuna nota a piè di pagina
Questa voce o sezione sull'argomento informatica è priva o carente dinote eriferimenti bibliografici puntuali.

Sebbene vi siano unabibliografia e/o deicollegamenti esterni, manca la contestualizzazione delle fonti connote a piè di pagina o altri riferimenti precisi che indichino puntualmente la provenienza delle informazioni. Puoimigliorare questa vocecitando le fonti più precisamente. Segui i suggerimenti delprogetto di riferimento.
DiagrammaUML di unadeque

In informatica, unadeque (solitamente pronunciato comedeck, è l'abbreviazione didouble-ended queue, cioècoda doppia) è unastruttura dati astratta simile a una lista, anche chiamatalista concatenata testa-coda in quanto gli elementi possono essere aggiunti o rimossi solamente dalla testa o dalla coda.

Convenzioni sul nome

[modifica |modifica wikitesto]

Ladeque viene a volte scrittadequeue, ma questa pratica è generalmente scoraggiata nella letteratura tecnica poichédequeue è anche un verbo inglese che significa "rimuovere da una coda". Nonostante ciò, alcuni autori comeAlfred Aho,John Hopcroft, eJeffrey Ullman nel loro libroData Structures and Algorithms, adoperano la paroladequeue.Inoltre, per indicare unadeque vengono usati anche DEQ e DQ.

Distinzioni e sotto-tipi

[modifica |modifica wikitesto]

Questa struttura dati differisce da una normale codaFIFO nella quale gli elementi possono essere aggiunti solo da una parte e rimossi dell'altra. Alcuni dei possibili sotto-tipi di questa struttura dati sono:

  • Unadeque a input ristretto è unadeque nella quale le rimozioni possono avvenire su entrambi i lati, e gli inserimenti da uno solo.
  • Unadeque a output ristretto è unadeque nella quale gli inserimenti possono avvenire su entrambi i lati, e le rimozioni da uno solo.

Entrambe le strutture dati più comuni e fondamentali dell'informatica, lacoda e lostack possono essere considerate particolari deque, e sono quindi implementabili usando una deque.

Operazioni

[modifica |modifica wikitesto]

Unadeque supporta le seguenti operazioni:

OperazioneAdaC++JavaJavaScriptPerlPHPPythonRuby
Inserisci elemento come ultimoAppendpush_backofferLastpushpusharray_pushappendpush
Inserisci elemento come primoPrependpush_frontofferFirstunshiftunshiftarray_unshiftappendleftunshift
Rimuovi ultimo elementoDelete_Lastpop_backpollLastpoppoparray_poppoppop
Rimuovi primo elementoDelete_Firstpop_frontpollFirstshiftshiftarray_shiftpopleftshift
Esamina ultimo elementoLast_ElementbackpeekLast<obj>[<obj>.length - 1]$_[-1]end<obj>[-1]last
Esamina primo elementoFirst_ElementfrontpeekFirst<obj>[0]$_[0]reset<obj>[0]first

Implementazioni

[modifica |modifica wikitesto]

Esistono almeno due modi di implementare efficientemente unadeque: attraverso unarray dinamico modificato o tramite unalista doppiamente concatenata.

Implementazione tramite array dinamico

[modifica |modifica wikitesto]

Ladeque viene spesso implementata usando una variante dell'array dinamico che può accrescere la sua capienza da entrambi i lati e che viene anche chiamatodeque array. Essi hanno tutte le proprietà degli array dinamici, come tempo costante di accesso arbitrario, buona località, e inserimenti e rimozioni al centro inefficienti con l'aggiunta di inserimenti e rimozioni con tempo ammortizzato costante da entrambi i lati, invece che da un lato solo.Due implementazioni comuni sono:

  • Memorizzare il contenuto delladeque in unarray circolare ridimensionandolo solo quando è completamente pieno.
  • Memorizzare il contenuto delladeque a partire dal centro dell'array sottostante e ridimensionarlo quando una delle due estremità viene raggiunta. Questo approccio può richiedere ridimensionamenti più frequenti e spreca più spazio, in particolare quando gli elementi vengono aggiunti da una parte sola.

Supporto nei linguaggi

[modifica |modifica wikitesto]

La libreria C++Standard Template Library offre laclassestd::deque e la classestd::list per l'implementazione degli array dinamici e della lista concatenata rispettivamente.

Java 6 offre una nuova interfacciaDeque che permette l'inserimento e la rimozione su entrambi i lati. È implementata da classi comeArrayDeque (anch'essa introdotta in Java 6) eLinkedList che forniscono le implementazioni dell'array dinamico e della lista concatenata rispettivamente.

Python 2.4 ha introdotto il modulocollections col supporto per gli oggettideque.

In PHP 5.3, l'estensione SPL contiene la classeSplDoublyLinkedList che può essere usata per l'implementazione di unadeque.

Complessità

[modifica |modifica wikitesto]

Bibliografia

[modifica |modifica wikitesto]

Voci correlate

[modifica |modifica wikitesto]

Collegamenti esterni

[modifica |modifica wikitesto]
V · D · M
Strutture dati
TipiCollezione ·Container
AstratteArray associativo (Multimap) ·Lista ·Pila ·Coda (Deque) ·Coda di priorità ·Set (Multiset ·Mfset)
ArrayBit array ·Buffer circolare ·Array dinamico ·Hash table ·Array sparso
CollegateLista di associazioni ·Lista concatenata ·Skip list ·Unrolled linked list ·Lista concatenata tramite XOR
AlberiB-albero ·Albero binario di ricerca (Albero AA ·Albero AVL ·RB-Albero ·Albero binario di ricerca bilanciato ·Albero splay) ·Heap (Heap binario ·Heap binomiale ·Heap di Fibonacci) ·Albero di Merkle ·Albero SPQR ·Albero PQ ·Albero indicizzato binario
GrafiDiagramma binario di decisione ·Digrafo aciclico ·Automa a stati finiti deterministico aciclico
Alberi di partizionamento
dei dati spaziali
Albero quadramentale ·M-tree ·R-tree (R* tree ·R+ tree) ·X-tree
Lista di strutture dati
  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica
Estratto da "https://it.wikipedia.org/w/index.php?title=Deque&oldid=142078179"
Categoria:
Categorie nascoste:

[8]ページ先頭

©2009-2025 Movatter.jp