You are on page 1of 42

STRUKTURATDHNASH

Leksioni2Listatdhe
Implementimiityre
UNYT - Educating Tomorrow's Leaders 1
Listat dhe Implementimi i tyre

Prezantuar nga Dr. Ervin Ramollari


Departamenti i Shkencave Kompjuterike
ervinramollari@unyt.edu.al

UNYT - Educating Tomorrow's Leaders 2


Permbajtja

Listat
Listat e lidhura
Implementimi i listave me vektore (arrays) dhe me
lista te lidhura
Listat rrethore
Listat e lidhura dyfishe

UNYT - Educating Tomorrow's Leaders 3


Lista si Tip Abstrakt te Dhenash
Veprimet (operacionet) e mundshme mbi te
dhenat:
Krijo nje liste bosh
Fshije te gjithe listen
A eshte bosh ?
Num. i elementeve ne liste
Shto nje element ne nje pozicion te caktuar ne
liste
Fshi nje element
Lexo vleren e nje elementi
TAD liste e renditur (i mban elementet ne rend)
UNYT - Educating Tomorrow's Leaders 4
Shembull i nje TAD: Lista

UNYT - Educating Tomorrow's Leaders 5


Shembull i nje TAD: Lista

UNYT - Educating Tomorrow's Leaders 6


Listat e lidhura

UNYT - Educating Tomorrow's Leaders 7


Implementimi i listave me
vektor (array)
Lista si tip abstrakt te dhenash (ADT) mund
te implementohet me vektor (array)
Ka madhesi fikse
Duhet krijuar vektor me permasa te reja sa here
kalohet kapaciteti
Elementet jane ngjitur me njeri tjetrin ne
memorje
Sa here shtohet apo fshihet nje element, duhet
zhvendosur e gjithe pjesa
Jo-eficiente ne lidhje me kohen

1-8
Ndryshimi i madhesise
se vektoreve
Shembull
int max_size = 50;
double [] myArray = new double[max_size];
...
double [] newArray =
new double[new_ capacity];

for (int i = 0; i < myArray.length; i++)


{
newArray[i] = myArray[i]
}
myArray = newArray;
UNYT - Educating Tomorrow's Leaders 9
Listat e lidhura
Listat e lidhura (ang. linked lists) perdoren
per te ruajtur elemente te dhenash qe nuk jane
te ngjitur me njeri tjetrin
fizikisht mund te ndodhen ne vende te ndryshme
te memorjes
Cdo element lidhet me elementin pasues me
ane te nje reference (ang. pointer), si ne nje
zinxhir
Elementi pasues mund te ndodhet fizikisht kudo
Ky fleksibilitet lejon qe te shtohen dhe te fshihen
elemente pa zhvendosur te dhenat
UNYT - Educating Tomorrow's Leaders 10
Listat e lidhura

Veprimet e shtimit dhe fshirjes se nje


elementi jane te shpejta dhe eficiente

UNYT - Educating Tomorrow's Leaders 11


Listat e lidhura

Cdo element ne listen e lidhur quhet nyje (ang. node)


Lista e lidhur perbehet nga nje koleksion nyjesh te
lidhura me njeri-tjetren, te krijuara ne menyre dinamike
Cdo nyje perbehet nga
1. elementi i te dhenave
2. nje reference per tek nyja pasuese ne liste
Per te patur akses ne elementet e listes, ruajme
referencen per tek nyja e pare, qe quhet koka (header)
Nyja e fundit ne liste ka nje reference qe eshte null e
cila shenon fundin e listes
1-12
Implementimi i nyjes ne Java
(ListNode)

class ListNode
{
Object element;
ListNode next;
}

1-13
Rishikim i referencave
(ang. references / pointers)

UNYT - Educating Tomorrow's Leaders 14


Rishikim i referencave
(ang. references / pointers)
a) Deklarimi i dy
variblave te
referencave
b) alokimi i nje
objekti te ri
c) alokimi i nje
objekti te ri,
duke e caktuar
objektin e
creferencuar
per fshirje UNYT - Educating Tomorrow's Leaders 15
Rishikim i referencave
(ang. references / pointers)
e) alokimi i nje
objekti te ri
f) dhenia e vleres
null nje reference
g) barazimi me
referencen null

UNYT - Educating Tomorrow's Leaders 16


Nje liste e lidhur bazike

Nemundteprintojmeosekerkojmenelistenelidhur
dukefilluarnganyjaeapredhedukendjekurzinxhirin
elidhjevepasuese.
Dyveprimebazeqeduhettekryhenjaneshtimidhe
fshirjaenjeelementicfaredo,x.
1-17
Shtimi nje nyjeje

Ne kod:
tmp = new ListNode( ); // Create a new node
tmp.element = x; // Place x in the element member
tmp.next = current.next; // x's next node is b
current.next = tmp; // a's next node is x

1-18
Shtimi i nje nyjeje

Ne mund ta thjeshtojme kodin nese ListNode kane nje


konstruktor qe i inicializon atributet direkt. Ne kete rast,
perftojme:

tmp = new ListNode( x, current.next );


current.next = tmp;

Tani tmp nuk nevojitet me. Pra gjithcka me nje rresht kod:

current.next = new ListNode( x, current.next );

1-19
Fshirja

Pertahequrelementinxngalistaelidhur,evendosim
referencencurrentteknyjaparax,dhereferencen
pasueseendryshojmeqetatejkalojenyjenx.

Ne kod:
current.next = current.next.next;
1-20
Nyja e pare

Supozuam se kur fshijme nje element x, ekziston nje


element paraardhes, per te lejuar tejkalimin e
nyjes x
Si mund ta heqim elementin e pare? Rast special.
Ne menyre te ngjashme, shtimi i nje elementi sic u
pershkrua me siper, nuk na lejon ta shtojme si
elementin e pare te listes .
Perseri, shtimi i elementit te pare eshte nje rast
special.

1-21
Nyja e pare

Nyjaepare(header)nukpermbantedhena,porsherben
perteplotesuarkushtinqecdonyjeduhetteketenjenyje
paraardhese.
Nyjaeparenalejonqeteshmangimrastetevecantasi
shtimiinjeelementiteparedhefshirjaeelementitte
pare.

1-22
Lista bosh

Menjenyjeteparebosh,listaeshteboshnese
header.nexteshtenull

1-23
Implementimi

1-
24
Pozicioni aktual (current)

Duke ruajtur pozicionin aktual ne nje liste, ne


referencen current, ne sigurohemi qe aksesi
eshte i kontrolluar

Meqenese aksesi ne liste behet nepermjet metodave


te klases, ne mund te sigurohemi qe current
gjithmone perfaqeson nje nyje ne liste, nyjen e pare,
ose null.

1-25
Iteratoret
Skema me pozicionin aktual (current) ka nje problem: Me
nje pozicion te vetem, rasti i dy iteratoreve qe duhet te
aksesojne listen ne menyre te pavarur nuk suportohet.
Nje menyre per ta shmangur kete problem eshte te
perkufizojme nje klase me vete iterator, e cila mban
pozicionin aktual.
Klasa e listes me pas nuk e ruan pozicionin aktual dhe do
kishte vetem metoda qe e trajtojne listen si nje njesi, si psh
isEmpty dhe makeEmpty, ose qe e pranojne nje
iterator si parameter, si psh insert

1-26
Iteratoret

Veprimet qe varen vetem nga iteratori, si per


shembull veprimet per te avancuar iteratorin ne
elementin tjeter, i perkasin klases iterator.
Aksesi ne atributet e listes mundesohet duke e
bere iteratorin nje klase te brendshme.
Mbi klasen e iteratorit lejohen vetem veprimet
legale, si per shembull, avancimi ne liste.

1-27
Shembull: Perdorimi i iteratorit

EinicializojmeitrmeelementineparenelistentheList(duke
shmangurelementineparesigurisht)dukereferencuariteratorine
dhenengaList.first().Testiitr.isValid()eshtenjesoj
metestinp!=nullqedokryhejnesepeshtereferenceedukshme
pernenjenyje.Shprehjaitr.advance()eshtenjesojme
p=p.next. 1-28
Current:helpsto
maintainthenotion
ofthecurrent
position

1-29
Headernode

1-30
1-31
static printList(List)

1-32
find( X )

1-33
remove( X )

1-34
findPrevious( X )

1-35
insert (X )

1-36
Listat e Lidhura Dyfishe
(ang. Doubly Linked Lists)
Listat e lidhura te thjeshta nuk jane eficiente
per disa veprime
Per shembull, edhe pse eshte e thjeshte te
shkosh ne fillim te listes, nevojitet kohe qe te
arrish deri ne fund te saj
Per kete arsye, mbajme nje reference te dyte
per tek elementi i fundit te listes (tail)
Ne cdo nyje kemi dy referenca, nje per tek
nyja pasardhese (next) dhe nje reference per
tek lista paraardhese (previous)
1-37
Nje liste e lidhur dyfishe

1-38
Lista boshe

1-39
Listat e lidhura rrethore

Ang. circularly linked list


Referenca e nyjes se fundit lidhet me nyjen e
pare
Zakonisht nuk ka nevoje per nyjen e pare bosh
Navigimi ndodh ne menyre ciklike, pra nuk
perfundon me tail por rikthehet perseri tek
nyja e pare header

UNYT - Educating Tomorrow's Leaders 40


Per lexim

Mark A. Weiss, Data


Structures and Problem
Solving Using Java,
4/E., Addison-Wesley,
2010 Kapitulli 17

UNYT - Educating Tomorrow's Leaders 41


Faleminderit!

www.unyt.edu.al UNYT - Educating Tomorrow's Leaders 42

You might also like