Rešitev: Implementacija sklada v Mathematici

Iz MaFiRaWiki

Naloga: Implementacija sklada v Mathematici

  • Prosta implementacija sklada:
Clear[Pripravi,Vstavi,JePrazen,Vrh,Odstrani,StElementov,NElementov];

JePrazen[Pripravi[]]:=True;
JePrazen[Vstavi[s_,e_]]:=False;
JePrazen::usage="Funkcija JePrazen[s] vrne True če je sklad s 
prazen in False sicer.";

Vrh[Pripravi[]]:=Null;
Vrh[Vstavi[s_,e_]]:=e;
Vrh::usage="Funkcija Vrh[s] 
        vrne zgornji element sklada s . Če je sklad prazen, vrne Null.";

Odstrani[Pripravi[]]:=Pripravi[]; 
Odstrani[Vstavi[s_,e_]]:=s;
Odstrani::usage="Funkcija Odstrani[s] vrne sklad s brez 
    zgornjega elementa . Če je sklad prazen, vrne prazni sklad.";

StElementov[Pripravi[]]:=Nic;
StElementov[Vstavi[s_,e_]]:=Vsota[StElementov[s] ,Ena];
StElementov::usage="Funkcija 
    StElementov[s] vrne število elementov v skladu s.";

NElementov[0,x_]:=Pripravi[];
NElementov[n_,x_]:=Vstavi[NElementov[n-1,x],x];
NElementov::usage="
    Funkcija NElementov[n, e] zgradi sklad, ki vsebuje natanko n 
elementov e.";

Opomba: operacija Odstrani[Pripravi[]] := Pripravi[]; bi lahko sporočila napako. Odločili smo se, da praznega sklada ne moremo še bolj sprazniti in ne sporočamo napake.

  • Implementacija sklada s seznamom:
Clear[Pripravi, Vstavi, Odstrani,JePrazen,Vrh,StElementov]

Pripravi[]:={};

Vstavi[s_,e_]:=Join[s,{e}];

JePrazen[s_]:=(Length[s]\[Equal]0);

Vrh[s_]/;Length[s]\[Equal]0:= Null;
Vrh[s_]:=Last[s];

Odstrani[s_]/;s\[Equal]{}:=s;
Odstrani[s_]:=Most[s];

StElementov[s_]:=Length[s];
  • Implementacija sklada s tabelo:

Uporabljamo globalno spremenljivko s, ki nam hrani sklad, predstavljen s tabelo, in globalno spremenljivko v, ki predstavlja vrh sklada. Sklad najprej napolnemo s posebnimi vrednostmi 0. Preprečimo da bi uporabnik dodal posebno vrednost na sklad.

Clear[Pripravi,Vstavi,Odstrani]
Clear[v,s]

Pripravi[n_]:=Do[
    s=Table[0,{i,n}];
    v=0;
    ]

Vstavi[x_]/;x≠0:=Module[{t},
    v=v+1;
    s[[v]]=x;
    ]
Vstavi[0]:=Null;

Odstrani[]:=Module[{t},
    s[[v]]=0;
    v=v-1;
    ]


Glej tudi

Osebna orodja