Leksioni 2

March 18, 2024 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Leksioni 2...

Description

 STRUKTURA TË DHËNASH

Leksioni 2 – Listat dhe  Implementimi i tyre

UNYT - Educating Tomorrow's Leaders

1

Listat dhe Implementimi i tyre Prezantuar nga Dr. Ervin Ramollari Departamenti i Shkencave Kompjuterike [email protected]

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 c’referencuar 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

Ne mund te printojme ose kerkojme ne listen e lidhur  duke filluar nga nyja e apre dhe duke ndjekur zinxhirin  e lidhjeve pasuese. Dy veprime baze qe duhet te kryhen jane shtimi dhe  fshirja e nje elementi cfaredo, 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

Per ta hequr elementin x nga lista e lidhur, e vendosim  referencen current tek nyja para x, dhe referencen  pasuese e ndryshojme qe ta tejkaloje nyjen x.

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

Nyja e pare (header) nuk permban te dhena, por sherben  per te plotesuar kushtin qe cdo nyje duhet te kete nje nyje  paraardhese. Nyja e pare na lejon qe te shmangim rastet e vecanta si  shtimi i nje elementi te pare dhe fshirja e elementit te  pare.

1-22

Lista bosh

Me nje nyje te pare bosh, lista eshte bosh nese  header.next eshte null 

1-23

Implementimi

124

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

E inicializojme itr me elementin e pare ne listen theList (duke  shmangur elementin e pare sigurisht) duke referencuar iteratorin e  dhene nga List.first(). Testi itr.isValid() eshte njesoj  me testin p!=null qe do kryhej nese p eshte reference e dukshme  per ne nje nyje. Shprehja itr.advance() eshte njesoj me  p=p.next. 1-28

Current: helps to  maintain the notion  of the current  position

1-29

Header node

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

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF