Se ti è stato chiesto di progettare il funzionamento del pulsante avanti e indietro (come una libreria) in un browser, come lo faresti? Quali saranno le vostre API e parametri per loro? quale struttura dati sarà più adatta per questo caso?
La soluzione più semplice sarebbe utilizzare due stack (indietro, avanti).
Facendo clic sul pulsante Indietro, si aprirà il back stack e si sposterà la pagina corrente sullo stack in avanti (e si andrà al valore popped nello stack posteriore).
Facendo clic su qualsiasi link su una pagina (seguendo un link) si cancellerà lo stack in avanti e si sposterà la pagina corrente sul back stack.
Facendo clic sul pulsante di inoltro si aprirà lo stack in avanti e si sposterà la pagina corrente sul back stack (e si andrà al valore popped nello stack in avanti).
I pulsanti Indietro e Avanti sono disabilitati quando lo stack appropriato è vuoto.
Vorrei utilizzare un array contenente urls, con una variabile che memorizza la lunghezza e un indice che punta all'elemento corrente che viene visualizzato.
Indietro decrementa l'indice, Inoltra incrementa l'indice. Nuova pagina incrementa l'indice, memorizza l'url in quel punto dell'array e imposta la lunghezza sul valore dell'indice.
Quando l'array è pieno, utilizzerei un realloc()
per richiedere più memoria o implementare un accesso anulare all'array, a seconda dei vincoli di memoria.
Leggi altre domande sui tag object-oriented design-patterns