diff --git a/ALGA/Adatszerkezetek/06_Szotar.cs b/ALGA/Adatszerkezetek/06_Szotar.cs index 095456c..5d0f2a3 100644 --- a/ALGA/Adatszerkezetek/06_Szotar.cs +++ b/ALGA/Adatszerkezetek/06_Szotar.cs @@ -1,6 +1,134 @@ using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System; +using System.Collections.Generic; +using static System.Net.Mime.MediaTypeNames; namespace OE.ALGA.Adatszerkezetek { - // 6. heti labor feladat - Tesztek: 06_SzotarTesztek.cs + + public class SzotarElem + { + public K Kulcs; + public T Tart; + + public SzotarElem(K kulcs, T tart) + { + Kulcs = kulcs; + Tart = tart; + } + } + + + public class HasitoSzotarTulcsordulasiTerulettel : Szotar + { + private SzotarElem[] E; + private Func h; + private Lista> U = new LancoltLista>(); + + public HasitoSzotarTulcsordulasiTerulettel(int meret, Func hasitoFuggveny) + { + E = new SzotarElem[meret]; + this.h = x => Math.Abs(hasitoFuggveny(x)) % E.Length; + } + + public HasitoSzotarTulcsordulasiTerulettel(int meret) : this(meret, x => x.GetHashCode()) + { + } + + private SzotarElem KulcsKeres(K kulcs) + { + int i = h(kulcs); + if (E[i] != null && EqualityComparer.Default.Equals(E[i].Kulcs, kulcs)) + { + return E[h(kulcs)]; + } + else + { + SzotarElem e = null; + U.Bejar(x => + { + if (EqualityComparer.Default.Equals(x.Kulcs, kulcs)) + { + e = x; + } + }); + return e; + } + } + + public void Beir(K kulcs, T ertek) + { + SzotarElem e = KulcsKeres(kulcs); + if (e != null) + { + e.Tart = ertek; + } + else + { + SzotarElem newDictenary = new SzotarElem(kulcs, ertek); + if (E[h(kulcs)] == null) + { + E[h(kulcs)] = newDictenary; + } + else + { + U.Hozzafuz(newDictenary); + } + } + } + + + + public T Kiolvas(K kulcs) + { + SzotarElem e = KulcsKeres(kulcs); + if (e != null) + { + return e.Tart; + } + else + { + throw new HibasKulcsKivetel(); + } + } + + + + + + public void Torol(K kulcs) + { + if (E[h(kulcs)] != null && EqualityComparer.Default.Equals(E[h(kulcs)].Kulcs, kulcs)) + { + E[h(kulcs)] = null; + + } + else + { + SzotarElem e = null; + U.Bejar(x => + { + if (EqualityComparer.Default.Equals(x.Kulcs, kulcs)) + { + e = x; + } + }); + if (e != null) + { + U.Torol(e); + } + else + { + throw new HibasKulcsKivetel(); + } + + } + } + } + } +