linearne strukture
DESCRIPTION
Linearne strukture. Polja jednodimenzionalna (nizovi, vektori) dvodimenzionalna (matrice) višedimenzionalna (tenzori višeg reda) Povezani popis Stogovi Redovi. Osnovni pojmovi. Kako bi se upoznali sa strukturom podataka povezani popis, moramo objasniti: - PowerPoint PPT PresentationTRANSCRIPT
Linearne strukture
Polja
jednodimenzionalna (nizovi, vektori)
dvodimenzionalna (matrice)
višedimenzionalna (tenzori višeg reda)
Povezani popis
Stogovi
Redovi
Osnovni pojmovi
Kako bi se upoznali sa strukturom podataka povezani popis, moramo objasniti:
- dinamičko zauzimanje (alociranje) memorije
- memorijska adresa (pokazivač) kao tip podataka
- formiranje struktura podataka
Dinamičko zauzimanje memorije (1/2)
Do sada nam je pozant statički način. (Primjer C naredbe: float V[1000];)
Zauzimanje memorije za nizove podataka proširujemo mogućnošću dinamičkog alociranja (zauzimanja) i oslobađanja memorije.
Dinamičko zauzimanje memorije (2/2)
Primjer u C-u funkcije iz stdlib.h malloc(…) i free(…), Isto tako u C++ operatori new i delete.
float V[1000];
float *V;V=(float *)malloc(1000*sizeof(float));
.
.
.
free(V);
Pokazivači (1/2)
Memorija računala je linearna i Byte-no orjentirana, tj. svaki Byte u memoriji ima svoju adresu.
Sama memorijska adresa (pokazivač, eng. pointer) se može gledati kao poseban tip podataka koji može imati vrijednosti od prve adrese (to je 0) do neke najveće vrijednosti zadnje lokacije u memoriji. Znači to je cijeli broj bez predznaka kojeg najčešće prikazujemo u heksadecimalnom sustavu.
!!! Svako ime varijable u nekom višem programskom jeziku predstavlja jednu memorijsku adresu !!!
Pokazivači (2/2)
Mi ćemo memorijsku adresu koristiti kao još jedan elementarni tip podataka.
Uvijek ćemo ju koristiti tako da joj pridjeljujemo vrijednost neke druge varijable koja je isto memorijska adresa ili ćemo takvim varijablama (koje su memorijske adrese) pridjeliti vrijednost novog dijela memorije kojeg smo zauzeli dinamičkim alociranjem.
Osim ova dva načina u memorijsku adresu možemo zapisati i vrijednost NULL. Ta konstanta predstavlja “nepostojeću” memorijsku adresu
Struktura podataka jest skup od dva ili više elementarnihtipova podataka ili već prije definiranih struktura podataka.Znači, dopuštena je ugnježdenost struktura, tj. da jednastruktura bude član druge strukture podataka.
Primjer strukture podataka “Student”: Ime
Prezime
BrIndeksa
Prosjek
Niz znakova
Niz znakova
Cjelobrojni tip
Realni tip}Elementarni
tipovipodataka, ilisloženije strukture
Strukture podataka (1/3)
Pojedinim elementima strukture podataka pristupa se koristećioperator “.”. Ako bi koristili strukturu S koja je tipa “Student” iz prethodnog primjera, onda su njeni članovi:S.Ime S.Prezime S.BrIndeksa S.Prosjek
Primjer strukture podataka “Predmet”:
Ime
Predavač
Studenti
BrSati
Niz znakova
Niz znakova
Niz struktura “Student”
Cjelobrojni tip
Cjelobrojni tipECTS
Strukture podataka (2/3)
Strukture podataka (3/3)
Ako bi koristili strukturu P koja je tipa “Predmet” iz prethodnog primjera, onda možemo• postaviti ECTS bodove predmata sa P.ECTS = 9• postaviti Ime predmeta sa P.Ime = “Strukture podatak i algoritmi”• postaviti Prezime 14. Studenta koji sluša predmet sa P.Studenti14.Prezime = “Perić”
Povezani popis (engl. Linked List) je dinamička struktura. Elementi popisa (zapisi) se stavljaju u slobodni dio memorije, a kada pojedini zapis ili cijeli popis više nije potreban, zauzeti dio memorije se oslobađa. Elementi su međusobno povezani adresnim podacima - pokazivačima (engl. Pointer).
Pokazivači na idući zapis
Prvi
Zapis 1Zapis 2
Zapis 3
PodaciPodaci Podaci
Osnovni element povezanog popisa
Definicija povezanog popisa (1/2)
Osnovni element povezanog popisa se sastoji iz 2 dijela:• x - dio s podacima (bilo kakvi elementarni tipovi)• sljedeci - memorijska adresa koja pokazuje idući osnovni element u memoriji
Koristiti operator “točkica”! Neka je o osnovni element povezanog popisao.x - ovako pristupamo dijelu s podatkomo.sljedeci - ovako pristupamo mem. adresi na idućeg
Osim osnovnog elementa koristit ćemo još jednu varijalu prvi koja nam je jedina poznata i predstavlja početak povezanog popisa.prvi je memorijska adresa. prvi = NULL znači da je povezani popis prazan.
Definicija povezanog popisa (2/2)
Formiranje povezanog popisa (1/2)
ZADANO: pokazivač prvi i definicija osnovnog elementa p.p.podaci se učitavaju
TRAŽI SE: Formirati povezani popis s podacima koji se učitavaju
Možemo dodavati svaki novi podatak na kraj popisa, a možemo novog dodavati i na početak povezanog popisa.
Formiranje povezanog popisa (2/2)Algoritam KREIRANJE POVEZANOG POPISA, NOVI ELEMENT NA POČETAK POPISA
prvi=NULLPonavljati
Učitati y Ako je kraj učitanih podataka završiti algoritam
novi = nova adresa u dinamičkoj memorijinovi.x = ynovi.sljedeci = prvi prvi = novi
Problem obilaska povezanog popisa
Algoritam OBILAZAK POVEZANOG POPISA
trenutni = prviSve dok je trenutni NULL činiti
Ispisati trenutni.xtrenutni= trenutni.sljedeci
ZADANO: pokazivač prvi i definicija osnovnog elementa p.p.popis je popunjen s elementima
TRAŽI SE: ispisati sve elemente popisa
Povezani popis s pokazivačima na početak i na kraj popisa
Zapis 1 Zapis 2 ... Zapis n
PodaciPodaci PodaciPodaci
prvi zadnji
NULL
Dvostruko povezani popis
Zapis 1 Zapis 2 ... Zapis n
PodaciPodaci PodaciPodaci
prvi zadnji
Osnovni element kod dvostruko povezanog popisa sadrži tri komponente: x - dio s podacima
prethodni - memorijska adresa, pokazivač na prethodni zapis
sljedeci - memorijska adresa, pokazivač na sljedeći zapis
NULL NULL
n – broj elemenata u nizu i u povezanom popisu
Niz Povezani popisObilazaksvih elemenata O(n) O(n)
Pristup elementu O(1) O(n)Umetanje elementa O(n) O(1)Brisanje elementa O(n) O(1)Zauzeće memorije O(n) O(n)Iskoristivost samo potpunaslobodne memorije neprekinuti
niz slobodnememorije
Niz vs. Povezani popis
Problem sortiranja (kod povezanih popisa)
ZADANO: Niz V od N elemenataTRAŽI SE: Formirati povezani popis u kojem će elementi biti
poredani (sortirani) Elemente uzimati redom iz niza V
- podatke iz niza V dodavati kao kod formiranja povezanog popisa, ali ne stavljati nove na početak ni na kraj, već točno na određeno mjesto!
Algoritam INSERT SORT
prvi=NULLZa svaki i=1 do N činiti
N = novi osnovni element (dinamičko alociranje)N.x = Vi
Ako je prvi = NULL onda /* samo kod dodavanja prvog elementa */N.sljedeci = NULLprvi = N
U suprotnom /* za svaki sljedeći podatak */T = prviAko je N.x<T.x onda /* ako treba novog dodati na početak */
N.sljedeci=prviprvi=N
U suprotnom /* pretražiti gdje treba ubaciti novog */ Ponavljati
P = TT = T.sljedeciAko je T=NULL ili N.x<T.x onda prekinuti ponavlj.
P.sljedeci = N N.sljedeci = T
Analiza algoritma INSERT SORT
U algoritmu koristimo pokazivače na osnovnog elementa N, P i T.N – koristimo za novog osnovnog elementa kojeg kreiramo na dinamički način;P – koristimo kao adresu prethodnog zapisa kada pretražujemo povezani popis;T – koristimo kao trenutačnu adresu prilikom istog pretraživanja.
Vremenska složenost algoritma jeste O(N2)