|
|
|
![]() |
|
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: 00:45.