Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Osnovne Funkcije povezane liste
- #include <iostream>
- #include "HeaderOsnovneFunkcijePP.h"
- Data* kreirajListu(int n)
- {
- Data* t = NULL;
- Data* h = NULL;
- for (int i = 0; i < n; i++)
- {
- if (i == 0)
- {
- h = new Data;
- t = h;
- }
- else
- {
- t->next = new Data;
- t = t->next;
- }
- t->x = i;
- }
- t->next = NULL;
- return h;
- }
- void printListu(Data* head)
- {
- Data* t = head;
- while (t != NULL)
- {
- std::cout << t->x << " ";
- t = t->next;
- }
- std::cout << std::endl;
- }
- void dodajNakraj(Data* head, int x)
- {
- Data* t = head;
- while (t->next != NULL)t = t->next;
- t->next = new Data;
- t = t->next;
- t->x = x;
- t->next = NULL;
- }
- void obrisiSKraja(Data* head)
- {
- Data* t = head;
- Data* temp = NULL;
- while (t->next->next != NULL)t = t->next;
- temp = t->next;
- free(temp);
- t->next = NULL;
- }
- double aritmetickaSredina(Data* head)
- {
- double as = 0;
- int counter(0);
- Data* t = head;
- while (t != NULL)
- {
- counter++;
- as += t->x;
- t = t->next;
- }
- return as /= counter;
- }
- void ubaciElement(Data* head, int index, int x)
- {
- Data* t = head;
- Data* temp = NULL;
- int counter(0);
- while (true)
- {
- counter++;
- if (counter == index + 1)break;
- t = t->next;
- }
- Data* novi = new Data;
- novi->x = x;
- novi->next = t->next;
- t->next = novi;
- }
- void Sortiraj(Data* head)
- {
- Data* t1 = head;
- Data* t2 = NULL;
- for (t1; t1 != NULL; t1 = t1->next)
- {
- for (t2 = t1->next; t2 != NULL; t2 = t2->next)
- {
- if (t1->x > t2->x)Zamjeni(&t1->x, &t2->x);
- }
- }
- }
- void Zamjeni(int* d1, int* d2)
- {
- int temp = *d1;
- *d1 = *d2;
- *d2 = temp;
- }
- ////////////////////////////////////////////////////////ZADACI
- #include <iostream>
- #include "HeaderOsnovneFunkcijePP.h"
- //Zadatak 1
- //Neka su zadana dva jednostruko povezana popisa s vise podataka.
- //Potrebno je napisati implementaciju funkcije u C++ jeziku koja spaja ta dva povezana popisa
- //na nacin da na kraj prvog doda drugi, s tim da pocetak dodavanja drugog mora početi parnim brojem.
- //Rjesenje: 1. naci kraj prve liste
- // 2. naci prvi parni broj drugog
- // 3. spojiti liste
- //1.
- Data* vratiZadnjiElement(Data* head)
- {
- Data* t = head;
- while (t->next != NULL)
- t = t->next;
- return t;
- }
- //2.
- Data* vratiAdresuPrvogParnog(Data* head)
- {
- Data* t = head;
- while (t != NULL)
- {
- if (t->x % 2 == 0)return t;
- t = t->next;
- }
- return t;
- }
- //3.
- void spoji_t1_t2(Data* t1, Data* t2)
- {
- Data* temp1 = t1;
- while (temp1->next != NULL)temp1 = temp1 -> next;
- temp1->next=t2;
- }
- //Test
- int main()
- {
- Data* lista1 = kreirajListu(10);
- Data* lista2 = kreirajListu(5);
- printListu(lista1);
- printListu(lista2);
- spoji_t1_t2(vratiZadnjiElement(lista1), vratiAdresuPrvogParnog(lista2));
- printListu(lista1);
- }
- ///////////////////////////////////////////////////////////////////ZADATAK 2
- #include <iostream>
- #include "HeaderOsnovneFunkcijePP.h";
- //Zadatak 2
- /*Neka su zadana dva povezana popisa P1 i P2 koji se sastoje od osnovnog elementa koji ima podatak X
- i pokazivača na sljedeći takav element NEXT. Također postoji i pokazivač FIRST na prvi element povezanog popisa.
- Svi elementi liste su zadani, zadnji element u listi ima vrijednost sljedećeg (NEXT) jednaku NULL.
- Dati algoritam koji će izračunati i ispisati:
- a) Koliko ima elemenata povezanog popisa.
- b) Koja je srednja vrijednost povezanog popisa.
- c) Koliko ima negativnih elemenata u povezanom popisu.
- d) Koliko ima pozitivnih elemenata većih od srednje vrijednosti u povezanom popisu.
- e) Svi elementi pozitivni elementi koji su veći od srednje vrijednosti u P1 dodati na kraj P2.
- Ukoliko nema takvih elemenata dodati element s vrijednosti X = 0 na početak liste P2. Isto vrijedi i za listu P2.*/
- //a)
- int vratiBrojElemenata(Data* head)
- {
- int counter(0);
- Data* t = head;
- while (t != NULL)
- {
- counter++;
- t = t->next;
- }
- return counter;
- }
- //b)
- double vratiAS(Data* head)
- {
- double as(0);
- int counter(0);
- Data* t = head;
- while (t != NULL)
- {
- counter++;
- as += counter;
- t = t->next;
- }
- return as /= counter;
- }
- //c)
- int vratiCounterNegativnih(Data* head)
- {
- int counter(0);
- Data* t = head;
- while (t != NULL)
- {
- if (t->x < 0)counter++;
- t = t->next;
- }
- return counter;
- }
- //d)
- int vratiCounterVecihOdAs(Data * head, double as)
- {
- int counter(0);
- Data* t = head;
- while (t != NULL)
- {
- if (static_cast<double>(t->x) > as)counter++;
- t = t->next;
- }
- return counter;
- }
- //e)
- void eFunkcija(Data* P1, Data* P2)
- {
- if (vratiCounterVecihOdAs(P1,vratiAS(P1)) == 0) //ako nema brojeva u P1 vecih od AS-a
- {
- Data* p1_novi = new Data; //dodajemo novi element na pocetak prve liste
- p1_novi->x = 0;
- p1_novi->next = P1;
- P1 = p1_novi;
- Data* p2_novi = new Data; //dodajemo novi element na pocetak druge liste
- p2_novi->x = 0;
- p2_novi->next = P2;
- P2 = p1_novi;
- }
- else // ako ima
- {
- //nalazimo kraj druge liste
- Data* temp2 = P2;
- while (temp2->next != NULL)temp2 = temp2->next;
- double as = vratiAS(P1);
- //prolazimo kroz prvu listu i za uspoređujemo iznos sa as-om i ak je veci dodajemo na kraj p2
- Data* temp1 = P1;
- while (temp1 != NULL)
- {
- if (static_cast<double>(temp1->x) > as)
- {
- temp2->next = temp1;
- temp2 = temp2->next;
- //*UPOZORENJE*: mozda ste u iskusenju staviti temp2->next = NULL
- //Ali s tim bi promjenili temp1 indirektno na NULL
- }
- temp1 = temp1->next;
- }
- }
- }
- //TEST
- int main()
- {
- Data* P1 = kreirajListu(10);
- Data* P2 = kreirajListu(6);
- std::cout << "P1: "; printListu(P1);
- std::cout << "P2: "; printListu(P2);
- //a)
- std::cout << "a)" << std::endl;
- std::cout << "Broj elemenata prve liste: " << vratiBrojElemenata(P1) << std::endl;
- std::cout << "Broj elemenata druge liste: " << vratiBrojElemenata(P2)<<std::endl;
- std::cout << std::endl;
- //b)
- std::cout << "b)" << std::endl;
- std::cout << "Srednja vrijednost prve liste: " << vratiAS(P1) << std::endl;
- std::cout << "Srednja vrijednost druge liste: " << vratiAS(P2) << std::endl;
- std::cout << std::endl;
- //c)
- std::cout << "c)" << std::endl;
- std::cout << "Broj negativnih elemenata prve liste: " << vratiCounterNegativnih(P1) << std::endl;
- std::cout << "Broj negativnih elemenata druge liste: " << vratiCounterNegativnih(P2) << std::endl;
- std::cout << std::endl;
- //d)
- std::cout << "d)" << std::endl;
- std::cout << "Broj elemenata vecih od AS prve liste: " << vratiCounterVecihOdAs(P1,vratiAS(P1)) << std::endl;
- std::cout << "Broj elemenata vecih od AS druge liste: " << vratiCounterVecihOdAs(P2,vratiAS(P2)) << std::endl;
- std::cout << std::endl;
- //e)
- std::cout << "e)" << std::endl;
- eFunkcija(P1, P2);
- printListu(P2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement