Ulančane liste

Download Report

Transcript Ulančane liste

UVOD
Tehnike za organizaciju, smeštanje i obradu podataka
predstavljaju osnovne elemente na kojima se grade
programski sistemi.
Algoritmi i strukture podataka čine dva osnovna gradivna
bloka za implementaciju programskih sistema.
Zato se za programe može reći da predstavljaju
konkretnu realizaciju apstraktnih algoritama,
primenjenih na implementiranim strukturama podataka.
Strukture podataka i algoritmi su veoma tesno povezani i
imaju jak međusobni uticaj, pa izbor strukture podataka
značajno utiče na izbor i efikasnos algoritma i obratno.
UVOD
Termin struktura podataka se koristi za opis načina
organizacije podataka, a termin algoritam za opis
načina obrade podataka.
Struktura podataka prethodi algoritmu, jer najpre
treba da postoji objekt da bi se nešto moglo raditi sa
njim.
Složenost strukture podataka ipak nije u direktnoj
zavisnosti sa složenošću algoritma.
Postoje složeni algoritmi sa vrlo prostim strukturama
i obratno.
UVOD
Predstavljanje algoritama u pseudokodu je način koji
omogućava povećan nivo apstrakcije potreban za
zanemarivanje raznih detalja nebitnih za razumevanje
logike rada, što doprinosi povećanju razumljivosti.
Računarski algoritam je precizno definisana
procedura realizovana konačnim skupom naredbi
koje izvršavaju određeni računarski zadatak.
Takav algoritam treba da zadovoljava sledeće zahteve:
UVOD
• najčešće ima jednu ili više ulaznih veličina,
• ima bar jednu izlaznu veličinu koja predstavlja
rezultat rada algoritma,
• značenje i funkcija svake naredbe treba da
budu jasni i nedvosmisleni,
• algoritam se mora završiti u konačnom vremenu,
• svaka naredba mora da bude dovoljno prosta tako
da se može ostvariti u konačnom vremenu i da
se može realizovati instrukcijama računara.
UVOD
Algoritam ima determinističko ponašanje, što znači da se
u istim uslovima ponaša na isti,predvidiv način i daje isti,
očekivani rezultat.
Za algitam se kaže da je korektan ako za svaku
kombinaciju ulaznih veličina proizvodi ispravan,
očekivani skup izlaznih veličina.
Algoritam predstavlja metod za rešavanje problema
pogodan za računarsku implementaciju i u najvećem
broju slučajeva je nezavistan od računara na kome će se
izvršavati.
Tako neki računarski algoritmi koriste metode razvijene i
pre pojave samih računara.
Konvencije pseudo-jezika
Specifikacija algoritma može biti izražena na različite
načine;
na primer: opisivanjem rečenicama prirodnog jezika, u
grafičkoj formi dijagrama toka ili u nekom programskom
Kod u pseudo-jeziku se može relativno jednostavno i
brzo prevesti u konkretan program.
Uvešćemo neke konvencije koje će karakterisati pseudojezik kojim ćemo pisati algoritme tokom ovog kursa:
Konvencije pseudo-jezika
On sadrži
• uobičajene kontrole strukture ciklusa
(while,repeat,for)
• osnovne selekcije if
• višestruke selekcije case
Semantika i sintaksa ovih kontrolnih struktura su iste kao
i u jeziku Pascal. Pored toga postoji i beskonačna petlja
loop
• Pored obične dodele vrednosti a=e ,postoji i višestruka
dodela vrednosti a=b=e
Konvencije pseudo-jezika
• Postoji naredba razmene vrednosti a b koja ima
semantiku sledeće sekvence: temp=a, a=b, b=temp
• Promenljive su najčešće lokalne za datu funkciju ili
proceduru ili globalne ako se to eksplicitno naglasi ili
ako njihova semantika očigledno ukazuje na to.
• Selekcija elementa niza se ostvaruje navođenjem
indeksa u uglastim zagradama iza imena niza,
na primer A[i].
• Simbol “ ..” se koristi za označavanje opsega
elemenata niza, na primer A[1..j] označava
elemente A[1],A[2]...A[j].
Konvencije pseudo-jezika
•
Pristup polju zapisa ukazanog pokazivačem se vrši
navođenjem imena polja iza koga ide ime pokazivača u
malim zagradama.
Na primer: Ako jedan objekat ima polja x i y ,a
na njega ukazuje pokazivač p ,ovim poljima se pristupa
sa x(p) i y(p)
• Pristup polju zapisa zadatog imenom se ostvaruje
navođenjem imena zapisa i tačke iza čega ide ime
polja.
Na primer: Polje x zapisa z se referencira kao z.x
Konvencije pseudo-jezika
•
Mehanizam prenosa parametara u potprogram je po
vrednosti i po referenci, mada to nije posebno
sintaksno naglašeno.
• Ako je potprogram funkcija,ona takođe vraća vrednost
dobijenu izračunavanjem izraza u naredbi return
• Rekurzija je dozvoljena
• U nekim slučajevima pseudo-jezik koristi neformalne
jezičke konstrukcije u engleskom jeziku, čije je
značenje očigledno iz prevoda i objašnjeno u tekstu.
(Pri prevođenju u realni program takve konstrukcije zahtevaju
dodatni stepen preciziranja i formalizacije (for each, find, itd.))
Konvencije pseudo-jezika
•
Velikim slovima su označeni pozivi ranije definisanih
ili pretpostavljenih funkcija ili procedura (na primer
ERROR, INPUT, OVERFLOW, itd)
• Komentari nisu uključeni, jer su algoritmi podrobno
objašnjeni u pratećem tekstu.
O strukturama podataka
Osnovna srha algoritama je da operišu sa nekim podacima
i vrše njihove transformacije.
Tako algoritmi i strukture podataka čine dva sastavna
elementa jedne celine koji nemaju mnogo smisla jedan
bez drugog.
Usvajanje struktura podataka je jedna od najvažnijih
projektnih odluka pri razvoju nekog programskog sistema i
usko je povezana sa operacijama koje nad podacima treba
izvršavati.
O strukturama podataka
Od načina modeliranja objekata prema strukturama
podataka i usvojenog načina njihove reprezentacije
u memoriji veoma zavisi preciznost, razumljivost i
efikasnost izvršavanja programa, kao i potreban memorijski
prostor.
Termin „struktura podataka“ izgleda intuitivno prilično
jasan, ali se retko daje njegova formalna definicija.
Zato se termini „tip podatka“, „apstraktni tip podatka“ i
„struktura podataka“ često koriste kao sinonimi mada im se
značenja donekle razlikuju.
Tip podataka
Tip podataka u programskom jeziku se obično vezuje za
skup vrednosti koje neki entitet (promenljiva,
konstanta, vraćena vrednost funkcije itd.) može da ima.
Tako logički tipmože da ima samo dve vrednosti „true“ i
„false“.
Za tip podataka su usko vezani i dozvoljeni operatori.
Drugim rečima,operatori obično zahtevaju da njihovi
operandi budu samo određenih tipova.
Elementarni ili primitivni tipovi su oni tipovi čiji objekti
imaju atomsku prirodu i ne mogu se razbiti na prostije
celine.
Tip podataka
Takvi tipovi se javljaju kao standardni,ugrađeni tipovi
programskog jezika: logički, znakovni, celobrojni, realni.
Ovi tipovi su direktno hardverski podržani ,što znači da
operacije sa njima odgovaraju mašinskim instrukcijama
samog procesora.
Apstraktni tip podataka (ATP) ide još dalje u smeru
povećanja stepena apstrakcije predstravljanja i obrade
podataka.
Pod apstraktnim tipom podataka se podrazumeva
matematički model sa skupom operacija koje korisnik na
tom modelu definiše.
Tip podataka
Primer: Korisnik može da uvede skup kao apstraktni tip
podataka sa operacijama unije, preseka, razlike,
komplementa nad kolekcijom skupova.
Da bi se specifikacija apstraktnog tipa podataka
implementirala potrebna je
struktura podataka, koja se gradi od osnovnih tipova
podataka u programskom jeziku kao gradivnih elemenata
korišćenjem raspoloživih načina strukturiranja za njihovo
povezivanje.
Strukture podataka su skupovi elemenata istog ili
različitog tipa povezani na različite načine.
Tip podataka
Dva osnovna načina agregacije elemenata u
programskim jezicima koja omogućavaju objedinjavanje
logički povezanih elemenata i njihovo tretiranje kao
kompaktne celine su nizovi(arrays) i zapisi (records).
Objedinjavanjem više elemenata u niz ili zapis nastaje
struktura koja dalje može da se kombinuje sa objektima
istog ili raličitog tipa dajući strukture proizvoljne
složenosti.
Elementi niza nemaju posebna imena već im se pristupa
na osnovu indeksa – njihove pozicije u nizu.
Tip podataka
Zapis je konačan skup elemenata koji mogu biti različitog
tipa,a tretiraju se kao jedna celina.
Za razliku od niza koji je homogena ,zapis je nehomogena
struktura.
Elementu u zapisu se nazivaju polja i imaju svoja imena
preko kojih im se može pojedinačno pristupati.
Polja u zapisu obično čine jednu logičnu celinu.
Pored toga što su elementi zapisa logički povezani, oni i
fizički predstavljaju jednu celinu, jer se zapis obično
alocira u kontinualnom prostoru tako što se polja ređaju
jedno za drugim.
Klasifikacija struktura podataka
Osnovna podela struktura podataka zasniva se na
kriterijumu međusobnih relacija i veza elemenata u
strukturi.
U koliko je jedan element strukture u relaciji samo sa dva
druga elementa strukture (prethodnikom i sledbenikom),
onda se radi o linearnoj strukturi.
Ako su međusobni odnosi između elemenata složeniji, tj.
jedan element može biti u vezi sa više drugih elemenata
strukture, onda je reč o nelinearnoj strukturi.
Linerne strukture: niz, ulančana lista, stek, red
Nelinerne strukture: stablo, graf
Klasifikacija struktura podataka
Kriterijum za drugu podelu je mogućnost promene veličine
strukture pri izvršavanju.
Po ovom kriterijumu strukture se dele na statičke i
dinamičke.
Statičke strukture imaju fiksnu veličinu koja se određuje
pri prevođenju.
Dinamičke strukture mogu da se povećavaju ili smanjuju u
vreme izvršavanja programa saglasno potrebama za
umetanjem novih elemenata ili brisanjem postojećih.
Tako se zauzima onoliko memorijskog prostora koliko je
stvarno potrebno, pa se memorija efikasnije koristi.
Klasifikacija struktura podataka
Strukture podataka koje se čuvaju na spoljašnjim
memorijama nazivaju se datotekama.
Osnovni element datoteke je najčešće zapis.
Fizička uređenost zapisa u datoteci i skup operacija za
pristup zapisima određuje način organizacije datoteke.
Tako se razlikuju: sekvencijalne, relativne, indeksno
sekvencijalne i datoteke sa više ključeva.
Memorijska reprezentacija strukture podataka u memoriji
se često naziva memorijskom strukturom.
Na osnovu fizičkog i logičkog rasporeda elemenata
strukture u memoriji mogu se razlikovati dva osnovna
načina predstavljanja:
Klasifikacija struktura podataka
• Sekvencijalna (kontinualna) reprezentacija i
• Ulančana (spregnuta,nekontinualna) reprezentacija
Kod sekvencijalne reprezentacije elementi strukture se
smeštaju jedan za drugim u jednom kontinualnom
prostoru tako da su fizički i logički poredak isti.
Jedan element zavisno od svoje veličine može smeštati
u jednu memorijsku lokaciju ili više uzastopnih lokacija, a
elementi mogu biti istog ili različitog tipa i veličine.
Pristup svakom elementu, je direktan i zahteva poznavanje
početne adrese strukture, pozicija i veličina pojedinih
elemenata. Ovako se najčešće u memoriji predstavljaju
linearne strukture (nizovi).
Klasifikacija struktura podataka
Kod ulančane reprezentacije elementi su raspoređeni u
nekontinualnom prostoru, na proizvoljnim mestima u
memoriji, a njihov fizički poredak nema nikakve veze sa
logičkim poretkom.
Pošto ovde logičko susedstvo ne može biti određeno
pozicijom elementa, mora da postoji drugi način da se
izraze veze elemenata u strukturi.
Za tu svrhu služi pokazivački tip – elementarni tip čiji skup
vrednosti sadrži memorijske adrese.
Klasifikacija struktura podataka
Pokazivači su promenjljive koje sadrže adrese drugih
promenljivih u memoriji, pa zato i svaki element strukture
uključuje i jedan ili više pokazivača koji sadrže adrese
njegovih logičkih suseda.
Primer: U dvostruko ulančanoj listi svaki element ima dva
pokazivača, na svog prethodnika i sledbenika u listi.
Poređenje sekvencijalne i ulančane reprezentacije u
pogledu iskorišćenja prostora i brzine pristupa pokazuje da
obe imaju svoje prednosti i nedostatke.