consolidate all repos to one for archive
This commit is contained in:
3
semester_2/podatkovne_strukture/naloga_3/.gitignore
vendored
Normal file
3
semester_2/podatkovne_strukture/naloga_3/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.idea/*
|
||||
cmake-build-debug/*
|
||||
CMakeLists.txt
|
1
semester_2/podatkovne_strukture/naloga_3/README.md
Normal file
1
semester_2/podatkovne_strukture/naloga_3/README.md
Normal file
@@ -0,0 +1 @@
|
||||
Navodila v folder navodila
|
304
semester_2/podatkovne_strukture/naloga_3/main.cpp
Normal file
304
semester_2/podatkovne_strukture/naloga_3/main.cpp
Normal file
@@ -0,0 +1,304 @@
|
||||
|
||||
#include <iostream>
|
||||
#include <queue>
|
||||
#include <limits>
|
||||
|
||||
using namespace std;
|
||||
|
||||
// razred IskalnoDrevo
|
||||
class IskalnoDrevo
|
||||
{
|
||||
// razred Vozlisce
|
||||
class Vozlisce
|
||||
{
|
||||
double podatek;
|
||||
Vozlisce *levo;
|
||||
Vozlisce *desno;
|
||||
|
||||
public:
|
||||
|
||||
Vozlisce(double podatek)
|
||||
{
|
||||
this->podatek = podatek;
|
||||
this->levo = NULL;
|
||||
this->desno = NULL;
|
||||
}
|
||||
|
||||
void vstavi(double podatek)
|
||||
{
|
||||
if (podatek < this->podatek)
|
||||
{
|
||||
if (levo == NULL)
|
||||
levo = new Vozlisce(podatek);
|
||||
else
|
||||
levo->vstavi(podatek);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (desno == NULL)
|
||||
desno = new Vozlisce(podatek);
|
||||
else
|
||||
desno->vstavi(podatek);
|
||||
}
|
||||
}
|
||||
|
||||
int stevilo_vozlisc()
|
||||
{
|
||||
int stevilo = 1;
|
||||
if(desno != NULL)
|
||||
stevilo += desno->stevilo_vozlisc();
|
||||
|
||||
if(levo != NULL)
|
||||
stevilo += levo->stevilo_vozlisc();
|
||||
|
||||
return stevilo;
|
||||
}
|
||||
|
||||
int visina_drevesa(int globina)
|
||||
{
|
||||
int desnoVisina = 0;
|
||||
int levoVisina = 0;
|
||||
|
||||
if(desno != NULL)
|
||||
desnoVisina += desno->visina_drevesa(globina + 1);
|
||||
|
||||
if(levo != NULL)
|
||||
levoVisina += levo->visina_drevesa(globina + 1);
|
||||
|
||||
if(levoVisina == 0 and desnoVisina == 0)
|
||||
return globina;
|
||||
else if(levoVisina < desnoVisina)
|
||||
return desnoVisina;
|
||||
else
|
||||
return levoVisina;
|
||||
}
|
||||
|
||||
double najvecji()
|
||||
{
|
||||
double najvec = this->podatek;
|
||||
if(desno != NULL)
|
||||
najvec = desno->najvecji();
|
||||
|
||||
return najvec;
|
||||
}
|
||||
|
||||
double najmanjsi()
|
||||
{
|
||||
double najmanj = this->podatek;
|
||||
|
||||
if(levo != NULL)
|
||||
najmanj = levo->najmanjsi();
|
||||
|
||||
return najmanj;
|
||||
}
|
||||
|
||||
void premi_pregled(queue<double> &vrsta)
|
||||
{
|
||||
vrsta.push(podatek);
|
||||
if(levo != NULL)
|
||||
levo->premi_pregled(vrsta);
|
||||
|
||||
if(desno != NULL)
|
||||
desno->premi_pregled(vrsta);
|
||||
|
||||
}
|
||||
|
||||
void vmesni_pregled(queue<double> &vrsta)
|
||||
{
|
||||
|
||||
if(levo != NULL)
|
||||
levo->vmesni_pregled(vrsta);
|
||||
|
||||
vrsta.push(podatek);
|
||||
if(desno != NULL)
|
||||
desno->vmesni_pregled(vrsta);
|
||||
|
||||
}
|
||||
|
||||
void obratni_pregled(queue<double> &vrsta)
|
||||
{
|
||||
if(levo != NULL)
|
||||
levo->obratni_pregled(vrsta);
|
||||
|
||||
if(desno != NULL)
|
||||
desno->obratni_pregled(vrsta);
|
||||
|
||||
vrsta.push(podatek);
|
||||
}
|
||||
|
||||
bool iskanje(double stevilo)
|
||||
{
|
||||
if(stevilo == podatek)
|
||||
return true;
|
||||
|
||||
if (stevilo < podatek)
|
||||
{
|
||||
if (levo == NULL)
|
||||
return false;
|
||||
else
|
||||
return levo->iskanje(stevilo);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (desno == NULL)
|
||||
return false;
|
||||
else
|
||||
return desno->iskanje(stevilo);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
double vsota()
|
||||
{
|
||||
double stevilo = podatek;
|
||||
if(desno != NULL)
|
||||
stevilo += desno->vsota();
|
||||
|
||||
if(levo != NULL)
|
||||
stevilo += levo->vsota();
|
||||
|
||||
return stevilo;
|
||||
}
|
||||
};
|
||||
|
||||
// nadaljevanje razreda IskalnoDrevo
|
||||
Vozlisce *koren;
|
||||
|
||||
public:
|
||||
IskalnoDrevo()
|
||||
{
|
||||
koren = NULL;
|
||||
}
|
||||
|
||||
void vstavi(double podatek)
|
||||
{
|
||||
if (koren == NULL)
|
||||
koren = new Vozlisce(podatek);
|
||||
else
|
||||
koren->vstavi(podatek);
|
||||
}
|
||||
|
||||
int stevilo_vozlisc() const
|
||||
{
|
||||
if (koren == NULL)
|
||||
return 0;
|
||||
else
|
||||
return koren->stevilo_vozlisc();
|
||||
}
|
||||
|
||||
int visina_drevesa() const
|
||||
{
|
||||
if (koren == NULL)
|
||||
return 0;
|
||||
else
|
||||
return koren->visina_drevesa(1);
|
||||
}
|
||||
double najvecji() const
|
||||
{
|
||||
if (koren == NULL)
|
||||
return numeric_limits<double>::quiet_NaN();
|
||||
return koren->najvecji();
|
||||
}
|
||||
|
||||
double najmanjsi() const
|
||||
{
|
||||
if (koren == NULL)
|
||||
return numeric_limits<double>::quiet_NaN();
|
||||
return koren->najmanjsi();
|
||||
}
|
||||
|
||||
queue<double> premi_pregled() const
|
||||
{
|
||||
queue<double> prefiks;
|
||||
if (koren != NULL)
|
||||
koren->premi_pregled(prefiks);
|
||||
return prefiks;
|
||||
}
|
||||
|
||||
queue<double> vmesni_pregled() const
|
||||
{
|
||||
queue<double> infiks;
|
||||
if (koren != NULL)
|
||||
koren->vmesni_pregled(infiks);
|
||||
return infiks;
|
||||
}
|
||||
|
||||
queue<double> obratni_pregled() const
|
||||
{
|
||||
queue<double> postfiks;
|
||||
if (koren != NULL)
|
||||
koren->obratni_pregled(postfiks);
|
||||
return postfiks;
|
||||
}
|
||||
|
||||
bool iskanje(double stevilo) const
|
||||
{
|
||||
if (koren != NULL)
|
||||
return koren->iskanje(stevilo);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
double vsota() const
|
||||
{
|
||||
if (koren != NULL)
|
||||
return koren->vsota();
|
||||
|
||||
return numeric_limits<double>::quiet_NaN();
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argn, char **args)
|
||||
{
|
||||
double zaporedje[] = {5,2,8,10,4,6,1,12,-5,-3,-6,-8,7 };
|
||||
int dolzina = 13;
|
||||
|
||||
// ustvarimo nov objekt
|
||||
IskalnoDrevo id;
|
||||
|
||||
// napolnimo drevo
|
||||
for (int i = 0; i < dolzina; i++)
|
||||
id.vstavi((zaporedje[i]));
|
||||
|
||||
// pričakovan izhod
|
||||
double pricakovan_izhod = 7;
|
||||
|
||||
// dobljen izhod
|
||||
double dobljen_izhod = id.najvecji();
|
||||
|
||||
// preverimo, če dobimo pravilen izhod
|
||||
if (pricakovan_izhod == dobljen_izhod)
|
||||
cout << "OK" << endl;
|
||||
else
|
||||
cout << "Napaka! Pricakovan izhod: " << pricakovan_izhod << ", dobljen izhod: " << dobljen_izhod << endl;
|
||||
|
||||
|
||||
cout << "Stevilo vozlisc: " << id.stevilo_vozlisc() << "\n";
|
||||
|
||||
cout << "Najdi stevilo 2: " << (id.iskanje(2) ? "true" : "false") << "\n";
|
||||
cout << "Najdi stevilo 1: " << (id.iskanje(1) ? "true" : "false") << "\n";
|
||||
|
||||
cout << id.vsota() << endl;
|
||||
|
||||
cout << id.visina_drevesa() << endl;
|
||||
|
||||
queue<double> ha = id.premi_pregled();
|
||||
for (int i = 0; i < dolzina; ++i) {
|
||||
cout << ha.front() << " ";
|
||||
ha.pop();
|
||||
}
|
||||
cout << "\n";
|
||||
ha = id.vmesni_pregled();
|
||||
for (int i = 0; i < dolzina; ++i) {
|
||||
cout << ha.front() << " ";
|
||||
ha.pop();
|
||||
}
|
||||
cout << "\n";
|
||||
ha=id.obratni_pregled();
|
||||
for (int i = 0; i < dolzina; ++i) {
|
||||
cout << ha.front() << " ";
|
||||
ha.pop();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user