// ex7_8_3 #include <iostream.h> struct elem { int info; elem* next; elem (int Info, elem* Next) { info = Info; next = Next; } }; // inserisce un elemento void inserisce (elem*& ind, int n) { // caso base: lista vuota if (ind == 0) { ind = new elem (n, 0); ind->next = ind; return; } ind->next = new elem (n, ind->next); } // sposta l'indicatore in avanti void avanza (elem*& ind) { ind = ind->next; } // stampa la lista void stampa (const elem* ind) { if (ind == 0) return; const elem* p = ind; while (p->next != ind) { cout << p->info << "\t"; p = p->next; } cout << p->info << "\n"; } void main() { elem* ind = 0; for (int i = 0; i < 5; i++) inserisce (ind, i); stampa (ind); avanza (ind); stampa (ind); avanza (ind); stampa (ind); }
output:
0 | 4 | 3 | 2 | 1 | |
4 | 3 | 2 | 1 | 0 | |
3 | 2 | 1 | 0 | 4 |
Le liste circolari sono relativamente difficili sia da programmare che da utilizzare, in quanto mancano i soliti punti fissi costituiti da testa e coda; in realtà, se si escludono gli scopi puramente didattici, non sono molto usate nel mondo della programmazione.