Esiste una struttura di dati per mantenere un elenco ordinato che supporta le seguenti operazioni nel tempo ammortizzato ?
GetElement (k) : restituisce il ° elemento dell'elenco.
InsertAfter (x, y) : inserire il nuovo elemento y nell'elenco immediatamente dopo x.
Elimina (x) : rimuove x dall'elenco.
Per le ultime due operazioni, puoi supporre che x sia dato come puntatore direttamente nella struttura dei dati; InsertElement restituisce il puntatore corrispondente per y. InsertAfter (NULL, y) inserisce y all'inizio dell'elenco.
Ad esempio, a partire da una struttura di dati vuota, le seguenti operazioni aggiornano l'elenco ordinato come mostrato di seguito:
- InsertAfter (NULL, a) [un]
- InsertAfter (NULL, b) [b, a]
- InsertAfter (b, c) [b, c, a]
- InsertAfter (a, d) [b, c, a, d]
- Delete (c) [male]
Dopo questi cinque aggiornamenti, GetElement (2) dovrebbe restituire d e GetElement (3) dovrebbe restituire un errore.