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++