You are on page 1of 66

Kapitulli 8

Abstraksioni i te dhenave

Pergatitur nga Prof. Dr. Kozeta Sevrani


Kapitulli 8: Abstraksionet e te Dhenave

8.1 Strukturat baze te te Dhenave


8.2 Koncepte te rendesishme
8.3 Implementimi i Strukturave te Dhenave
8.4 Nje rast i vogel studimi
8.5 Disa tipe te dhenash (te personalizuara)
8.6 Klasat dhe Objektet
8.7 Shenjuesit ne Gjuhen Makine
Strukturat e te Dhenave

• Tabelat (Arrays)
– Tabelat (array) homogjene
– Tabelat (array) heterogjene – te agreguara
• Listat
– Stivat (Stack)
– Rradhet (Queue)
• Pemet (Tree)
Figura 8.1 Listat, stivat dhe rradhet
Terminologjia per Arrays

• Array: Nje bllok te dhenash ku komponentet


jane te te njejtit tip
• Nje tabele dy-dimensionale perbehet nga
rreshta dhe kolona
• Indekset perdoren per te identifikuar
pozicionet
Terminologjia per Agregatet

• Aggregate: Nje bllok te dhenash qe mund te


jene te tipeve dhe madhesive te ndryshme
• Cdo element i te dhenes se saj perben nje fushe
(field)
• Fushat aksesohen zakonisht nga emri
Terminologjia per Listat

• Lista: Nje bashkesi te dhenash ku elementet


jane vendosur sekuencialisht
• Koka (Head) : Fillimi i listes
• Fund (Tail): Fundi i listes
Terminologjia per Stivat

• Stiva (Stack): Nje liste ne te cilen elementet


shtohen ose hiqen vetem ne koke
• LIFO: Last-in-first-out
• Maja (Top): Koka e listes (stives - stack)
• Baza (Bottom ose base): Fundi i listes (stives)
• Pop: Heqja e elementit ne maje
• Push: Shtimi i nje elementi ne maje
Terminologjia per Rradhet

• Rradhe (Queue): Nje liste ne te cilen heqja


behet nga koka dhe shtimi nga fundi
• FIFO: First-in-first-out
Figurea 8.2 Nje shembull i nje organigrame
te nje organizate

PRESIDENTI

N/PRESIDENTI I N/PRESIDENTI I
N/PRESIDENTI I SHERBIMEVE
SHITJEVE FINANCAVE

SHEFI SHEFI SHEFI SHEFI SHEFI


RAJONAL I RAJONAL I RAJONAL I RAJONAL I RAJONAL I
SHITJEVE SHITJEVE SHITJEVE SHERBIMEVE SHERBIMEVE
Terminologjia per nje Peme

• Peme (Tree): Nje bashkesi te dhenash ku


elementet kane nje organizim hierarkik
• Nyje (Node): Nje element ne peme
• Rrenja (Root node): Nyja ne maje
• Fundor ose Gjethe (Terminal ose leaf node):
Nje nyje fundore
Terminologjia per nje Peme (vazhd)

• Prind (Parent): Nyja qe gjendet menjehere siper


nje nyje te caktuar
• Femij (Child): Nyja qe gjendet menjehere poshte
nje nyje te caktuar
• Stergjysh (Ancestor): Prind, prind i prindit, etj.
• Pasardhes (Descendent): Femij, femij i femise,
etj.
• Vellezer (Siblings): Nyje qe ndajne te njejtin prind
Terminologjia per nje Peme (vazhd)

• Peme binare (Binary tree): Nje peme ne te


cilen nje nyje ka te shumten dy femije
• Thellesi (Depth): Numri i nyjeve ne shtegun
me te gjate nga rrenja te gjethja
Figura 8.3 Terminologji
Koncepte te rendesishme

• Abstraksioni
– Mbron users (softueret aplikative) nga detajet e data
storage
• Struktura Statike vs. Dinamik
– A ndryshon forma dhe madhesia me kalimin e kohes?
• Pointer
– Nje zone ruajtje qe mban adresen ku ruhet e dhena
• Perdoren me vone per te aksesuar te dhenat
Koncepte te rendesishme

• Strukturat e te Dhenave Statike: Madhesia dhe


forma e struktures se te dhenave nuk ndryshon
• Strukturat e te Dhenave Dinamike : madhesia
dhe forma e struktures se te dhenave mund te
ndryshoje
• Shenjuesi (Pointer): Perdoret per te lokalizuar te
dhenen
SHEMBULL SHENJUESI
Novelat e vendosura sipas titujve por te
lidhura nga autorsia
Implementimi i struktures se te dhenave

• Gjuhet e Nivelit te Larte ofrojne disa


struktura te dhenash si primitiva
• Keto struktura te dhenash perkthehen ne
instruksione te gjuhes makine per te
manipuluar te dhenat e ruajtur ne kujtesen
kryesore
Ruajtja e Tabelave (Storing Arrays)

• Array (Tabelat Homogjene)


– Adrese ne kujtese e nje qelize te caktuar qe
mund te llogaritet
– Renditja sipas rreshtave (Row-major order)
versus renditja sipas kolonave (column major
order)
– Nje adrese polinomiale pershkruan si te
aksesojme te dhenat e nje elemnti cfaredo te
tabeles
ARRAY (vazhd.)

• Shembull 1: Leximi i temperatures gjate 24 oreve


• Leximet renditen si nje array me nje-dimension, e
quajtur Leximi, sipas rradhes qe ato jane lexuar (modeli
konceptual, per programuesin):
Leximi[1], Leximi[2], ...., Leximi[24]
• Ne kujtese do jene 24 qeliza me adresa te
njepasnjeshme, mjafton te dihet adresa e qelizes se pare
• Nese x – adr e qelizes se pare
• Leximi i trete do te jete: x + (3-1)
Figura 8.5 Tabela e temperaturave te
lexuara, te ruajtuara ne kujtese duke
filluar nga adresa x
Ruajtja e Tabelave Agregate (Storing
Aggregates)

• Aggregate: Tabelat Heterogjene


– Fushat mund te ruhen njeri pas tjetrit ne blloqe te
vazhdueshme
• Adresat e qelizave te kujteses te cdo fushe mund te
llogariten
– Fushat mund te ruhen ne vendndodhje te veçanta,
qe identifikohen nga shenjuesit
ARRAY (vazhd.)

• Shembull 2: Te dhenat ne lidhje me shitjet e bera


gjate nje jave organizohen ne nje tabele nje-
dimensionale vertikale me emrat e shitesve dhe ne
nje tabele horizontale me ditet (5) e javes
• Te dhenat shihen si te organizuara ne nje tabele dy-
dimensionale: rreshtat – shitjet e bera nga nje shites
ne nje dite te javes; kolonat –shitjet e nje dite te
secilit prej shitesave (per program.)
• Ne kujtese- qeliza me adresa te njepasnjeshme
ARRAY (vazhdim i Sh.2)

• Array – strukture statike (e konsiderojme)


• Mund te llogarisim sasine e nevoj. te kujteses, ne
menyre qe te rezervojme bllokun e qelizave te
vazhd., ku do te memorizojme pastaj te dhenat
rresht per rresht (sipas rreshtave!)
• Elementi i rreshtit te trete, kolona e katert; duhet
te kapercejme 13 elemente nga fillimi i bllokut
fizik te qelizave (simulim i tabeles)
Figura 8.6 Nje tabele dy-dimensionale
me kater rreshta dhe pese kolona te
ruajtura sipas kolonave
ARRAY (vazhdim i Sh.2)

• Nese c – numri i kolonave te array (nr. i


elementeve te nje rreshti), x – adresa e
qelizes se elementit te rreshtit te pare dhe ne
kolonen e pare, adresa e elem. te rreshtit te i-
te dhe kolones se j-te:
x + (c * (i-1)) + (j-1)
(quhet polinom i adreses)
Figura 8.7 Ruajtja e tabeles se agreguar
(heterogjene) Punonjesit
Listat (Storing Lists)

• Listat e vazhduara (Contiguous list): List e


ruajtur ne nje tabele homogjene
• Listat e lidhuar (Linked list): Liste ne te cilen
secili prej elementeve eshte lidhur me shenjuesa
– Head pointer: Shenjon elementin e pare ne liste
– Null pointer (ose NIL): Nje vlere “non-pointer” e
perdorur per te treguar fundin e listes
Listat

• Shembull: Ruajtja e listes se emrave ne


kujtesen kryesore te nje makine
• Nje strategji: ruajtja e listes se plote ne nje
bllok qelizash me adresa te njepasnjeshme
• Supozojme: 10 emra, me nga 8 germa secili; ne
total 80 qeliza te njepasnjeshme
Figura 8.8 Emrat e ruajtura ne
kujtese si nje liste e vazhdueshme
Listat e lidhura

• Problemet e hasura me siper – mund te thjeshtohen


duke memorizuar elementet e listes ne zona kujtese te
ndryshme (jo ne nje bllok te vazhdueshem)
• Ne rastin e Listes se emrave, bllok. me 9 qeliza, 8 per
germat + 1 pershenjuesin e emrit pasar.
• Do te kemi shume blloqe prej 9 qelizash te lidhura me
shenjues.
• Ky organizim, i karakterizuar nga ky sistem lidhjesh
quhet LISTE E LIDHUR
Figura 8.9 Struktura e nje liste te
lidhur
Listat e lidhura (vazhd.)

• Heqja e nje emri: kryhet duke modifikuar


shenjuesin qe fillimisht shenjon emrin qe duhet
fshire, ne menyre qe te shenjoje tek pasardhesi
• Shtimi i nje emri: gjejme nje bllok te paperdorur
prej 9 qelizash; pastaj ruajme emrin e ri ne 8
qelizat e para dhe plotesojme te 9 me adresen e
emrit te listes qe duhet te ndjeke ate te sapo futur
Figura 8.10 Fshirja e nje elementi nga nje
liste e lidhur
Figura 8.11 Shtimi i nje elementi te ri ne
nje liste te lidhur
Stivat dhe Rradhet
(Storing Stacks and Queues)

• Stivat (Stacks) zakonisht ruhen si lista te


vazhduara
• Rradhet (Queues) zakonisht ruhen si Rradhe
Cirkulare (Circular Queues)
– Ruhen ne blloqe te vazhduara ku elementi i pare
konsiderohet se ndjek elemetin e fundit
– Parandalon nje rrradhe nga “zvarritja” jashte
hapsires se saj ruajtese te caktuar
Figura 8.12 Nje stive ne kujtese
Figura 8.13 Shtimi ne rradhe me
shenjuesa head dhe tail
SPOSTIMI I RRADHES
Figure 8.14 Nje rradhe cirkulare
qe permban germat P deri te V
Pemet Binare
(Storing Binary Trees)

• Strukture e lidhur
– Cdo nyje = data cells + dy shenjuesit e bijve
– E aksesueshme nepermjet nje shenjuesi qe tregon
nyjen rrenje
• Strukture tabele e vazhdueshme
– A[1] = nyja rrenje
– A[2],A[3] = bir i A[1]
– A[4],A[5],A[6],A[7] = bir i A[2] dhe A[3]
Fig. 8.16 Organizimi konceptual dhe
aktual i nje peme binare duke perdorur
sistemin e lidhur
Figura 8.17 Nje peme ruatje pa
shenjues
Figura 8.18 Nje peme e crregullt, e
pabalancuar e paraqitur ne formen
konceptuale dhe si do te ruhet pa shenjuesa
Manipulimi i struktures se te dhenave

• Ne menyren me te mire, nje strukture duhet te


manipulohet vetem nepermjet funksionesh te
para-caktuara.
– Pershembull: Nje list zakonisht ka nje
funksioninsert per futjen e nje komponente te re
– Struktura e te dhenave nepermjet ketyre
funksioneve perben nje tool abstrakt te plote.
Figura 8.19 Nje procedure per
printimin e nje liste te lidhur
Figure 8.19 Nje funksion per printimin e
nje liste te lidhur

def PrintList (List):


CurrentPointer = List.Head
while (CurrentPointer is not None):
print(CurrentPointer.Value)
CurrentPointer = CurrentPointer.Next
Rast i shkurter Studimi

Problemi:
Te ndertojme nje tool abstrakt qe konsiston ne
nje liste emrash ne renditje alfabetike
nepermjet operacioneve search, print dhe
insert.
Figura 8.20 Germat nga A ne M te
vendosur sipas nje peme te renditur
Figura 8.21 Kerkimi binar nese lista
implementohet si nje peme binare e lidhur
Figure 8.21 Kerkimi binar nese lista
implementohet si nje peme binare e lidhur

def Search (Tree, TargetValue):


if (Tree is None):
return None # Search failed
elif (TargetValue == Tree.Value):
return Tree # Search succeeded
elif (TargetValue < Tree.Value):
# Continue search in left subtree
return Search(Tree.Left, TargetValue)
elif (TargetValue > Tree.Value):
# Continue search in right subtree
return Search(Tree.Right, TargetValue)
Figura 8.22 Pemat me te vogla psauese te
konsideruara nga procedura ne Figuren 8.18 kur
kerkohet germa J
Figura 8.23 Printimi i kerkimit te
nje peme ne rendin alfabetik
Figura 8.24 Nje procedure per printimin e
te dhenave ne nje peme binare
Figure 8.24 Nje funksion per printimin e
te dhenave ne nje peme binare

def PrintTree (Tree):


if (Tree is not None):
PrintTree(Tree.Left)
print(Tree.Value)
PrintTree(Tree.Right)
Figura 8.25 Insertimi i elementit M ne listen
B, E, G, H, J, K, N, P te ruajtura si nje peme
Figura 8.26 Nje procedure per insertimin
e nje elementi te ri ne nje liste te ruajtur si
nje peme binare
Figure 8.26 Nje funksion per insertimin e
nje elementi te ri ne nje liste te ruajtur si
nje peme binare
def Insert(Tree, NewValue):
if (Tree is None):
# Create a new leaf with NewValue
Tree = TreeNode()
Tree.Value = NewValue
elif (NewValue < Tree.Value):
# Insert NewValue into the left subtree
Tree.Left = Insert(Tree.Left, NewValue)
elif (NewValue > Tree.Value):
# Insert NewValue into the right subtree
Tree.Right = Insert(Tree.Right, NewValue)
else:
# Make no change
return Tree
Tipet e te dhenave te personalizuara
• Tipet e primitivave

integer, float, character, Boolean

• Nje programist mund te percaktoje tipet e te


dhenave qe te jene te personalizuara per te
permbushur nevojat e nje aplikimi te vecante
Tipi i te dhenave te percaktuara nga
perdoruesi (User-defined Data Type)

• Perdor nje structure aggregate per te percaktuar tipin e


ri, ne C:
struct Punonjesi
{
char Emri[25];
int Mosha;
real AftesiVlersimi;
}
• Perdor tipin e ri per te percaktuar variablat:
struct Punonjesi Menaxher, Shites;
Abstract Data Type

• Nje tip te dhenash tepercaktuara nga perdoruesi perfshin te


dhenat (representation) dhe funksionet (behavior)
• Shembull:
interface TipStive
{
public int pop();
public int push(int item);
public boolean isEmpty();
public boolean isFull();
}
Klasa dhe Objektet

• Klasa: Nje tip abstrakt te dhenash me


karakteristika shtese te tjeraj (extra)
– Karakteristikat mund te trashegohen
– Permbajtjet mund te enkapsulohen
– Metodat e ndertimit inicjalizone objektet e reja
• Objekti: nje instance e klases
Figura 8.27 Nje stive numrash te plote
(integers) te implementuara ne Java dhe C#
class StackOfIntegers implements StackType
{
private int[] StackEntries = new int[20];
private int StackPointer = 0; 
public void push(int NewEntry)
{ if (StackPointer < 20)
StackEntries[StackPointer++] = NewEntry;

public int pop()
{ if (StackPointer > 0) return StackEntries[--StackPointer];
else return 0;
}
public boolean isEmpty()
{ return (StackPointer == 0);
}
public boolean isFull()
{ return (StackPointer >= MAX);
}
}
 
Shenjuesit ne Gjuhen Makine

• Immediate addressing: Instruksioni permban


te dhenen qe do te aksesohet
• Direct addressing: Instruksioni permban
adresen e te dhenes qe do te aksesohet
• Indirect addressing: Instruksioni permban
vendndodhjen e adreses se te dhenes qe do te
aksesohet
Figure 8.28 Perpjekja e pare per zgjerimin e
gjuhes makine te paraqitur ne Appendix C duke
shfrytezuar shenjuesit
Figura 8.29 Loading nje regjister nga nje qelize
e kujteses kryesore, e individualizuar nepemjet
nje shenjuesi te memorizuar ne nje regjister

You might also like