24
Algoritmi i strukture podataka Tema: Ulančane liste Profesor : Student :

Ulančane liste-Algoritmi

Embed Size (px)

DESCRIPTION

Algoritmi i strukture podataka. Ulančane liste

Citation preview

Page 1: Ulančane liste-Algoritmi

Algoritmi i strukture podataka

Tema: Ulančane liste

Profesor : Student :

Page 2: Ulančane liste-Algoritmi

Sadržaj:

Sadržaj:....................................................................................................................................................................1

Uvod..........................................................................................................................................................................3

Konvencije pseudojezika........................................................................................................................................4

O strukturama podataka........................................................................................................................................5

Klasifikacija struktura podataka..........................................................................................................................6

Memorijska reprezentacija...................................................................................................................................6

Operacije sa strukturama podataka.....................................................................................................................7

Linearne strukture podataka.................................................................................................................................7

Ulančane liste...........................................................................................................................................................8

Dinamička alokacija.............................................................................................................................................8

Operacije sa jednostruko ulančanim listama.......................................................................................................9

Umetanje u listu....................................................................................................................................................9

Brisanje..............................................................................................................................................................10

Pretraživanje......................................................................................................................................................11

Ostale operacije.................................................................................................................................................12

Operacije sa kružnim ulančanim listama...........................................................................................................13

Operacije sa dvostruko ulančanim listama.........................................................................................................14

Zaključak...............................................................................................................................................................16

Literatura:................................................................................................................................................................17

2

Page 3: Ulančane liste-Algoritmi

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 specifično 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.U najopštijem smislu termin struktura podataka se koristi za opis načina organizacije podataka,a termin algoritam za opis načina obrade podataka. U izvesnom smislu ,struktura podataka prethodi algoritmu,jer prvo treba da postoji objekt da bi se nešto s njim moglo raditi.Složenost strukture podataka ipak nije u direktnoj zavisnosti.Postoje složeni algoritmi sa vrlo prostim strukturama i obratno.

Algoritmi za rad sa strukturama su u ovom radu dati u pseudojeziku a ne u nekom odredjenom jeziku prvenstveno zbog razuljivisti u predstavljanju algoritma i njegovom oslobađanju od specifičnosti implementacije u konkretnom programskom jeziku.Ovaj način omogućuje i povećan nivo apstrakcije potreban za zanemarivanje raznih detalja nebitnih za razumevanje logike rada ,što dalje doprinosi povećanju razumljivosti.

Računarski algoritam je precizno definisana procedura realizovana konačnim skupom naredbi koje izvršavaju određeni računarski zadatak.On treba da zadovoljava sledeće zahteve:

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.Algoritam ima determinističko ponašanje,što zanači da se u istim uslovima ponaša na

isti,predvidljiv 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čekivan skup iylaynih veličina.Korektan algooritam predstavlja rešenje datog računarskog problema.Nekorektan algoritam za određene ulaze ili ne proizvodi očekivano rešenje ili se uopšte ne završava.

Algoritam predstavlja metod za rešavanje problema pogodan za računarsku implementacijui u najvećem broju slučajeva je nezavistan od računara na kojem će se izvršavati.Tako neki računarski algoritmi koriste metode razvijene i pre pojave samih računara.Oni obično koriste intuitivna rešenja karakteristična za probleme manjih dimenzija na način kako čovek u mislima rešava neki problem.Ipak veliki broj algoritama je novijeg porekla pogotovu oni koji rade sa velikim brojem podataka.U takvim slučajevima nije retko da su rešenja suprotna intuiciji i upravo se baziraju na logici računarskog rešavanja.

3

Page 4: Ulančane liste-Algoritmi

Konvencije pseudojezikaSpecifikacija 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 jeziku.U ovom radu zaizlaganje algoritma se koristi pseudojezik i on se često sreće u knjigama u kojima se prezentiraju algoritmi.kod u pseudo jeziku se može relativno jednostavno i brzo prevesti u konkretan program.

Usvojeni pseudojezik je karakterisan sledećim konvencijama:

On sadrži uobičajene kontrole strukture ciklusa(while,repeat,for),osnovne selekcije if i 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.

Telo kontrolne strukture je identirano, a kraj kontrolne strukture je označen izvodom reči (end + ime strukture) na primer end _while, end_ if itd.početna i izvodna reč strukture ,kao i separatori su naglašeni(bold).

Pored obične dodele vrednosti a=e ,postoji i višestruka dodela vrednosti a=b=e ,koja izračunatu vrednost izraza e jednovremeno dodeljuje promenljivama a i b.

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 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].

Pristup polju zapisa ukazanog pokazivačem se vrši navođenjem imena polja iza kojeg 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 .

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)

Velikim slovima su označeni pozivi ranije definisanih ili pretpostavljenih funkcija ili procedura (na primer ERROR ,INPUT,itd).

4

Page 5: Ulančane liste-Algoritmi

Komentari nisu uključeni ,jer su algoritmi podrobno objašnjeni u pratećem tekstu.

O strukturama podatakaOsnovna 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 bey drugoga.Usvajanje struktura podataka je jedan od najvažnijih projektnih odluka pri razvoju nekog programskog sistema i usko je povezana sa operacijama koje nad podacima treba izvršavati..Od načina modeliranja objekata problema strukturama podataka i usvojenog načina njihove reprezentacije u memoriji veoma zavisi preciznost,razumljivost,efikasnost izvršavanja programa ,kao i potrebni memorijski prostor.Iako termin „struktura podataka“ izgleda intuitivno prilično jasan retko se daje njegova formalna definicija.Zbog toga se termini „tip podatka“ , „apstraktni tip podatka“ i „struktura podataka“ dosta često koriste kao sinonimi mada im se značenja donekle razlikuju.

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 tip može da ima samo dve vrednosti „true“ i „false“ i sl.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.takvi tipovi se javljaju kao standardni,ugrađeni tipovi programskog jezika,na primer:logički,znakovni,celobrojni,realni,itd.ovo tipovi su direktno hardverski podržani ,što znači da operacije sa njima odgovaraju mašinskim instrukcijama samog procesora.

Apstraktni tip podataka (ADT) ide još dalkje 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.na primer korisnik može uvesti skup kao apstraktni tip podataka sa operacijama unije,preseka,razlike,komplementa nad kolekcijom celih brojeva.Dve osobine apstraktnog tipa podataka su generalizacija i enkapsulacija.

Da bi se specifikacija apstraktnog tipa 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.prema tome strukture podataka su skupovi elemenata istog ili različitog tipa povezani na različite načine.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 poyicije u nizu.

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 ,zapisje nehomogena struktura.Elementu u zapisu se nazivaju poljima i imaju svoja imena preko kojih se može pojedinačno pristupati.Polja u zapisu obično čine jednu logičnu celinu.naprimer,unekoj aplikaciji za opis automobila potrebna su tri atributa: marka,godina proizvodnje i snaga motora.Tada se može definisati novi korisnički tip zapisa auto sa poljima marka kao znakovni niz 10 znakova,godina kao ceo broj i snaga kao realan broj. Svaki kasnije stvoreni objekt ovog tipa (na primer ,a1) ima ova tri polja.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.Poljima objekta se pristupa tako što se navede ime čitavog zapisa i ime polja (na primer , a1.godina). na osnovu toga prevodilac izračunava adresu jer za ime objekta veže njegovu početnu adresu ,a za ime svakog polja pomeraj u odnosu na početak(polju marka

5

Page 6: Ulančane liste-Algoritmi

odgovara 0 ,polju godina 10, a polju snaga 14).Tako se referenca a1.godina pretvara u adresu 110.

Klasifikacija struktura podataka

Osnovna podela struktura podataka zasniva se na kriterijumu međusobnih relacija i veza elemenata u strukturi.Ukoliko 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 ,pa jedan element može biti u vezi sa više drugih elemenata strukture,onda je struktura nelinearna.U linerne strukture spadaju :niz, ulančana lista, stek ,red, dok u nelinerne strukture :stablo i graf.

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.Za razliku od njih ,dinamičke strukture mogu da se povećavaju i smanjuju u vreme izvršavanja programa saglasno aktuelnim potrebama za umetanje novih elemenata ili brisanjem postojećih,Ova mogućnost je podržana sistemskim mehanizmom dinamičke alokacije dealokacije.Tako se zauzima onoloko memorijskog prostora koliko je stvarno potrebno,pa se memorija mnogo efikasnije koristi.

Strukture podataka koje se cuvaju 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

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:

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.Pritom se 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 (slika 1a) ili različitog (slika 1b) tipa i veličine.

Slika 1. Sekvencijalna reprezentacija: a) homogene i b) nehomogene strukture

Pristup svakom elementu ,kako homogene tako i nehomogene strukture,je direktan i zahteva poznavanje početne adrese strukture,pozicija i veličina pojedinih elemenata.na ovakav način se najčešće u memoriji predstavljaju linearne strukture(na primer,nizovi).

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 pozicijom elementa kao u sukcesivnoj reprezentaciji,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.Prema

6

Page 7: Ulančane liste-Algoritmi

tome 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 susedana primer u dvostruko ulančanoj listi svaki element ima dva pokazivača,na svog prethodnika i sledbenika u listi(Slika 2).

Slika 2.Poređenje sekvencijalne i ulančane reprezentacije u pogledu iskorišćenja prostora i

brzine pristupa pokazuje da obe imaju svoje prednosti i nedostatke.oba karakteristična načina predstavljanja mogu da se primenjuju i u operativnoj memoriji i na spoljašnjim memorijama.

Operacije sa strukturama podataka

Tipične operacije najčešće dominantno određuju način realizacije strukture.Karakteristične operacije sa strukturama podataka su njihovo kreiranje,uništavanje,pristup pojedinim elementima radi čitanja ili upisa, obilazak svih elemenata, pretraživanje radi pronalaženja datog sadržaja, umetanje novog elementa, brisanje postojećeg, spajanje dve strukture, itd.Dok se neke mogu obaviti jednom programskom naredbom ,druge zahtevaju čitave složene algoritme.

Linearne strukture podataka

Osnovno svojstvo koje karakteriše linearne strukture podataka je postojanje određenog poretka izmežu elemenata struktura.Ova klasa podataka se može konceptualno formalizovati uvođenjem opšteg termina linearna lista .Linearna lista se definiše kao apstraktni tip nezavisno od implementacije.U tom smislu ,linearna lista (a1,... ,an) je skup od n elemenata (n≥0) koji su linearno uređeni na osnovu svoje pozicije u listi.Broj elemenata n predstavlja dužinu linearne liste,Ukoliko je n=0 linearna lista je prazna.Ako je n>0 onda ai prvi element , a an poslednji element liste.Za element ai se kaže da se nalazi na poziciji i.Očigledno,prvi element liste nema svog prethodnika,kao đto ni poslednji element liste nema svog sledbenika.

Nalinearnu listu se može primeniti viđe raznovrsnih operacija,kao što su: Pristup elementima liste u njihovom linearnom poretku 1 .. n, Pretraživanje čiste i vraćanje pozicije elementa koji ima traženu vrednost, Čitanje vrednosti proizvoljnog elementa liste ai ili upis u njega, Umetanje novog elementa u proizvoljnu poziciju i u listi,pri čemu se svi

sledeći elementi pomerju za po jednu poziciju naniže Nalaženje prethodnika ai-1 i sledbenika ai+1 za proizvoljni element ai,

Određivanje dužine liste Spajanje dve liste u jednu , itd.

Postoji više različitih načina kako se može fizički implementirati koncept linearne liste.Dva najčešće koriščena načina su sekvencijalna i ulanlana reprezentacija.Sekvencijalna reprezentacija linearne liste u vidu niza i ulančana reprezentacija linearne liste u vidu ulančane liste.

7

Page 8: Ulančane liste-Algoritmi

Ulančane listeUlančana implementacija linearne liste se naziva ulančanom listom(linked list).Dok

su u sekvencionalnoj reprezentaciji uzastopni elementi linearne liste susedni u memoriji , a početne adrese su na fiksnom rastojanju određenom veličinom elemenata .u ulnčanij reprezentaciji ono mogu biti bilo gde u memoriji..Kako se logički poredak ne može izvesti iz fizičkog poretka ,mora da postoji drugi način održavanja tog poretka.Ovo se postiže tako što element liste sadrži eksplicitnu adresu narednog elementa – pokazivač na njega.Zato svaki element liste(čvor) pored informacionog sadržaja elementa(info) sadrži pokazivač (next) na sledbenika čvor koji je sledeći u logičkom poretku(Slika 3).

Slika 3.Informacioni sadržaj može biti bilo kojeg skalarnog ili strukturiranog tipa , ali je najčešće zapis.Listi se pristupapreko jednog spoljašnjeg pokazivača koji pokazuje na prvi čvor,a koji nije deo liste .prvi čvor se obično naziva glavom (head) liste Ukoliko je lista prazna ,onda pokazivač list ne ukazuje nikuda i ima vrednost praznog pokazivača.(list =nil). Poslednji čvor se obično naziva repom (tail) liste.On nema svoga sledbenika ,pa sadrži prazan pokazivač što je i oznaka kraja liste.

Postoji više vrsta lista u zavisnosti od načina povezivanja.Lista sa Slike 3 kod koje svaki čvor ukazuje na svog sledbenika , naziva se jednostruko ulančanom listom .Ukoliko se po informacionom sadržaju liste Info ili nekom njegovom delu može definisati funkcija poređenja i ako su čvorovi uvezani po rastućim (ili opadajućim) vrednostima ,kaže se da je lista uređena.U suprotnom kada poredak ne zavisi od vrednosti sadržaja,lista je neuređena.Ukoliko je lista povezana tako da poslednji čvor ukazuje na prvi čvor ,lista je kružna.Lista u kojoj svaki čvor ,osim na sledbenika ukazuje dodatnim pokazivačem (oznaka prev) i na predhodnika je dvostruko ulančana lista.Lista je najčešće homogena što znači da su čvorovi istog tipa.Prilikom izlaganja o operacijama sa listama ako je p pokazivač na neki čvor liste ,onda je info(p) predstavlja korisni sadržaj ovog čvora, next(p) je pokazivač na sledbenika ,a prev(p) je pokazivač na prethodnika.Ulančana lista podržava sve ranije pomenute operacije.

Dinamička alokacija

Za razliku od sekvencijalne alokacije kod ulančane liste prostor za neki čvor se alocira tek kad je to stvarno potrebno,prilikom operacije umetanja tog čvora u listu.Prilikom operacije brisanja zauzeti prostor treba da se oslobodi i učini raspoloživim za neku naknadnu primenu.Znači kod ulančane reprezentacije neophodno je postojanje mehanizma koji vrši dinamičku alokaciju i dealokaciju prostora.Pošto izlaganje nije vezano za konkretni jezika mogu se uvesti neke predpostavke. Neka je raspoloživi slobodni prostor (storage pool) podeljen u jedinice koje imaju strukturu čvora pretpostavljene liste.pri formiranju novog čvora liste poziva se funkcija GETNODE koja uzima jedan slobodan čvor i stavlja ga na raspolaganje algoritmu vraćajući njegovu adresu u memoriji(pokazivač na njega).

Kada bi broj slobodnih čvorova bio beskonačan ne bi bilo potrebe za oslobađanjem prostora koji zauzima čvor kada se on briše iz liste.Međutim kako je slobodni prostor ograničen potrebno je da se zauzeti čvor ,koji se izbacuje iz liste ,vrati u slobodan prostor i tako učini raspoloživim za ponovno korišćenje Za tu svrhu predviđena je procedura FREENODE(p) koja oslobađa čvor sa zadatom adresom p.

8

Page 9: Ulančane liste-Algoritmi

Postavlja se pitanje kakva je organizacija slobodnog prostora najpogodnija.Kako se čvorovi mogu dealocirati proizvoljnim redom i pošto ih treba učiniti raspoloživim za ponovnu upotrebu ,slobodni prostor nije više kontinualan iteško je voditi evidenciju o slobodnim ulazima.Zato je vrlo pogodno da slobodan prostor bude organizovan upravo u vidu ulančane liste

Prema tome,na početku se svi slobodni čvorovi ,obično redom, uvežu u jednostruko ulančanu listu na koju ukazuje globalni pokazivač avail .

Nema slobodnog čvora

Pošto funkcija vodi računa dali ima slobodnih čvorova ili ne ,operacija umetanja koja poziva GETNODE ,ne vodi eksplicitno o ovome računa.Kada se dogodi neuspešan ishod pretpostavlja se postojanje procedure ERROR koja vrši obradu greške nezavisno od algoritma ,javlja odgovarajuću poruku i prekida izvršavanje.

Procedura FREENODE(p) vraća oslobođeni čvor takođe na početak liste ,pa se pokazivač avail postavlja na njegovu adresu.

Iako je ova sistemska struktura logički nezavisna od korisničke ulančane liste zauzetih čvorova ,posle izvesnog broja operacija one se mogu fizički isprepletati ,kao što je prikazano na slici 4. Čvorovi u listi slobodnog prostora su predstavljeni kao osenčeni.

Slika 4.Korisnička lista na koju ukazuje pokazivač list i lista slobodnog prostora na koju ukazuje pokazivač avail

Operacije sa jednostruko ulančanim listamaTipične operacije sa listom su :pretraživanje,umetanje,brisanje.Operacije sa listom

najvećim delom manipulišu sa pokazivačima jer oni održavaju integritet liste kao strukture podataka.Zbog toga treba definisati legalne manipulacije sa pokazivačima imajući u vidu da su to memorijske adrese.Ovde se pretpostavlja da su sa pokazivačima dozvoljene sledeće aktivnosti:

Testiranje pokazivača na nil, Provera na jednakost pokazivača sa drugim pokazivačem Postavljanje pokazivača na nil, Dodela vrednosti drugog pokazivača ili adrese datom pokazivaču

Umetanje u listu

Umetanje novog čvora u neuređenu listu može da bude izvršeno na bilo kojem mestu u listi.početak,sredina,kraj)operacija(INSERT-AFTER (p,x) umeće u listu novi čvor sa sadržajem x iza čvora čija je adresa zadata sa p.

9

Page 10: Ulančane liste-Algoritmi

Pošto se dinamički alocira prostor za novi čvor ,upiše se polje sadržaja u njega ,a zatim sledbenik prethodnog čvora postaje sledbenik novog čvora,dok sam novi čvoe postaje sledbenik prethodnog čvora( Slika 5).

Slika 5. Umetanje čvora sa sadržajem x iza čvora na koji ukazuje p

Ukoliko se javi potreba za umetanje novog čvora ispred tekućeg čvora u listi (operacija INSERT-BEFORE) ,onda mora da se pristupi prethodnom čvoru ,jer njegov pokazivač treba povezati na novi čvor.Efektivno se ovakvo umetanje u homogenoj listi ipak može izvršiti tako što se novi čvor prvo ubaci iza tekućeg čvora ,a onda oni zamene informacione sadržaje.Na taj način se postiže efekt kao da je novi čvor ubačen ispred ukazanog čvora(Slika 6).

Slika 6 Umetanje čvora sa sadržajem x ispred čvora na koji ukazuje p

Brisanje

Operacija brisanja može da ukloni čvor sa bilo kojeg mesta u listi.Ovde se prikazuje operacija brisanja iz sredine i sa kraja liste.U tom slučaju treba da se poveže lista tako da prethodnik čvora koji se uklanja pokazuje na njegovog sledbenika.Zato je pri brisanju tekućeg čvora u operaciji DELETE-AFTER(p) potrebno dati pokazivač p na njegovog prethodnika.Na slici 7 je prikazano brisanje čvora sa sadržajem y ispred kojeg se nalazi čvor ukazan sa p.

10

Page 11: Ulančane liste-Algoritmi

Slika 7.Brisanje čvora iza čvora na koji ukazuje pokazivač pUkoliko čvor koji se uklanja nije na kraju liste i ako je lista homogena sličnom

sdosetkom kao kod umetanja ispred tekućeg čvora može da se reši problem brisanja čvora na koji pokazuje pokayivač p.(operacija DELETE(p)) U tom slučaju treba prvo sačuvatu adresu sledećeg čvora q,prepisati njegov sadržaj u čvor na koji ukazuje p ,čime se ukazani čvor efektivno briše ,a lista povezuje da bi se ,na kraju uklonio oslobođeni čvor(Slika8).

Slika 8. Brisanje čvora na koji pokazuje pokazivač p

Pretraživanje

Često se javlja potreba lociranja čvora u listi koji ima zadati sadržaj radi pristupa.Tako operacija SEARCH(list, x) pretražuje neuređenu listu na koju ukazuje pokazivač list,i ukoliko postoji bar jedan čvor sa zadatim sadržajem x , vraća adresu prvog takvog čvora ,a ako ne postoji vraća nil.

Dok se kod neuređene liste pri neuspešnom pretraživanju mora proći čitava lista ,ako je lista uređena (na primer,neopadajuće) neuspešno pretraživanje se može proglasiti čim se dođe do prvog čvora sa većim sadržajem ,a do tada se ne pronađe zadati čvor.Ovu operaciju realizuje funkcija SEARCH-ORD(list x).

11

Page 12: Ulančane liste-Algoritmi

Održavanje neuređene liste omogućava brže umetanje jer se novi čvor može umetati na početak liste.Međutim,neuspešno pretraživanje brže traje ,jer se mora proći čitava lista da bi se utvrdilo da traženog čvora nema.S druge strane,kod uređene liste umetanje je složenije ,jer se mora ispitati u proseku polovina čvorova dok kod pretraživanja ,kako neuspešnog tako i uspešnog ,isto tako treba proći prosečno pola liste.Odluka da li održavati listu uređenom ili ne,treba da se donese na osnovu poznavanja karakteristika aplikacije,zavisno od očekivane frekvencije umetanja ili pretraživanja.

Ostale operacije

Ponekad ase javlja potreba i za nekim drugim korisnim operacijama sa ulančanim listama kao što su : inverzija poretka čvorova u listi, povezivanje dve liste u jednu, nalaženje i-tog čvora ,razbijanje jedne liste u dve liste ,kopiranje itd.Ovde su prikazane prve dve pomenute operacije.

Operacija INVERT(list) obrće poredak čvorova u listi na čiji prvi čvor ukazuje pokazivač list tako da prvi čvor postaje poslednji ,drugi postaje pretposlednji, itd.Ova operacija koristi tri pokazivača koji se sukcesivno pomeraju od početka do kraja liste,tako da p pokazuje na sledbenika čvora ukazanog sa q ,a r na prethodnika čvora iukazanog sa q prebaci sa sledbenika p na prethodnika r i sva tri tekuća pokazivača se pomere za po jedan čvor.Na slici 9a je dat izgled liste od tri čvora ,a na slikama 9b,c,d stanje liste nakon svake od tri iteracije algoritma.

Operacija CONCATENATE(list1, list2) nadoovezuje listu na koju pokazuje list2 na listu ukazanu sa list1.prvo se ispitaju specijalni slučajevi kad je jedna ili druga ulazna lista prazna ,a ako to nije slučaj onda se dođe do kraja prve liste, pa se napravi da poslednji čvor prve liste pokazuje na prvi čvor druge liste.

12

Page 13: Ulančane liste-Algoritmi

Slika 9.Inverzija poretka čvorova liste-izgled liste : a)pre početka operacije, b) posle prve, c) posle druge, d) posle treće iteracije

Operacije sa kružnim ulančanim listamaJedan od najvećih nedostataka jednostruke liste je mogućnost kretanja samo u jednom

smeru ,od glave ka repu.Jedan način da se ovaj nedostatak ukloni, a da se ne menja struktura čvora je pretvaranje liste u kružnu.umesto da poslednji čvor sadrži prazan pokazivač ,on pokazuje na prvi čvor(Slika 10).Zato je u kružnoj listi moguće iz bilo kojeg čvora doći do bilo kojeg drugog čvora,nezavisno od njegovog položaja.

Operacija umetanja iza čvora pokazanog pokazivačem p je slična kao i u nekružnoj listi.Jedina razlika se javlja u slučaju kada se ubacuje novi čvor iza poslednjeg čvora u listi na kojeg ukazuje spoljašnji pokazivač.Tada novi čvor postaje poslednji ,a spoljašnji pokazivač list treba da pokazuje na njega,pa operacija INSERT-AFTER-C(p, x) mora da ga ažurira(slika10).

13

Page 14: Ulančane liste-Algoritmi

Slika 10. Umetanje na kraj kružne liste kod koje spoljašnji pokazivač ukazuje na poslednji čvor

Neke druge operacije su, takođe ,efikasnije sa kružnom listom gde spoljašnji pokazivač list pokazuje na poslednji čvor u listi.Ukoliko se održava posebna lista slobodnog prostora iz koje se vrši alokacija operacijom GETNODE pri umetanju,mnogo je lakša dealokacija prostora pri brisanju čitave kružne liste nego nekružne.Dok se kod nekružne liste mora proći čitava lista kod kružne liste se odjednom može osloboditi čitava lista jednostavnim ažuriranjem pokazivača tako što pokazivači avail i next(list) samo razmene vrednosti.

Operacije sa dvostruko ulančanim listamaKod kružne liste od svakog čvora može se doći do svakog drugog s tim što prelazak

može da bude vrlo neefikasan.Na primer ,ako treba od jednog čvora doći do njegovog prethodnika mora se preći čitava lista.Zbog toga je korisno da svaki čvor ,pored pokazivača na sledeći čvor ,sadrži i pokazivač na prethodni čvor što znači da je lista dvostruko ulančana.Kod dvostruko ulančane liste jednako je efikasno kretati se po listi u oba smera , što pokazuje sledeća jednakost (p je pokazivač na neki čvor)

next(prev(p)) = p = prev(next(p)).Ovakva lista takođe ,može da bude nekružna ili kružna.Ako p ukazuje na prvi čvor ,a

q na poslednji čvor u nekružnoj listi (slika 11a) je tadaprev(p) = next(q) = nil

a u kružnoj(slika 11b) je prev(p) = q next(q) = p

Slika 11. Dvostruko ulančana lista : a) nekružna i b) kružnaSa dvostrukom listom su moguće sve ranije spomenute operacije.One se mogu vrlo fleksibilno izvesti ,s tim što su malo složenije ,jer treba ažurirati oba pokazivača.Neka je dvostruko ulančana lista kružna i neka ima zaglavlje .Tada se operacija umetanja novog čvora sa informacionim sadržajem x iza čvora ukazanog pokazivačem p ,INSERT-AFTER-D(p, x)realizuje kao

14

Page 15: Ulančane liste-Algoritmi

Operacija umetanja u opštem slučaju menjam pokazivače u tri čvora.Pri ovoj operaciji redosled aktivnosti ,označen brojevima na slici slici 12,je takav da se ne izgubi prethodnas povezanost liste.pošto se alocira (1) i inicira sadržaj novog čvora(2),njegovi pokazivači se postave tako da pokazuju na prethodnika p (3) i ranijeg sledbenika čvora p, čvor r, (4).Na kraju se postavi da čvor p ukazuje na novi čvor ,ali kao na prethodnika (6).Pretpostavke da lista ima zaglavlje i da je kružna veoma pojednostavljaju ovu operaciju.

Slika 12. Umetanje čvora u dvostruko ulančanu listu

Postojanje zaglavlja omogućava da lista nikada nije prazna ,pa ovaj algoritam radi i kad se lista sastoji samo od zaglavlja.Pored toga,kružnost liste oslobađa potrebe da se vodi računa o graničnim slučajevima .Ukoliko lista ne bi bila kružna,onda bise moralo voditi računa da li se čvor umeće na kraj liste ,a još ako ne bi imala ni zaglavlje ,morala bi se predvideti i posebna operacija za ubacivanje na početak liste.

15

Page 16: Ulančane liste-Algoritmi

ZaključakAko se razmatra iskorišćenje prostora,odmah se može primetiti da ulančana lista,za

razliku od sekvencijalne reprezentacije linernih lista u vidu niza,traži dodatni prostor za jedan ili dva pokazivača.Međutim i pored toga,ulančana reprezentacija često troši manje prostora iz sledećih razloga.ukoliko se informacioni sadržaj elementa sastoji od više polja,pokazivači zauzimaju procentualno mali deo prostora potrebnog za čvor.S druge strane sekvencijalna reprezentacija zahteva obično fiksnu alokaciju prostora dimenzionisanog na maksimalno mogući broj članova linearne liste , tako da u realnom slučaju dosta prostora može ostati neiskorišćeno.Ulančana reprezentacija koristi dinamičku alokaciju i prostor se odvaja ssamo kada je stvarno potreban,bez rezervisanja unapred.

Ulančane liste dozvoljavaju efikasno umetanje i brisanje elemenata na proizvoljnom mestu,jer se pri tom zahteva samo prevezivanje malog broja pokazivača .Utom smislu nizovi su vrlo nepogodni,jer takve operacije zahtevaju pomeranje odredjenog broja elemenata koji linearno zavisi od ukupnog broja elemenata.Zbog toga je ulančana implementacija urešenih struktura mnogo pogodnija.Ulančane liste po pravilu omogućavaju lakše spajanje dve strukture u jednu, kao i razbijanje jedne strukture u dve.

Međutim postoje i operacije koje favorizuju sekvencijalnu reprezentaciju .Takva operacija pristupa proizvoljnom elementu (na primer i-tom elementu strukture).Dok pristup proizvoljnom elementu zahteva fiksno vreme ,ulančana lista onemogućava direktan pristup i zahteva sekvencijalno praćenje pokazivača do traženog elementa.

Ulančana reprezentacija dozvoljava ,mnogo veću fleksibilnost i pogodnosti u implementaciji raznovrsnih struktura kao što su nehomogene liste , liste promenljive dužine, višestruko uvezane liste, itd.

16

Page 17: Ulančane liste-Algoritmi

Literatura:Milo Tomašević - Algoritmi i strukture podtaka , Akademska misao, 2008

Muharem Kozić - SKRIPTA Uvod u informatiku i računarstvo

Robert Manger, Miljenko Marušić – Strukture podataka i algoritmi, Zagreb, 2007

Miloš Đekić – Algoritmi i strukture podataka(skripta) , FON,Beograd 2007

http://en.wikipedia.org/wiki/Linked_list

http://sr.wikipedia.org/sr-el/Struktura podataka

http://www.ncd.matf.bg.ac.rs/~jelenagr/ASP/index.html

http://www.osnove-programiranja.com/predavanja/06Osnovnestrukturepodataka.pdf