|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2012
Messaggi: 12
|
[C++] ADT: Coda Statica Circolare
Salve a tutti, vorrei capire bene come realizzare questo tipo di ADT. Concettualmente, mi sembra di aver capito che la coda circolare, rispetto a quella lineare, è realizzata sempre con array, e una volta full permette di inserire i nuovi elementi dalla prima posizione (e neanche sono sicuro che questo sia corretto
)Ora, suppongo che la differenza stia nell'implementare diversamente append e pop, che sviluppo di solito in questo modo: (con c e t la coda e la testa) append(int a) { C[c]=a; c=(c+1)%N; nelem++; } pop(int a) { a=C[t]; t=(t+1)%N; nelem--; } (La coda la sviluppo come classe, quindi queste le uso come funzioni membro) Cosa devo cambiare a queste funzioni affinché la coda abbia un comportamento circolare? Mi sta bene anche qualche suggerimento, l'importante è capire come farla Grazie in anticipo! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
|
Aspetta... non è la coda ad essere circolare... è l'array con cui la implementi ad esserlo...
Una coda è una struttura astratta ben definita, la circolarità si riferisce al fatto che l'array con cui la implementi permette di inserire un elemento successivo a quello nell'ultimo indice ponendolo al primo indice (se la posizione è libera, altrimenti si estende l'array). Detto questo, le funzioni potrebbero essere riscritte tenendo conto della circolarità: Codice:
append(int a){
if (c >= N) //c sfora l'array => portalo al primo
c = 0;
if (c == t) //coda piena se testa e coda coincidono
estendi(); //estendi array
C[c++] = a; //inserisci valore e post-incrementa c
nelem++;
}
pop(){
if (t >= N) //t sfora l'array => portalo al primo
t = 0;
a = C[t++]; //recupera valore e post-incrementa t
nelem++;
}
estendi(){
//codice dove crei un array di dimensione maggiore (doppia)
//e copi dentro tutti gli elementi dalla testa alla coda
//alla fine scarti l'array vecchio e a C assegni il nuovo array.
}
L'idea è quella comunque.
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jun 2013
Messaggi: 1
|
Ciao a tutti, il codice della coda circolare interesserebbe anche a me, potreste mostrarmi com'è implementata la funzione estendi() ?
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:01.










)








