// File: ScansioneLineare.pseudocpp /* Contiene lo pseudocodice delle fiunzione Inserisci, Cerca, Elimina nel caso di hashing aperto con scansione lineare. Si noti che ogni posizione della tavola puo' essere in tre stati: 'vuota', 'liberata', 'occupata' dove 'occupata' significa che non e' vuota e non e' liberata. */ // Inserisce l'oggetto nella prima posizione vuota o liberata. void Inserisci(Chiave K, InsAttr I) { if (tavola_piena) return; // oppure rehash int probe = hash(K); while (tavola[probe].stato != 'occupata') probe = (probe + 1) % dimTavola; tavola[probe] = (K,I); } // Considera la ricerca fallita se arriva ad una posizione 'vuota'. // Nota per non bloccare la sequenza di scansione le posizioni liberate // non vengono poste a 'vuota' ma nello stato speciale 'liberata'. (bool,Chiave,InsAttr) Cerca(Chiave K, InsAttr I) { int probe = hash(K); while (tavola[probe].stato != 'vuota' && tavola[probe].key != K) probe = (probe + 1) % dimTavola; if (tavola[probe].stato != 'vuota') return (false,nil,nil); else return (true, tavola[probe].key, tavola[probe].insattr); } // Per non bloccare la sequenza di scansione le posizioni liberate // non vengono poste a 'vuota' ma nello stato speciale 'liberata'. void Elimina(Chiave K) { int probe = hash(K); while (tavola[probe].stato != 'vuota' && tavola[probe].key != K) probe = (probe + 1) % dimTavola; if (tavola[probe].key == K) tavola[probe] = 'liberata'; }