Revision: 60760
Updated Code
at November 20, 2012 05:57 by petzadro
Updated Code
struct List {
zivotinja value;
List* next;
};
typedef List Lista;
typedef List* element;
element FirstL(Lista *L) {
return L;
}
element EndL(Lista *L) {
while(L->next != NULL) {
L = L->next;
}
return L;
}
element NextL(element P, Lista *L) {
return P->next;
}
element PreviousL(element P, Lista *L) {
while(L->next != P) {
L = L->next;
}
return L;
}
element LocateL(zivotinja X, Lista *L) {
while (L->next->value.sifra != X.sifra) {
L = L->next;
}
return L;
}
bool InsertL(zivotinja X, element P, Lista *L) {
element n = new Lista;
n->value = X;
n->next = P->next;
P->next = n;
return true;
}
void DeleteL(element P, Lista *L) {
element del = P->next;
P->next = del->next;
delete del;
}
zivotinja RetrieveL(element P, Lista *L) {
return P->next->value;
}
void DeleteAll(Lista *L){
element del = L->next;
while (del != NULL) {
L->next = del->next;
delete del;
del = L->next;
}
}
void InitL(Lista *L) {
L->next = NULL;
}
Revision: 60759
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 12, 2012 08:49 by petzadro
Initial Code
#include <iostream>
#include <string>
using namespace std;
int sifra;
struct zivotinja {
int sifra, cijena;
string naziv, vrsta;
long int datum;
};
#include "lista_pokazivac.h"
int funkcija_dodaj(Lista *zivotinje) {
cout << "Unos podataka za novu zivotinju." << endl;
zivotinja nova;
nova.sifra = sifra++;
cout << "Vrsta: " << endl;
cin >> nova.vrsta;
cout << "Naziv: " << endl;
cin >> nova.naziv;
cout << "Cijena: " << endl;
cin >> nova.cijena;
cout << "Datum: " << endl;
cin >> nova.datum;
if (InsertL(nova, EndL(zivotinje), zivotinje)) {
return 1;
}
else {
return 0;
}
}
void funkcija_ispis(Lista *zivotinje) {
element tekuci = EndL(zivotinje);
zivotinja z;
cout << "Ispis zivotinja od najvece sifre." << endl;
do {
tekuci = PreviousL(tekuci, zivotinje);
z = RetrieveL(tekuci, zivotinje);
cout << "Sifra: " << z.sifra << ", vrsta: " << z.vrsta;
cout << ", naziv: " << z.naziv << ", cijena: " << z.cijena;
cout << ", datum: " << z.datum << endl << endl;
} while (tekuci != FirstL(zivotinje));
cout << "Ispis zavrsen." << endl;
}
int funkcija_brisi_naziv(Lista *zivotinje) {
cout << "Naziv za brisanje: ";
string unos;
cin >> unos;
int brisanje = 0;
element tekuci; zivotinja z;
tekuci = FirstL(zivotinje);
while (tekuci != EndL(zivotinje)) {
z = RetrieveL(tekuci, zivotinje);
if (z.naziv == naz) {
brisanje = 1;
DeleteL(tekuci, zivotinje);
}
else {
tekuci = NextL(tekuci, zivotinje);
}
}
return brisanje;
}
int funkcija_brisi_vrsta(Lista *zivotinje) {
cout << "Vrsta za brisanje: ";
string unos;
cin >> unos;
int brisanje = 0;
element tekuci; zivotinja z;
tekuci = FirstL(zivotinje);
while (tekuci != EndL(zivotinje)) {
z = RetrieveL(tekuci, zivotinje);
if (z.vrsta == unos) {
brisanje = 1;
DeleteL(tekuci, zivotinje);
}
else {
tekuci = NextL(tekuci, zivotinje);
}
}
return brisanje;
}
void funkcija_trazi_datum(Lista *zivotinje) {
element tekuci;
tekuci = FirstL(zivotinje);
zivotinja z;
cout << "Trazimo zivotinje novije 20120923." << endl;
while (tekuci != EndL(zivotinje)) {
z = RetrieveL(tekuci, zivotinje);
if (z.datum > 20120923) {
cout << "Sifra: " << z.sifra << ", vrsta: " << z.vrsta;
cout << ", naziv: " << z.naziv << ", cijena: " << z.cijena;
cout << ", datum: " << z.datum << endl << endl;
}
tekuci = NextL(tekuci, zivotinje);
}
cout << "Trazenje gotovo." << endl;
}
void merge_sort_cijena(zivotinja polje[], int lijevi, int desni) {
int sredina = (lijevi + desni) / 2;
zivotinja temp;
if (desni - lijevi == 1) {
if (polje[desni].cijena > polje[lijevi].cijena) {
temp = polje[desni];
polje[desni] = polje[lijevi];
polje[lijevi] = temp;
return;
}
}
else if (desni == lijevi) {
return;
}
else {
merge_sort_cijena(polje, lijevi, sredina);
merge_sort_cijena(polje, sredina +1, desni);
int size_pomocno = desni-lijevi +1;
zivotinja *polje_pomocno = new zivotinja[size_pomocno];
int l = lijevi;
int s = sredina +1;
for (int i = 0; i < size_pomocno; i++) {
if (l == sredina+1) {
polje_pomocno[i] = polje[s]; s++;
continue;
}
if (s == desni +1) {
polje_pomocno[i] = polje[l]; l++;
continue;
}
if (polje[l].cijena > polje[s].cijena) {
polje_pomocno[i] = polje[l];
l++;
}
else {
polje_pomocno[i] = polje[s];
s++;
}
}
int j = 0;
for (int i = lijevi; i <= desni; i++) {
polje[i] = polje_pomocno[j]; j++;
}
}
}
void merge_sort_naziv(zivotinja polje[], int lijevi, int desni) {
int sredina = (lijevi + desni) / 2;
zivotinja temp;
if (desni - lijevi == 1) {
if (polje[desni].naziv > polje[lijevi].naziv) {
temp = polje[desni];
polje[desni] = polje[lijevi];
polje[lijevi] = temp;
return;
}
}
else if (desni == lijevi) {
return;
}
else {
merge_sort_naziv(polje, lijevi, sredina);
merge_sort_naziv(polje, sredina +1, desni);
int size_pomocno = desni-lijevi +1;
zivotinja *polje_pomocno = new zivotinja[size_pomocno];
int l = lijevi;
int s = sredina +1;
for (int i = 0; i < size_pomocno; i++) {
if (l == sredina+1) {
polje_pomocno[i] = polje[s]; s++;
continue;
}
if (s == desni +1) {
polje_pomocno[i] = polje[l]; l++;
continue;
}
if (polje[l].naziv > polje[s].naziv) {
polje_pomocno[i] = polje[l];
l++;
}
else {
polje_pomocno[i] = polje[s];
s++;
}
}
int j = 0;
for (int i = lijevi; i <= desni; i++) {
polje[i] = polje_pomocno[j]; j++;
}
}
}
void funkcija_sortiraj_cjenovno(Lista *zivotinje) {
cout << "Sortiramo po cijeni." << endl;
int broj = 0;
element tekuci; zivotinja z;
tekuci = FirstL(zivotinje);
while (tekuci != EndL(zivotinje)) {
broj++; tekuci = NextL(tekuci, zivotinje);
}
zivotinja *polje = new zivotinja[broj];
tekuci = FirstL(zivotinje);
for (int i = 0; i < broj; i++) {
z = RetrieveL(tekuci, zivotinje);
polje[i] = z;
tekuci = NextL(tekuci, zivotinje);
}
merge_sort_cijena(polje, 0, broj-1);
for (int i = 0; i < broj; i++) {
cout << "Sifra: " << polje[i].sifra << ", vrsta: " << polje[i].vrsta;
cout << ", naziv: " << polje[i].naziv << ", cijena: " << polje[i].cijena;
cout << ", datum: " << polje[i].datum << endl << endl;
}
}
void funkcija_sortiraj_nazivom(Lista *zivotinje) {
cout << "Sortiramo po nazivu." << endl;
int broj = 0;
element tekuci; zivotinja z;
tekuci = FirstL(zivotinje);
while (tekuci != EndL(zivotinje)) {
broj++; tekuci = NextL(tekuci, zivotinje);
}
zivotinja *polje = new zivotinja[broj];
tekuci = FirstL(zivotinje);
for (int i = 0; i < broj; i++) {
z = RetrieveL(tekuci, zivotinje);
polje[i] = z;
tekuci = NextL(tekuci, zivotinje);
}
merge_sort_naziv(polje, 0, broj-1);
for (int i = 0; i < broj; i++) {
cout << "Sifra: " << polje[i].sifra << ", vrsta: " << polje[i].vrsta;
cout << ", naziv: " << polje[i].naziv << ", cijena: " << polje[i].cijena;
cout << ", datum: " << polje[i].datum << endl << endl;
}
}
int main() {
Lista zivotinje;
InitL(&zivotinje);
sifra = 1;
zivotinja ziv;
ziv.sifra = sifra++;
ziv.datum = 20121001;
ziv.cijena = 100;
ziv.vrsta = "pas";
ziv.naziv = "ovcar";
InsertL(ziv, EndL(&zivotinje), &zivotinje);
ziv.sifra = sifra++;
ziv.datum = 20121101;
ziv.cijena = 1000;
ziv.vrsta = "pas";
ziv.naziv = "buldog";
InsertL(ziv, EndL(&zivotinje), &zivotinje);
ziv.sifra = sifra++;
ziv.datum = 20111101;
ziv.cijena = 50;
ziv.vrsta = "pas";
ziv.naziv = "mjesanac";
InsertL(ziv, EndL(&zivotinje), &zivotinje);
ziv.sifra = sifra++;
ziv.datum = 20101111;
ziv.cijena = 300;
ziv.vrsta = "macka";
ziv.naziv = "perzijska";
InsertL(ziv, EndL(&zivotinje), &zivotinje);
ziv.sifra = sifra++;
ziv.datum = 20121223;
ziv.cijena = 250;
ziv.vrsta = "macka";
ziv.naziv = "bobcat";
InsertL(ziv, EndL(&zivotinje), &zivotinje);
funkcija_ispis(&zivotinje);
funkcija_dodaj(&zivotinje);
funkcija_ispis(&zivotinje);
funkcija_trazi_datum(&zivotinje);
funkcija_brisi_naziv(&zivotinje);
funkcija_ispis(&zivotinje);
funkcija_brisi_vrsta(&zivotinje);
funkcija_ispis(&zivotinje);
funkcija_sortiraj_cjenovno(&zivotinje);
funkcija_sortiraj_nazivom(&zivotinje);
system("pause");
return 0;
}
Initial URL
Initial Description
U ovoj biblioteci su definirane funkcije za operacije nad listom, ali se, za razliku od prethodne biblioteke, ovdje koriste pokazivaÄi kojima se implementira tzv. vezana lista.
Initial Title
Biblioteka lista_pokazivaci.h
Initial Tags
Initial Language
C++