Linearne strukture

20
Linearne strukture Polja jednodimenzionalna (nizovi, vektori) dvodimenzionalna (matrice) višedimenzionalna (tenzori višeg reda) Povezani popis Stogovi Redovi

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 Presentation

Transcript of Linearne strukture

Page 1: Linearne strukture

Linearne strukture

Polja

jednodimenzionalna (nizovi, vektori)

dvodimenzionalna (matrice)

višedimenzionalna (tenzori višeg reda)

Povezani popis

Stogovi

Redovi

Page 2: Linearne strukture

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

Page 3: Linearne strukture

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.

Page 4: Linearne strukture

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);

Page 5: Linearne strukture

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

Page 6: Linearne strukture

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

Page 7: Linearne strukture

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)

Page 8: Linearne strukture

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)

Page 9: Linearne strukture

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ć”

Page 10: Linearne strukture

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)

Page 11: Linearne strukture

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)

Page 12: Linearne strukture

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.

Page 13: Linearne strukture

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

Page 14: Linearne strukture

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

Page 15: Linearne strukture

Povezani popis s pokazivačima na početak i na kraj popisa

Zapis 1 Zapis 2 ... Zapis n

PodaciPodaci PodaciPodaci

prvi zadnji

NULL

Page 16: Linearne strukture

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

Page 17: Linearne strukture

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

Page 18: Linearne strukture

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!

Page 19: Linearne strukture

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

Page 20: Linearne strukture

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)