Implementering av hash -tabell i C ++

Implementering av hash -tabell i C ++
Hvis du noen gang har jobbet i et Python-miljø, må du ha visst om bruken av objektet "Dictionary" som inneholder et nøkkelverdipar i det. Akkurat som ordbøker, kom C ++ på konseptet nøkkelverdipar. Dette paret vil bli lagret i datastrukturen hasjtabell for C++. Datastruktur Hash -tabellen vil bruke hashfunksjonen for å beregne matrisindeksen for å sette inn verdier i tabellen ved å bruke indekser og også søke dem.

Innenfor denne guiden vil vi diskutere bruken av metoder for å opprette, legge til, slette, søkeverdier fra hashtabellene ved å bruke noen av funksjonene.

La oss starte med påloggingen fra Linux. Prøv å lage en C ++ -fil ved å bruke “Touch” -instruksjonen i skallet og benytte deg av alle tilgjengelige innebygde redigeringsanlegg fra Linux-systemet ditt for å åpne den (i.e. Gnu nano).

Eksempel: hashbord

Du vil se at den tomme filen åpnes på Linux Terminal -skjermen. Innenfor denne filen må vi inkludere noen av de viktigste og nødvendige bibliotekene til C ++ for å gjøre koden vår kjøres ved bruk av forskjellige konsepter.

Så vi har lagt til "iostream" for input og output -bruk i skriptet via CIN- og Cout -objektene. Strengbiblioteket har blitt brukt til å benytte seg av strengverdier i koden vår. “CSTDLIB” og “CSTDIO” -biblioteket har blitt brukt for å få standardkarakter og inngangsverdier for bruk av hasjtabeller. Før vi bruker en funksjon eller klasse, har vi erklært et standard "navneområde" i koden, og etter det har vi initialisert en konstant heltallvariabel "T_S" for hash -tabellstørrelsen for å få 200 poster.

Klassen HashtableEntry er her for å initialisere verdien av nøkkelverdiparet til en tabell ved å få verdien som en inngang fra brukeren. Konstruktørfunksjonen HashTableEntry () vil bli brukt for dette.

Her kommer den andre klassen “Hashmaptable” som erklærer et privat pekerobjekt “TB” for klassen “HashtableEntry”.

Opprettelsen av et objekt “hasj” i hovedfunksjonen () for klasse hashmaptable, den første funksjonen som ble utført, er konstruksjonsfunksjonen “hashmaptable”. Denne konstruktøren brukes til å konstruere tabellen til nøkkelverdi-paretype av størrelse “T_S” i.e. 200.

For å konstruere en nøkkelverditabell over størrelse 200, har vi brukt "for" -sløyfen opp til størrelse 200 initialisering av hver indeks til null.

Denne funksjonen vil beregne modulen til nøkkel "A" og tabellstørrelse "T_S" og returnere den.

Hvis brukeren velger alternativet '1', vil "input" -funksjonen bli utført ved å få nøkkelverdipar fra brukeren. "Hashfunc" -funksjonen vil bli kalt ved å gi verdien “A” til den. Den returnerte modulen vil bli lagret i "H" -variabelen. Denne "h" vil bli brukt som et indeksnummer for tabellen "TB" i stundsløyfen.

Hvis den spesifikke indeksverdien til en tabell ikke er null og tabellindeks “H” for nøkkel “A” ikke er lik nøkkel “A”, vil den bli kalt HashFunc () igjen for å beregne modulen og lagre resultatet til “ h ”. Hvis den spesifikke indeksen for tabellen ikke er null, vil vi slette den aktuelle verdien fra tabellen og generere en ny nøkkelverdioppføring på den spesifikke indeksen.

SearchKey () -funksjonen vil ta nøkkelen, sjekke modulen og søke etter verdien i tabellindeksen. Hvis verdien ved indeksen “H” er null, vil den returnere -1 ellers returnerte verdien “B” for en spesifikk indeks “H” fra tabellen.

Delete () -funksjonen vil ta nøkkelen og den spesifikke verdien for denne nøkkelen. Slett verdien hvis den spesifiserte indeksen ikke er tom og vis suksessmeldingen ved hjelp av COUT -setningen.

Destructor brukes til å slette hele hasjbordet.

Etter å ha startet Main () -metoden, har vi laget et objekt “hasj” for klassen Hashmaptable. På grunn av objektdannelse vil konstruktøren bli kalt og en tabell vil bli opprettet. Deretter har vi initialisert 2 heltallvariabler A, B og C. Vi har brukt menyrepresentasjonen for en bruker for å opprette en tabell, sette inn, slette og vise poster som velger et alternativ.

Så, mens () -løkken vil fortsette å utføre til brukeren går ut. Vi har brukt cout -standardutgangsuttalelser for å opprette en meny i.e. Velg 1 for å legge inn en verdi, 2 for å søke, 3 for å slette og 4 for å avslutte. En bruker har blitt bedt om å velge et alternativ, og en CIN -uttalelse brukes til å få input (1,2,3,4) i en variabel 'C' fra brukeren.

Nå, her kommer Switch -setningen ved å bruke variabelen “C” som en alternativverdi å handle deretter.

Nå, hvis brukeren har trykket på 1 som et alternativ, vil sak 1 av en bryter bli utført. Den vil utføre noen COUT-utsagn og be deg om å oppgi nøkkelen først og deretter parverdien for en bestemt nøkkel ved hjelp av CIN-uttalelse og lagre nøkkelverdi-inngang til “A” og “B” -variabler. "Input" -funksjonen vil bli kalt ved hjelp av et "hasj" -objekt og variabelen "A", "B" vil bli gitt til det.

Hvis en bruker velger 2, vil sak 2 bli utført og be en bruker om å oppgi en tast eller søk. “CIN” vil få en nøkkel fra brukeren til å sette inn variabelen “A”. "IF" -uttalelsen vil kalle “SearchKey ()” -metoden ved hjelp av “Hash” -objektet.

Hvis vi ikke finner noen nøkkel fra tabellen I.e. “-1”, vi vil vise en melding “Ingen verdi funnet på Key A”. Ellers vil vi vise nøkkelen og dens spesifikke verdi returnert av "SearchKey" -funksjonen.

Når du velger alternativ 3, vil brukeren bli bedt om å oppgi nøkkelen for å slette den fra tabellen. Funksjonen "slett ()" vil bli utført.

Hvis brukeren velger alternativ 4, vil programmet avslutte.

Nå er det på tide å samle denne koden med Ubuntus “G ++” Spesialkompilator for C ++ -filer.

Samlingen var vellykket, og vi utførte den med “./en.ut ”spørring. Menyen for 4 alternativ er vist, og brukeren har blitt bedt om å gå inn i hans/hennes valg (1,2,3,4). Brukeren har lagt til 1 for å sette inn verdi i hasjtabellen. Brukeren skrev inn nøkkelen og verdien for tabellen. Denne posten ble satt inn vellykket, og menyen ble vist igjen.

Brukeren skrev inn “2” som et alternativ for å søke etter den spesifikke nøkkelverdien. Til gjengjeld fikk vi verdien “14” for tast 1 i hasjbordet. Alternativer -menyen vises igjen.

Denne gangen velger brukeren alternativ 3 for å slette den allerede holdt verdien fra hasjtabellen ved å bruke nøkkelen. Så brukeren ble bedt om å legge inn nøkkelen du vil slette verdien (i.e. 1). Systemet vil vise meldingen om at det spesifikke elementet er fjernet.

Igjen er menyen blitt vist. Brukeren har valgt alternativ 4 for å avslutte programmet.

Konklusjon

Denne artikkelen handler om opprettelsen av en hasjtabell ved hjelp av C ++ -koden i Ubuntu 20.04 System. Sammen med det oppdaget vi også metodene for å sette inn nøkkelverdi-paret i hasjtabellen, vise det spesifikke nøkkelverdiparet, slette et spesifikt nøkkelverdipar og avslutte koden. Vi brukte menyen for å gjøre det enkelt og Switch -setningene for å velge alternativer.