0% au considerat acest document util (0 voturi)
6 vizualizări107 pagini

Structuri de Date Cu Java Eclipse

Acest document se referă la structuri de date și recursivitate. Explică concepte de bază precum datele, structurile de date, clasificarea structurilor de date, operațiile asupra datelor structurate și recursivitatea. Apoi descrie implementări specifice ale structurilor de date, cum ar fi stive, cozi, liste și arbori folosind Java.

Încărcat de

ScribdTranslations
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
6 vizualizări107 pagini

Structuri de Date Cu Java Eclipse

Acest document se referă la structuri de date și recursivitate. Explică concepte de bază precum datele, structurile de date, clasificarea structurilor de date, operațiile asupra datelor structurate și recursivitatea. Apoi descrie implementări specifice ale structurilor de date, cum ar fi stive, cozi, liste și arbori folosind Java.

Încărcat de

ScribdTranslations
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

333333

INDEX GENERAL
CONCEPTE GENERALE.............................................. 2
SISTEM DE PROCESARE A DATELOR. ............................. 2
REPREZENTAREA FIZICĂ A DATELOR. ............................ 3
DEFINIȚ IA STRUCTURII DE DATE: ............................. 4
CLASIFICAREA STRUCTURILOR DE DATE: ......................... 4
OPERAȚ IUNI ASUPRA DATELOR STRUCTURATE. ..................... 7
RECURSIVITATE..................................................... 8
REGULA DE RECURSIVITATE ÎN REZOLVAREA PROBLEMELOR. ........... 9
TIPURI DE RECURSIUNE. ........................................ 10
ESTRUCTURA: PILA................................................ 13
IMPLEMENTAREA STRUCTURII PILĂ ÎN JAVA. ................. 15
STRUCTURA: COADĂ SIMPLĂ......................................... 20
IMPLEMENTAREA STRUCTURII COADA SIMPLE ÎN JAVA. .......... 21
LECTURA COMPLEMENTARIA:....................................... 27
COLOANE DE PRIORITATED ............................................ 27
STRUCTURA: COADĂCIRCULARĂ....................................... 28
IMPLEMENTAREA STRUCTURII COADĂ CIRCULARĂ ÎN JAVA. ........ 30
STRUCTURA: BI COLA............................................. 38
IMPLEMENTAREA STRUCTURII BI-COADA ÎN JAVA. .............. 39
VARIANTE ALE BI-COLAS ..................................... 48
STRUCTURA: LISTĂ SIMPLĂ........................................ 51
IMPLEMENTAREA STRUCTURII LISTĂ SIMPLE ÎN JAVA. ......... 52
STRUCTURA: LISTĂ CIRCULARĂ...................................... 64
IMPLEMENTAREA LISTEI CIRCULARE ÎN JAVA, ..................... 65
STRUCTURA: LISTA DOBLEMENTE ÎNLAZATĂ........................... 76
IMPLEMENTAREA CLASEI LISTĂ DUBLĂ ÎN JAVA, ............... 77
STRUCTURA: ÁRBORI............................................. 91
ARBORII BINARI DE CĂUTARE (ABB)) ............................ 95
IMPLEMENTAREA UNUI ARBORE BINAR DE CĂUTARE ÎN JAVA. ....... 96
STRUCTURA DE DATE

CONCEPTE GENERALE

DEFINIȚIA COMPUTERULUI.

Computator, computer sau ordinator


este o ma ș ină electronică, capabilă să
reconcilia date de intrare,
a procesa ș i a produce informa ț ii
evident; totul acesta sub controlul
de un program de instruc ț iuni, care
este stocat anterior.

SISTEM DE PROCESARE A DATELOR.

Scopul oricărei computere este procesarea


date, aceste date pot fi: cifrele vânzărilor unui
supermercado, las calificaciones de un curso, lista de
clienț i, lista de furnizori, registrele angajaț ilor.

2 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

DEFINIȚIA DATULUI

Datele sunt o reprezentare simbolică (numerică,


alfabetică, algoritmică, etc.) a unui atribut sau variabil
cuantitativ. Datele descriu fapte empirice, evenimente ș i
entităț i.

Executarea programelor de instrucț iuni este reflectată în


schimbările de valoare suferite de datele de intrare, oferind
locul pentru datele de ieș ire (informaț ii).

În rezolvarea problemelor cu computerul. Proiectarea de


structura de date este la fel de importantă ca designul
algoritm, sau dezvoltarea ș i implementarea programului.

REPREZENTAREA FIZICĂ A DATELOR.

a.DEFINICIÓN DEBIT:

Este este unitatea de informa ț ie cea mai simplă posibilă în


sistemul binar. Înseamnă digit binar, sau ceea ce este
mismo, număr (cifrem) cu două valori posibile: 0 sau 1.

b.DEFINIȚIA DEBYTE:

Unitate de informaț ie care constă din 8 biț i echivalentă cu


un singur caracter, cum ar fi o literă, un număr sau un semn

special.

3 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

c.DEFINICIÓN DECARACTER:

Este un element luat dintr-un set de simboluri. În


care includ cifre, caracterele alfabetului ș i
câț iva caractere speciale.

{0,1,2,3,4,5,6,7,8,9,A,B,C....Y,z,¡,-,+,*}

d.DEFINTIA CUVÂNTULUI:

Conjunto de bi ț i care, ca unitate elementală, poate


manipula un computer. Lungimea în bi ț i a unei
o cuvânt într-un computer poate fi de 8, 16, 32, etc., ș i
depinde de microprocesorul unită ț ii centrale de
proces

DEFINIȚIA STRUCTURII DE DATE:

Înprogramareo structură de date este o formă de


a organiza unset de datesimple cu scopul de
facilita ț i manipularea sa. Un fapt esen ț ial este minimul
informaț ii care se află într-un sistem.

O structură de date define ș te organizarea ș i


interrela ț iece există între aceste date. În plus de un
set de operaț iuni care permite manipularea acestora.

CLASIFICAREA STRUCTURILOR DE DATE:


Într-un program, fiecare variabilă aparț ine unei structuri
de date definită explicit sau implicit, care
determină ansamblul operaț iunilor valide pentru ea.

4 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

DATE SIMPLICE (PRIMITIVE). Sunt cele care nu sunt


compuse din alte structuri:

a.Enteros, O structură de date primitivă. Membru al


următorul set de numere: {...,-(n+1), -n,...-2,-
1,0,1,2...n,n+1,...}

Opera ț iile fundamentale asupra numerelor întregi sunt: adunare,

scădere, înmulț ire, împărț ire, exponentiere ș i altele.

5 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
b.Reale, Numerele reale au întotdeauna un punct
decimal y pot fi pozitive sau negative. Un număr
real constă dintr-un întreg ș i o parte decimală, prin
exemplu, 0.08, 3789.25, -8.12, 3.0

Opera ț iile fundamentale asupra numerelor întregi sunt: adunare,

resta, multiplicare, împărț ire, exponentiere ș i altele

c.Booleanos, numit ș i logic. Este un element care


poate avea una din cele două valori: adevărat sau fals (1 sau
0).

Cei trei operatori booleani de bază sunt nu, ș i, sau


(negare, conjuncț ie ș i disjuncț ie)

d.Caracter, Un tip de date caracter conț ine doar un


caracter. se recunosc următoarele caractere
alfabetici ș i numerici:

- Caracteres Alfabéticos (A,B,C...X,Y,Z) (a,b,c,.....z)

- Caracteristici Numerice (1,2,3......,9,0)

- Caractere speciale (+,-,*,/,`,<,>,°,$,&....)

DATE STRUCTURATE. Datele simple pot fi combinate de


variante moduri de a forma structuri mai complexe, cum ar fi:

a.STRUCTURI DE DATE STATICE.

Sunt cei care au o cantitate fixă de memorie,


care este asignat în momentul creării sale ș i nu poate
se poate schimba în timpul execuț iei programului.

Exemplu.

Stringuri, Array-uri, Registres ș i Fiș iere

6 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
b.STRUCTURA DE DATE DINAMICE.

Sunt cei care nu au o cantitate fixă de memorie.


Cantitatea de memorie cre ș te sau scade
durante execuț ia programului.

Printre principalele avem

-Lineare: Stive, Cozi (simple, circulare, duble) ș i


Listes (simple, circulare, duble)

-Non-lineare: Copaci (general, binar, binar de


căutare) ș i Grafuri.

OPERATII ASUPRA DATELOR STRUCTURATE.


Operaț iile de bază sunt:

a.Inserț ii, adăugaț i o nouă valoare la


structură.

b.Eliminări, ș tergerea unei valori din structură.

c.Căutăria găsi o anumită valoare în


structura pentru a efectua o opera ț ie cu acesta
valoare, sub formăsecvenț ial(obinarioîntotdeauna ș i

când datele sunt ordonate).

d. Rute, vizitaț i fiecare dintre elementele


structură.

CONCLUZIE.

Fiecare structură oferă avantaje ș i dezavantaje în relaț ie cu


simplicitatea ș i eficien ț a pentru realizarea fiecărei
opera ț iune. În acest fel, alegerea structurii
datele adecvate pentru fiecare problemă; depinde de factori precum
frecven ț a ș i ordinea în care se realizează fiecare opera ț iune
despre date.

7 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

RECURSIVITATE
DEFINIȚIA FUNCȚIILOR.

Funcț iile sunt SUBPROGRAME (set de


instrucț iuni), care îndeplinesc o sarcină concretă ș i
returnează o valoare unică.

CARACTERISTICI ALE FUNCȚIILOR.

a) Au un nume (identificator),

b) Deț ine variabile pentru a primi date (parametrii de


entrada)

c) O funcț ie este invocată de programul principal u


alte funcț ii,

d) Rezultatul se stochează în numele funcț iei,

e) Pentru a returna o valoare se foloseș te cuvântul return.

8 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
RECULSIVITATE.

Recursivitatea nu este o
structura de date, altfel, una
tehnică de programare care
permite ca un bloc de
instruc ț iuni să fie executate un
un anumit număr de ori. Ș i
constituie o alternativă la utilizare
de buclele while, do while
pentru.

DEFINICIÓN DE RECURSIVIDAD.

Recursivitatea este un proces prin care o funcț ie se


se cheamă pe sine în mod repetat, până când este satisfăcută
o condiț ie stabilită.

REGULA DE RECURSIVITATE ÎN REZOLVAREA PROBLEMELOR.

Pentru a putea implementa soluț ia unei probleme în mod


recursiv, este necesar să se îndeplinească următoarele
condiț ii

a) Problema trebuie să fie definit în termeni de sine.

b) Problema trebuie să includă o condiț ie de finalizare


(criteriu de bază).

c) Când condiț ia de finalizare este adevărată,


funcț ia nu trebuie să se apeleze singură.

d) Problema trebuie să poată fi rezolvat într-un set finit


de paș i.

9 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

TIPURI DE RECURSIVITATE.
În func ț ie de numărul de func ț ii care trebuie utilizate, putem
diferentia

1.RECURSIVITATE DIRECTĂ.
a.RECURSIE SIMPLĂ. În recursia simplă, fiecare apel
recursiva generează, cel mult, un alt apel recursiv.

Ejemplo 1.

Implementa ț i o func ț ie recursivă în Java, care să calculeze


factorialul unui număr n .

int factorial(n)
int
{
(n==0) returna 1;
dacă
altfel întoarce n*factorial(n-1);
}

Exemplu 2.

Implementaț i o funcț ie recursivă în java, care să permită


a face împărț irea prin scăderi succesive .

int divizare(a,
int b) int
{
(b>a)
dacă întoarce 0;
altfel
returna diviziune(a-b, b)+1;
}

10 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
b.RECURSIE MULTIPLEXĂ. Unele apeluri recursive pot
genera mai multe apeluri la funcț ie.

Exemplu 3.

Implementaț i o funcț ie recursivă în java, care să calculeze


un număr din seria Fibonacci .

int fibonacci(n){
int

(n==1||n==2)
dacă returnaț i1;

altfel returnează fibonaci(n-1)+fibonaci(n-2);

2.RECURSIVITATE INDIRECTĂ.

c.RECURSIVITATEA MUTUALĂ. Implică mai mult de o funcț ie, care se


se sună reciproc.

Exemplu 4.

Implementaț i o funcț ie recursivă în java, care să determine


ș i un număr este impar .

publicboolean int par(n){


(n==0) returntrue
dacă ;
altfel returnează impar(n-1);
}

publicboolean impar(n){
int
(n==0) returnfalse
dacă ;
altfel întoarce par(n-1);
}

11 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
Exemplul 5.

Implementaț i o funcț ie recursivă în java, care să determine


ș i un număr este pozitiv .

publicboolean pozitiv(n)
int {
(n>0) returntrue
dacă ;
altfel returnează negativ(n);
}

publicboolean negativ(n){
int
(n<0) returnfalse
dacă ;
altfel returnează pozitiv(n);
}

IMPORTANȚA
Pentru a executa fiecare dintre funcț ii, trebuie să
creaț i clasa principală care va conț ine metoda main().

public classPrincipal {

public static void main(String[] args) {

int f = fibonacci(5);// apelează funcț ia.

System.out.println("x: " + f);// imprima f

12 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

ESTRUCTURA: PILA

DEFINIȚIE.

Unapila (stivă) este ostructura de datelinial ș i


static, în care modul de a stoca ș i a recupera
datele sunt de tipLIFO(Ultimul intrat, primul ieș it)
primul care iese.

CARACTERISTICI.

- Pentru gestionarea datelor se dispune de două


operaț ii de bază: PUSH() ș i POP.

oPUSH(), care plasează un dată în stivă,

oPOP(), care retrage ultimul date stivuit.

- În fiecare moment se are acces doar la partea superioară


de la pila denumită TOP.
- Atât pentru căutare, cât ș i pentru traseu, se face
uso de o baterie auxiliar.

13 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

REPREZENTARE GRAFICĂ A UNEI PILI.

Structura unei PILA poate fi reprezentată prin:


- Vectores,
- Liste legate.
În acest apartament, se va face prin intermediul vectorilor sau
array„s.

ELEMENTE ALE UNEI PILI.

Implementarea acestei structuri de date se va realiza


cu utilizarea vectorilor, în această în ț elegere, cităm
elemente.

maxPila:Variable que contiene la capacidad de almacenar


date în stivă.

PILA[]:Vector care împinge datele în stivă.

TOP:Puntero care indică ultima dată din stivă.

14 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

IMPLEMENTAREA STRUCTURII PILĂ ÎN JAVA.


Doar în scopuri didactice, implementarea se realizează la
prin două clase: Principal ș i Pila.

I. CLASA PRINCIPALĂ ÎN JAVA.

Permite crearea unei stive X ș i utilizarea opera ț iunilor


definite despre ea.

public classPrincipal {

public static void main(String[] args) {


Pila p1=newPila();// creează obiectul pila.

// Adaugă codul necesar pentru rezolvarea de


// probleme cu stive
// Exemplu: System.out.println("topul: " + p1.top);
}
}

II. CLASĂ PILA ÎN JAVA.

Definiț i atributele ș i metodele specifice ale stivei.

clasa Publică Pila {


// adăugaț i aici atributele ș i metodele care
// conformarea la structura de date PILA
}

VARIABELE DIN CLASA STIVĂ [ATRIBUTELOR].

final intmaxPila= 100; // defineț i dimensiunea stivei


int[] PILA; // define un vector ce
stoca datele
inttop // defineș te pointerul stivei

15 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

DEFINIȚIA OPERAȚIUNILOR ASUPRA PILILOR [METODE].

Operaț iile care se definesc asupra unei stive sunt detaliate în


continuación:

1.OPERAȚIUNI DE STAT.
Metode care permit cunoaș terea stării actuale a stivei
cum ar fi: valoarea elementului TOP, numărul de elemente,
etc.

a.CREARE Ș I INICIALIZARE STIVĂ [CONSTRUCTOR],creaț i stiva e


initializează pointerul TOP la -1.

publicPila() {
PILA=new int[maxPila];
top= -1;
}

b.PILAVACÍA, Devuelve adevărat dacă nu există niciun


element în stivă.

public booleanpilaVacia() {
returntop == -1;
}

c.DIMENSIUNE DEPILA. Întoarceț i numărul de elemente care


deț ine pila.

public int dimensiunePila() {

returntop + 1;
}

16 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
d.PILALLENA. Întoarce adevărat dacă stiva este plină.

public booleanpilaLlena() {
returntop == maxPila - 1;
}

e.MOSTRAR ELEMENTO TOP. Returnează elementul care se


găseș te în ultima poziț ie.

public intTepe() {
returnPILA[top];
}

2.OPERAȚII FUNDAMENTALE.
Sunt metode care permit gestionarea datelor stocate
în pila:

a. INSERARE UN ELEMENT. Inserează un date pe TOP în


pilă.

public void push(int elemento) {


dacă(pilaLlena()) {
System.out.println("Pila Plină! Nu s-a putut")
adăuga.
}else{
top++;
PILA[top] = element;
}
}

17 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
b. ELIMINAREA UNUI ELEMENT. Elimină un dată prin TOP în
pilă.

public intpop() {
intelemento = 0;
dacă(pilaVacia()) {
System.out.println("Pila Vida! Nu s-a putut")
elimina.
}else{
elemento = PILA[top];
top--;
}
returnelemento;
}

3.OPERAȚIUNI SUPLIMENTARE.

Metode care permit completarea opera ț iunilor


routinare precum: inseraț i N date în stivă, imprimaț i
datele stivei, etc.

a.RECORRER PILA.Măreș te toate elementele din pila de


DIN STÂNGA ÎN DREAPTA

public void imprimaPila() {


Pila PAux = new Pila();
inta;
dacă(pilaVacia())
Sistemul.out.println("Pila Vazio! Nu se poate")
nu arăta nimic.
altfel{
while(!pilaVacia()) {

18 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
a = pop();
System.out.println(" " + a);
PAux.push(a);
}
}
// returnează datele în pila sursă
în timp ce(!PAux.pilaVacia()) {
impinge(PAux.pop());
}
}

b.CĂUTAREA DE ELEMENTE. Returnează poziț ia pe care o ocupă


element în stivă. în cazul în care nu se găseș te returnează
valoarea -1.

c. INSERARE N ELEMENTE ÎN PILE. Inserează N date prin


TOP, în pilă.

public void adaugăNelementos() {


Scanner t = new Scanner(System.in);
System.out.print("Nro. de elementos a agregar a la
PILA: ");
intn = t.nextInt();
System.out.println("ingrese los elementos:");
pentru(int i = 0; i < n; i++) {
System.out.print("Pila[" + (i + 1) + "]: ");
intx = t.nextInt();
this.push(x);
}
}

19 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

ESTRUCTURA: COLA SIMPLE

Numele provine din


analogiei cu o
ventana de aten ț ie la
persoane, în care el
primul care ajunge este
primul care să fie asistat,
ș i to ț i cei care merg
ajungând, se aș ează
în continuare unul din
altul a ș teptând ca
mi-a venit rândul.

DEFINIȚIE.

O coadă este o structură de date liniară ș i statică, cu


proceduri de acces la date FIFO (Primul venit, primul servit).
Primul care intră este primul care iese, ceea ce înseamnă
că prima informaț ie care ajunge în coadă este prima care este
tratat

REPREZENTARE GRAFICĂ A UNEI COZI.

20 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
ELEMENTE ALE UNEI COZI.

maxCola:Variable que contiene la capacidad máxima de


date pe care le poate avea coada.

COLA[]:Vector que almacena los datos de la cola.

F:Frente, pointer care indică prima dată din coadă.

R:Final, pointer care indică la ultima dată din coadă.

IMPLEMENTAREA STRUCTURII DE COADĂ SIMPLĂ ÎN JAVA.

Doar în scopuri didactice, implementarea se realizează la


prin două clase: Principal ș i Cola.

I. CLASA PRINCIPALĂ ÎN JAVA.


Permite crearea unei cozi simple C1 ș i verificarea
funcț ionarea operaț iunilor definite asupra ei.

public class Principal {

public static void main(String[] args) {

Cola C1=newCola();// creează obiectul cola.

// Adaugă codul necesar pentru soluț ionarea


// probleme cu cozile

II.CLASA COADA ÎN JAVA.

Defini ț i atributele ș i metodele specifice unei cozi


simplu.

21 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public class Cola {


// Adăugaț i aici atributele ș i metodele pe care
// va conforma structura de date COLA SIMPLĂ
}

ATRIBUTELOR COLOANEI.
Se definesc elementele cozii, cum ar fi variabilele:

public class Cola {

final intmaxCola= 100; // define dimensiunea cozii


int[]COLA; // define un vector care va stoca
datele
intF; // definează pointerii faț ă
intR; // y final de la cola

//Adăugaț i aici metodele (operaț iile) care se dezvoltă


// în clase.

OPERAȚIUNI DEFINITE ASUPRA COZILOR.

Operaț iile care se definesc asupra unui coadă simplă sunt:

1.OPERAȚ IUNI DE STAT.

a.CREARE Ș I INIȚIALIZARE COADĂ [CONSTRUCTOR].

publiccola() {
COLA =new int[maxCola];
F = -1;
R = -1;
}

22 Ing. Pascual Yana Chejo


STRUCTURA DE DATĂ
b.COLA VACÍA, Returnează adevărat dacă nu există niciun
element în coadă.

public boolean ColaVacia() {


return((F == -1) && (R == -1));
}

c.TAMAÑO DE COLA. Returnează numărul de elemente care


are coada.

public int DimensiuneCoada() {

dacă(colaVacia())
returnR - F;
return(R - F) + 1;
}

d.COLA LLENA. Devine adevărat dacă coada este plină.

public booleanColaLlena() {
return(R+1) == maxCola;
}

23 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
2.OPERATII ELEMENTARE

a.INSERARE UN ELEMENT. Inserează un element la FINAL


[R] la coadă.

public void insera(int x) {


dacă(colaPlina()) {
Cola Plină! Nu s-a putut
adicionar.
}else{
dacă((F == -1) && (R == -1)) {
R++;
COLA[R] = x;
F = 0;
}else{
R++;
COLA[R] = x;
}
}
}

b.ELIMINAREA UNUI ELEMENT. Elimină un element pe FRENTE [F]


în coadă.

public inteliminar() {
intx = -1;
dacă(colaVacia()) {
Cola Vacia! Nu s-a putut
elimina.
}else{
dacă(R == F) {
x = COLA[F];
F = -1;
R = -1;
}else{
x = COLA[F];
F = F + 1;
}
}
returnx;
}

24 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
3.OPERAȚII COMPLEMENTARE

a.RECORRER COLA.Măsură elemente ale cozii din STÂNGA


A DREAPTA

public void Recorrer() {


dacă(colaVacia()) {
System.out.println("Cola Vacia! Nu se poate")
afişaţi nimic.
}else{
cola aux =newcola();
System.out.print("COLA: ");
while(!colaVacia()) {
intx = elimina();
System.out.print(x + " ");
aux.insera(x);
}
while(!aux.colaVacia()) {
inserare(aux.elimina());
}
}
}

b.CĂUTAREA ELEMENTELOR.

Returnează poziț ia unui element în interiorul cozii. În


în cazul în care nu se găseș te, returnează valoarea -1.

public void Cautare() {


// rămâne ca sarcină pentru student
}

25 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
c.INSERTA N ELEMENTE ÎN COADA. Inserează N elemente prin
finalul în coadă.

public void InserareNElemente() {


Scanner in = new Scanner(System.in);
System.out.print("Nro.Elemente: ");
intn = in.nextInt();
System.out.println("Introduceț i elemente:");
pentru(int i = 0; i < n; i++) {
intx = in.nextInt();
insera(x);
}
}

TAREA Nr.2.

În clasa coadă simplă:

a. Dezvoltaț i o metodă care să permită afiș area primului


elementul din coadă.
b. Dezvoltaț i o metodă care să permită afiș area ultimei
elementul din coadă.
c.Dezvoltaț i o metodă care să permită căutarea unei valori în
încoadă ș i returnează poziț ia pe care o ocupă acesta în coadă.
d.Dezvoltaț i o metodă care permite eliminarea primelor N
elementele cozii.
e.Desenvelopaț i o metodă care să permită încărcarea cu N elemente
aleatorii la coadă.

26 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

LECTURA COMPLEMENTARIA:
COLA DE PRIORITATE
O coadă de priorităț i este o structură de date în care
elementele se tratează în ordinea indicată de o
prioritate asociată fiecăruia. Dacă mai multe elemente au
aceeaș i prioritate, se vor gestiona în mod convenț ional în funcț ie de
poziț ia pe care o ocupă.

Acest tip special de coada are aceleaș i operaț ii ca ș i


cozile, dar cu condi ț ia ca elementele să
se acordă în ordinea priorităț ii.

Înț elegând prioritatea ca o valoare numerică ș i alocând pentru


alte priorităț i, valori mici.

Forme de implementare:

- Adăuga ț i un câmp fiecărui nod cu prioritatea sa. Rezultă


convenabil să men ț ii coada ordonată după ordine de
prioritate.
- Crea atâtea cozi câte priorităț i există ș i stochează fiecare
element în coada sa.

Tipuri de cozi de prioritate

Cozi de priorită ț i cu ordonare ascendentă: în ele


elementele sunt inserate în mod arbitrar, dar la
ora de a îi extrage, se extrage elementul cel mai mic
prioritate.
-Cozi de priorită ț i cu ordonare descrescătoare: sunt
egale cu cozile de prioritate cu ordonare
ascendent, dar când se extrage elementul, se extrage cel de
prioritate majoră.

27 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

ESTRUCTURA: COLA CIRCULAR

Eliminările care se efectuează într-o coadă simplă generează


spaț ii care nu pot fi reutilizate. Soluț ia pe care o
descrie implica reutilizarea acestor spaț ii, prin intermediul
mecanismul numit COADĂ CIRCULARĂ.

DEFINIȚIE.

O coadă circulară este o structură de date liniară ș i


statică, care permite inserarea de date în spa ț iile
generate prin metoda elimina() a clasei coadă, odată ce
că s-a atins capacitatea maximă (maxColac).

CARACTERISTICI ALE UNEI COLA CIRCULARE.

O coadă circulară este o structură de date în care


datele vor fi organizate logic într-o formă circulară.

28 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
- Eliminările, ca o coadă simplă, se efectuează
porFC(frente).
- Inserț iile se efectuează prin RD (final). Dacă se
ar fi ajuns la maxColac, se inserează în spaț ii
generateț i prin metoda elimina() .
- Pentru căutări ș i parcursuri în cozile circulare,
se foloseș te o coadă auxiliară.

REPRESENTACIÓN GRÁFICA DE UNA COLA CIRCULAR.

În această sec ț iune vor fi reprezentate cozile


circulare prin vectori sau array-uri unidimensionale.

a)

b)

29 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
ELEMENTE ALE UNEI COZI CIRCULARE.

maxColac:Variable que contiene la capacidad de la cola.

COLAC[]:Vector que almacena los datos de la cola.

FC: pointer care indică primul date din coadă.

RC: pointer care indică spre ultima dată din coadă.

IMPLEMENTAREA structurii COADĂ CIRCULARĂ ÎN JAVA.


Cu scopuri didactice, implementarea cozii circulare se
realizaț i prin intermediul a două clase: principală ș i colă circulară.

I. CLASA PRINCIPALĂ ÎN JAVA.


Creează o coadă simplă C1 ș i confirmă funcț ionarea acesteia.
operaț iuni definite asupra ei.

clasa publică Principal {

public static void main(String[] args) {

ColaCircular CC1 = newColaCircular();

// creează obiectul coadă.

// Adaugă codul necesar pentru rezolvarea


// probleme cu cozile

II.CLASSA COADA CIRCULAR ÎN JAVA.

Define ț i atributelor ș i metodelor specifice unei cozi


circular.

30 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
public class ColaCircular {
// Adăugaț i aici atributele ș i metodele care
// va conforma structura de date COADA SIMPLĂ
}

ATRIBUTELOR STRUCTURII COADA CIRCULARĂ.


Se definesc elementele cozii, cum ar fi variabilele:

public class ColaCircular {

final intMaxColac= 100; // define dimensiunea cozii


int[]COLAC; // define un vector care va stoca
datele
intFC; // definează pointerii faț ă
intRC; y final de la cola

//Adăugaț i aici metodele (operaț iile) care se dezvoltă


// în clase.

OPERAȚII DEFINITE ASUPRA COZILOR.

Operaț iile care se definesc asupra unei cozi simple sunt:

1.OPERAȚ IUNI DE STAT.

a.CREARE Ș I INIȚIALIZARE COADĂ CIRCULARĂ [CONSTRUCTOR].

publicColaCircular() {
COLAC =new int[MaxColac];
FC = -1;
RC = -1;
}

31 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
b.COLA CIRCULAR VACÍĂ, Devuelve adevărat dacă nu există
niciun element în coadă.

public boolean ColaVacia() {


return((FC == -1) && (RC == -1));
}

c.DIMENSIUNE COADĂ CIRCULARĂ. Returnează numărul de elemente


ce are în coadă.

public int Dimensiune() {

dacă(ColaVacia())
return(RC - FC + MaxColac) % MaxColac;
return((RC - FC + MaxColac) % MaxColac) + 1;
}

d.COLA CIRCULAR LLENA. Devuelve adevărat dacă coada este


plină.

public boolean ColaLlena() {


returnTamaño() == MaxColac;
}

32 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
2.OPERAȚII FUNDAMENTALE

a.INSERTAR UN ELEMENTO EN LA COLA CIRCULAR. Inserta un


elementul pentru FINAL [RC] în coadă.

public void Insertar(int x) {


dacă(ColaLlena()) {
Cola Plină! Nu s-a putut
adicionar.)
}else{
dacă((FC == -1) && (RC == -1)) {
RC = RC + 1;
COLAC[RC] = x;
FC = 0;
}else{
dacă(RC == (MaxColac - 1)) {
RC = 0;
COLAC[RC] = x;
}else{
RC = RC + 1;
COLAC[RC] = x;
}
}
}
}

33 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

b. ELIMINAREA UNUI ELEMENT DIN COADA CIRCULARĂ. Elimină un


element pentru FATA [FC] în coadă.

public intȘ terge() {


intx = -1;
dacă(ColaVacia()) {
Cola Vazia! Nu s-a putut
eliminaț i.
}else{
dacă(RC == FC) {
x = COLAC[FC];
FC = -1;
RC = -1;
}else{
dacă(FC == (MaxColac - 1)) {
x = COLAC[FC];
FC = 0;
}else{
x = COLAC[FC];
FC = FC + 1;
}
}
}
returnx;
}

34 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

c.RECORRER COADA CIRCULAR.Muș trii toate elementele de


la cola circular (de STÂNGA ÎN DREAPTA)

public void Recorrer() {


dacă(ColaVacia()) {
System.out.println("Cola Vacia! No se puede
nu arăta nimic.
}else{
ColaCircular CCaux =newColaCircular();
System.out.print("COLAC: ");
while(!ColaVacia()) {
intx = Eliminare();
System.out.print(x + " ");
CCaux.Insertar(x);
}
while(!CCaux.ColaVacia()) {
Inserare(CCaux.Ș terge());
}
}
}

d.CĂUTAREA UNUI ELEMENT. Afiș ează locaț ia (indicele)


de un element din coada circulară. Dacă se
găseș te, altfel afiș ează un mesaj de Eroare.

35 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public voidCautare() {
int pos=-1;
int c=0;
Scanner in = new Scanner(System.in);
System.out.println("Introduceț i valoarea de căutare:");
inteb= in.nextInt();
dacă(ColaVacia()) {
Cola Vacia! Nu se poate
efectuază căutarea fără niciun element.
}else{
ColaCircular CCaux =newColaCircular();
while(!ColaVacia()) {
pos = FC;
intx = Eliminar();
dacă (x == eb) {c=c+1;
System.out.println("poziț ia: " + pos);
CCaux.Insertar(x);
altfel{ CCaux.Insertar(x);}
}
while(!CCaux.colaVacia()) {
Inserare(CCaux.Ș terge());
}
}
dacă(c == 0)) { System.out.println("Nu…!, nu există
elementul din Coada Circulară.

}else{ System.out.println(" S-a găsit: " + c +


elemente în coada circulară
}
}

36 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
3.OPERAȚIUNI COMPLEMENTARE

a. INSERARE N ELEMENTE ÎN COADA CIRCULARĂ. Inserează N


elemente pentru FINAL în coadă.

public void InsertaN() {


Scanner in = new Scanner(System.in);
System.out.print("Nr.Elemente: ");
intn = in.nextInt();
System.out.println("Introduceț i elementele:");
pentru(int i = 0; i < n; i++) {
intx = in.nextInt();
Inserare(x);
}
}

EXERCIȚII.

a.Dezvolta o metodă care să permită afiș area primului


elementul din coadă.
b.Dezvoltarea unei metode care să permită afiș area ultimei
elementul din coadă.
c.Dezvoltarea unei metode care să permită eliminarea primelor N
elemente ale cozii.
d.Dezvoltaț i o metodă care să permită încărcarea cu N elemente
aleatori la coadă.

37 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

STRUCTURA: BI COLO

DEFINIȚIE. O BI-COLĂ este o structură de datelinial ș i


estatică, care permite inserarea ș i ș tergerea de date prin ambele păr ț i

extreme.

Este un mecanism care integrează într-o structură unică


funcț ionalităț ile stivei ș i cozii.

CARACTERISTICI ALE UNEI BI-COLĂ.

- Eliminările se efectuează din fa ț ă, este


spune porFI(stânga) sau FD(dreapta).
- Inserț iile se fac la final, fie că acesta este
RI(stânga)oRD(dreapta).
- Pentru căutări ș i trasee în Bi-colas, se face
uso de o coadă auxiliar.

38 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

REPREZENTARE GRAFICĂ A UNEI COZI CIRCULARE.

Se va reprezenta o bi-colă, prin intermediul vectorilor la care


sunt cunoscuț i ș i sub denumirea de array-uri unidimensionale.

ELEMENTE ALE UNEI BI-COLI.

MaxBiCola: Variabilă care conț ine capacitatea bi-


cola.

BICOLA[]:Vector que almacena los datos de la bi-cola

FI: pointer care indică către prima dată pe partea stângă


de la bi-cola.

RI: pointer care indică ultima informaț ie pe partea stângă


de la bi-cola.

FD: pointer care indică către primul dat pe partea dreaptă


de la bi-cola.

RD: pointer care indică ultima dată pe partea dreaptă


de la bi-cola.

IMPLEMENTAREA STRUCTURII BI-COLOANĂ ÎN JAVA.

Cu scopuri didactice, implementarea se realizează prin


două clase: Principal ș i BiCola.

I. CLASE PRINCIPAL ÎN JAVA.


Cree un obiect BC1 (Bi-Cola) ș i se execută operaț iile care
s-au definit asupra acelei structuri de date.

39 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public classPrincipal {

public static void main(String[] args) {

BiCola BC1=newBiCola();

// creează obiectul bi-colă.

// Adaugă codul necesar pentru rezolvarea de


// probleme cu cozile

}
}

II.CLASA BI-COLA ÎN JAVA.

Define los atributos y los métodos propios de una Bi-Cola.

public class BiCola {


// Adăugaț i aici atributele ș i metodele care
// va conforma structura de date BI-COLA
}

ATRIBUTELE STRUCTURII COLOANE CIRCULARE.


Se definesc elementele cozii, cum ar fi variabilele
cu cei cu care se va implementa această nouă structură:

public class BiCola {

final intMaxBiCola= 100;// define dimensiunea cozii


int[]BICOLA; // define un vector care va stoca
datele
intFI,FD; // define los punteros frente

intRI,RD; y final de la cola


//Adăugaț i aici metodele (operaț iile) care vor fi dezvoltate
// în clase.

40 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

1.OPERAȚ IUNI ELEMENTARE SAU DE STAT.

a.CREARE Ș I INIȚIALIZARE BI-COLA [CONSTRUCTOR].

publicBiCola() {
BCOLA =new int[MaxBiCola];
FI= -1; FD= -1;
RI= -1; RD= -1;
}

b.COLA VACANTĂ, Returnează adevărat dacă nu există nimic


element în bi-cola.

public boolean colaVacia() {


return((FI == -1) && (RI == -1) && (FD == -1)
&& (RD == -1));
}

c.TAMAÑO DE LA BI-COLA. Devuelve el número de elementos


ce posedă bi-cola

public int DimensiuneCoada() {

returnează(RI - FI) + 1;
}

d.COLA LLENA EXTREMO DERECHO. Devuelve adevărat dacă bi-


cola este plină, când se citeș te de la STÂNGA la DREAPTA

public boolean ColaLlenaRI() {


returnRI == (MaxBiCola–1);
}

41 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
e.COLA LLENA EXTREMO IZQUIERDA. Returnează adevărat dacă
bi-cola este plină, atunci când este citită de DREAPTA la STÂNGA

public boolean ColaLlenaRD() {


return(RD - 1) < 0;
}

OPERATII FUNDAMENTALE

a. INSERARE ELEMENT PE EXTREMUL DIN DREAPTA. Inserează un


elementul pentru FINALUL STÂNG în bi-coada; întotdeauna ș i
cuando se pueda, caso contrario despliega un mensaje de
eroare.

public void InserareRI(int x) {


dacă (ColaLlenaRI()) {
Sistemul.out.println("Coca Plină! Nu s-a putut")
adauga la FINAL STÂNGÄ.
}else{
dacă(colaVacia()) {
RI = RI + 1;
BICOLA[RI] = x;
FI = 0; FD = 0; RD = 0;
}
RI = RI + 1;
BICOLA[RI] = x;
FD = RI;
}
}
}

42 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
b.INSERTARE ELEMENT DE LA EXTREMUL STÂNG. Inserează un
element pentru FINALUL DREPT în bi-coadă. Dacă bi-
coada este goală ș i dacă există element în pozi ț ia 0,
afiș ează un mesaj de eroare.

public void InserareRD(int x) {


dacă(colaLlenaDI()) {
Sistemul.out.println("Cola Plină! Nu s-a putut")
adicionar.
}else{
if(colaVacia()) {
Nu s-a putut adăuga
por elemente FINAL DREPT.
}else{
RD = RD - 1;
BICOLA[RD] = x;
FI = RD; }
}
}

c. ELIMINARE ELEMENT DIN EXTREMUL STÂNG. Elimină un


elementul pentru FATA STÂNGA a bi-cozii. Se pune în
consideraț i următoarele cazuri:

Cazul 1: dacă este vorba de un bi-coadă goală, atunci


afisează un mesaj de a nu efectua procesul.
Caz 2: Element unic, se elimină elementul ș i toate
punctele se asează la -1.
Cazul 3: dacă ar exista elemente ș i nu ar fi singurul
atunci se elimină datele ș i se actualizează
puntero a la siguiente posición.

43 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public inteliminarFI() {
intx = -1;
dacă(colaVacia()) {
Cola Vacia! Nu s-a putut
elimina.
}else{
if(RI == FI) {
x = BICOLA[FI];
FI = -1; RI = -1;
FD = -1; RD = -1;
}else{
x = BICOLA[FI];
FI = FI + 1;
RD = FI;
}
}
returnx;
}

d.ELIMINARE ELEMENT DIN EXTREMUL DREPT. Elimină un


elementul bi-cola pe partea din faț ă dreaptă.
Cazul 1 ș i 2: Se procedează la fel ca în secț iunea anterioară.

Cazul 3: se elimină elementul ș i se actualizează pointerul


a o poziț ie anterioară.

public inteliminarFD() {
intx = -1;
dacă(colaVacia()) {
Cola goală! Nu s-a putut
eliminar.

44 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
}else{
dacă(RD == FD) {
x = BICOLA[FD];
FI = -1; RI = -1;
FD = -1; RD = -1;
}else{
x = BICOLA[FD];
FD = FD - 1;
RI = FD;
}
}
returnx;
}

e.RECORRER BI-COLA DE IZQUIERDA A DERECHA.Muestra todos


elementele bi-colăi DE LA STÂNGA LA DREAPTA,
ori de câte ori ar exista vreun element în cazul
în caz contrar, afiș ează un mesaj de eroare.

public void arataID() {


dacă(colaVacia()) {
Cola Vacantă!!!!!
}else{
bcola aux =newbcola();
System.out.print("COLA: ");
while(!colaVacia()) {
intx = eliminaFI();
System.out.print(x + " ");
aux.insertarRI(x);
}
while(!aux.colaVacia()) {
insereazăRI(aux.eliminăFI());
}
}
}

45 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

f.RECORRER BI-COLA DE DERECHA A IZQUIERDA.Mostra toate


elementele bi-colii de DREAPTA LA STÂNGA, dacă
în cazul contrar, afiș ează un mesaj de eroare.

public void afiseazaDI() {


dacă(colaGoală()) {
Cola goală! Nu se
nu poate afiș a nimic.
}else{
bcola aux =newbcola();
System.out.print("BICOLA: ");
while(!colaVacia()) {
intx = eliminareFD();
System.out.print(x + " ");
aux.insereazăRI(x);
}
while(!aux.colaVacia()) {
inserareRI(aux.eliminareFD());
}
}

g.CĂUTAREA DE ELEMENTE ÎNTR-O BI COADĂ. Afiș ează


locaț ia (indicele) unui element în cadrul bi-cola,
la fel ca totalul apari ț iilor, dacă se.
găseș te; în cazul contrar, afiș ează un mesaj de eroare.

46 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public voidCaută() {
int pos=-1;
int c=0;
Scanner in = nou Scanner(System.in);
System.out.println("Introduceț i valoarea de căutare:");
inteb= in.nextInt();
dacă(ColaVacia()) {
Bi-Cola Vacia! Nu se
nu poate efectua căutare de niciun
elemento.
}else{
BiCola BCaux = new BiCola();
while(!ColaVacia()) {
pos = FC;
intx = EliminarFI();
dacă (x == eb) {c=c+1;
System.out.println("poziț ie: " + pos);
BCaux.InsertarRI(x);}
altfel{ BCaux.InserareRI(x); }
}
while(!BCaux.colaVacia()) {
InserareRI(BCaux.Ș tergeFI());
}
}
dacă(c == 0)) { System.out.println("Nu…!, nu există
elementul din Coada Circulară.
} else { System.out.println(" S-a găsit: " + c +
elemente în coada circulare
}
}

47 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
2.OPERAȚIUNI COMPLEMENTARE

a. INSERARE N ELEMENTE ÎN BI-COLA. Permite inserarea N


elemente pentru FINALUL STÂNGHII în bi-coadă.

public void inserareNElemente() {

Scanner in = new Scanner(System.in);


System.out.print("Nr. Elemente: ");
intn = in.nextInt();
System.out.println("Introduceț i elemente:");
pentru(int i = 0; i < n; i++) {
intx = in.nextInt();
inseraRI(x);
}
}

VARIANTELOR DE BI-COLAS
Este posibil să definiț i restricț ii într-o biciclă în raport cu
tipul de intrare sau tipul de ieș ire a datelor.

Există două variante de cola dublă:

a. DOBLE COLA DE ENTRADA RESTRINGIDA. O bicola cu


intrare restringerată este cea care permite doar
inser ț ii printr-unul dintre extreme [FINAL]. Dar
realiza eliminările de ambele extremităț i.

48 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

b.DOBLE COLA DE SALIDA RESTRINGIDA. O bicola cu


restric ț ia la ie ș ire este aceea care admite
inser ț ii de la ambele capete. Dar elimină doar
date de unul dintre capete [FRONTE].

TAREA NRO.5

a. Implementează clasa BiColaEntradaRestrungida.

b. Implementaț i clasa BiColaSalidaRestribgida

49 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
EXERCIȚII.

a.Dezvoltarea metodelor care permit afiș area primului


elementul de la bi-cola. (considera ț i atât pe cel de la
stânga cu cea din dreapta)
b.Dezvoltaț i metodele care permit afiș area ultimei
elementul de la bi-cola. (considera ț i atât pe cel de la
stânga cu cea de dreapta)
c.Dezvoltaț i o metodă care să permită eliminarea primelor N
elementele bi-cola.
d.Dezvoltarea unei metode care să permită încărcarea cu N
elemente, într-o formă aleatorie bi-cola.
e.Dezvoltarea unei metode care să permită centralizarea
operaț iunea insertarRI() ș i insertarRD().
f.Dezvoltarea unei metode care să permită centralizarea
operaț iunea EliminarFI() ș i EliminarFD().

50 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

ESTRUCTURA: LISTĂ SIMPLĂ

Listele permit organizarea


numeroase entită ț i ale
lumea reală, cum ar fi
datele studen ț ilor de
un paralel, datele despre
personalul angajaț ilor unei
instituț ie programe
informatici stoca ț i în
un disc magnetic, etc.

DEFINIȚIA LISTEI

Este o structură de date liniară ș i dinamică, compusă din


o secvenț ă de elemente numite noduri care corespund la
un acelaș i tip. Ș i în care, din fiecare dintre ei se poate
indicaț i care este următorul (în cazul în care există).

Nodurile pot fi inserate la început, la sfârș it sau înainte de


după un nod X al listei. Tipărirea listei se
realiza în ordine ascendentă, de la primul nod până la
ultimul.

REPREZENTAREA LISTELOR SIMPLICE.

51 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
ELEMENTE ALE UNEI LISTE SIMPLE.

a.NODO. Variabilă care este compusă dintr-un câmp de date


(almacena los dato o información) y campo apuntador
(conț ine adresa de memorie a următorului nod de
lista).

b.PRIMERO.Puntero de tip nod, care pointează la adresa


de memoria a primului nod al listei.

c.ULTIMO.Puntero de tipo nodo, que apunta a la dirección


de memoria al ultimului nod din listă.

IMPLEMENTAREA STRUCȚIEI LISTĂ SIMPLĂ ÎN JAVA.

Numai în scopuri didactice, implementarea se realizează la


prin intermediul a două clase: principal, nod ș i listă simplă.

I. CLASE PRINCIPAL ÎN JAVA.


Ce permite crearea unei liste simple X ș i utilizarea acestora
operaț ii definite asupra ei.

public classPrincipal {

public static void main(String[] args) {

ListaSimple LS1=newListaSimple();
// creează obiectul Listă Simplă.
// Adaugă cod pentru rezolvarea problemelor
}
}

52 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

II.IMPLEMENTAREA Clasei NOD în JAVA.Se creează un nod


cu două câmpuri, unul pentru a stoca informa ț ia ș i
altul un indicator.

public class Nodo {


intdato;
Nodosiguiente;
}

III. IMPLEMENTAREA CLASEI LISTĂ SIMPLĂ ÎN JAVA, Creează


lista, se declară pointerii care vor indica spre primul ș i
ultimul nod al listei.

public class ListaSimplă {


// Adăugaț i aici atributele ș i metodele clasei
lista....!
}

ATRIBUTOARELE UNEI LISTE SIMPLE.

public class ListaSimple {


Nodoprimero;
Nodoultimo;
// Adăugaț i aici metodele clasei listă....!
}

OPERATIUNI ASUPRA UNEI LISTE. Opera ț iile care se


se dezvoltă pe liste; se clasifică în operaț iuni de
stare, opera ț iuni fundamentale ș i opera ț iuni
complementare:

53 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
1.OPERAȚ IUNILE DE STAT sunt cele care verifică
starea actuală a listei, cum ar fi: verifica ț i dacă există vreo
element, care este primul din listă, etc.

a.Inicializa lista.Inicializează pointerii listei,


asignează valoare null.

publiclista() {
primero =null; ultimo =null;
}

b.Lista goală. Returnează adevărat dacă lista nu conț ine


niciun nod.

public boolean listaVacia() {


return((primero ==null) && (ultimul ==null));
}

c.Tamaño de lista.Returnează numărul de noduri pe care le are


lista simplă.

public intTamañoLista() {
inttam = 0;
dacă(listaVacia()) {
return0;
}else{
nodo aux = primul;
while(aux !=null) {
tam++;
aux = aux.următor;
}
}
returntam;
}

54 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
2.OPERAȚ II FUNDAMENTALE, acestea sunt metodele care
permit să insera ț i noduri noi ș i să le elimina ț i pe rând
extremităț ile.

a.Insera la începutul listei.Se iau în considerare


următoarele cazuri:

55 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public void inserareLaInceput(int xdato) {


nodo nou =newnodo();
nuevo.dato = xdato;
dacă(listaVacia()) {
nuevo.siguiente =null;
ultimul = primul = nou;
}else{
nuevo.siguiente = primul;
primero = nuevo;
}
}

b.Inserț ie în mediu, cazul în care lista ar avea


elemente deja, Se creează un nou nod ș i se inserează în
poziț ia indicată de utilizator.

Implementarea în Java rămâne ca practică pentru un


student

56 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
c.Insera ultimul nod în listă. Inserează un nod în
final de la lista [ultimul nod].

public voidinsertarAlFinal(intxdato) {
nodo nuevo =newnodo();
nou.dato = xdato;
dacă(listaVacia()) {
nuevo.siguiente =null;
ultimul = primul = nou;
}else{
nuevo.siguiente =null;
ultimo.siguiente = nou;
ultimo = nuevo;
}
}

d. Elimina primul nod din listă. Elimină nodul care se


găseș te mai întâi în listă

57 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public inteliminarAlInicio() {

intx = -1;
if(listaVacia())
Lista goală..!, nu sunt elemente.
altfel{
dacă (primul == ultimul) {
x = primero.dato;
primul = ultimul = null;
}else{
x = primero.dato;
primul = primul.următor;
}
}
returna;
}

58 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

e.Ș terge ultimul nod din listă. Ș terge nodul


ce se află ultimul în listă.

59 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public inteliminarAlFinalUltimo() {
intx = -1;
dacă(listaVacia())
System.out.println("Lista gol..!, nu se ")
a putut elimina
altfel{
dacă(primul == ultimul) {
x = primero.dato;
primul = ultimul = null;
}else{
nodo aux = primul;
while(aux.siguiente != ultimul) {
aux = aux.următoare;
}
x = ultimul.dato;
ultimul = aux;
ultimo.siguiente = null;
}
}
returnx;
}

f.Parcurge lista simplă. Afiș ează pe ecran conț inutul


de la lista.

60 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public void aratăLista() {


nodo aux = primul;
dacă(aux == null)
Lista goală...! Nu există
nimic de arătat
altfel{
while(aux !=null) {
System.out.print(" " + aux.dato);
aux = aux.urmator;
}
}
}

g.Caută un element într-o listă, afiș ează poziț ia.


Afiș ează pe ecran locaț ia unei valori în interiorul
la lista.

61 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public void cauta() {


Scanner in = new Scanner(System.in);
System.out.println("Introduceț i elementul de căutat:");
int x = in.nextInt();
nodo aux = primul;
intcont= 0;
intpos = 0;
dacă (ListaVacia()){System.out.println(“Lista Goală..!
nu există elemente de căutare
în listă." );
altfel {
while(aux !=null) {
pos++;
dacă(x == aux.dato) {
cont=cont+1;
System.out.println("poziț ie:" + pos);
aux = aux. următor;
}else{
aux = aux.siguiente;
}
}
if(cont ==0) {
Acest dată nu există..!
În lista);
}else{
s-a găsit un total de:
+ cont + "elemente în listă";
}
}

62 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
3.OPERATII COMPLEMENTARE, sunt acele metode care sunt
adicionale la operaț iile fundamentale, cum ar fi parcurgerea
lista, afiș aț i datele din listă, etc.

EXERCIȚII.

1.Dezvoltaț i o metodă care să afiseze pe ecran Prima de


lista.
2.Dezvoltarea unei metode care să afiș eze pe ecran Ultimul de
lista.
3.Dezvoltarea unei metode care să afiș eze pe ecran
Localizarea unui dat în cadrul listei.
4.Dezvoltarea unei metode care să permită inserarea unui nod înainte
de un anumit termen.
5.Develop a method that allows inserting a node afterwards
de un anumit datum.
6.Dezvoltarea unei metode care să permită inserarea unui nod într-o
poziț ie dată.
7.Dezvoltarea unei metode care să permită eliminarea unui anumit
data.
8. Dezvoltarea unei metode care să permită Eliminarea unui nod dintr-o
poziț ie determinată.
9.Dezvoltarea unei metode care să permită inserarea a N elemente în
listă.

63 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

ESTRUCTURA: LISTA CIRCULAR

Éstas listas poseen nodos simples que generan una secuencia


circular. Unde inser ț ia unui nou nod, precum ș i a sa
eliminarea nu rupe acea structură circulară.

DEFINIȚIA LISTEI CIRCULARE.

Este o structură de date liniară ș i dinamică, în care


campo următor al ultimului nod, indică către primul nod al
lista.
Inserț iile ș i eliminările nodurilor simple se fac
se realizează în general prin extremităț ile listei.

REPREZENTARE GRAFICĂ.

ELEMENTE ALE UNEI LISTE SIMPLES.

a.NODO, Variabilă care este compusă dintr-un câmp de date ș i


campo de legătură care indică către următorul nod din listă.

64 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

b.PRIMUL. Punctator de tip nod, care punctează către adresa


de memoria a primului nod al listei.

c.ULTIMO. Punter de tip nod, care indică adresa de


memoria ultimului nod din listă.

IMPLEMENTAREA UNEI LISTE CIRCULARE ÎN JAVA

Din motive didactice, implementarea se


realizată prin clasele: nod, listaCircular ș i
principal; Fiecare dintre ele pe o fiș ă separată.

I. IMPLEMENTAREA CLASEI NODULUI,


Se creează un nod cu două câmpuri, unul pentru a stoca
informaț ie ș i cealaltă un pointer.

public class nod {


int dato;
nodul următor;
}

II. IMPLEMENTAREA Clasei Principale


În această clasă se găseș te metoda main(). Ș i ne va permite
a testa metodele pe care le vom dezvolta.

public class principal {

public static void main(String[] args) {


listaCircular LC1 = new listaCircular();

// v1.dimensiuneLista();
// v1.listaVacia(); ș i alte instrucț iuni
}
}

65 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
III. IMPLEMENTAREA CLASEI LISTA CIRCULAR,
Creează lista, se declară pointerii care vor indica către
primul ș i ultimul nod al listei.
ATRIBUTELE CLASEI LISTA CIRCULAR.

public class listaCircular {


nodul primul;
nodo ultim
// Adăugaț i aici toate metodele clasei
listaCircular..!
}

OPERATII ASUPRA UNEI LISTE. Operatiile care se


dezvoltă despre listele circulare sunt acelea ș i care
cu o listă simplă.

1.OPERAȚ IUNI DE STAT, acelea care verifică starea


actual de la lista cum ar fi: verificaț i dacă există un element.
cine este primul de pe listă, etc.

a.Inicializa lista.Inicializează pointerii listei,


asigna valoare null.

publiclistaCircular() {
primero =null;
ultimo =null;
}

b.Listă goală. Returnează adevărat dacă lista nu conț ine


niciun nod.

66 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public boolean listaVacia() {


return((primero == null) && (ultimul == null));
}

c.Dimensiunea listei.Returnează numărul de elemente care


poate lista.

public int tamanioLista() {


inttam = 0;
dacă(listaVacia()) {
return0;
}else{nodo aux = primul;
făcând

tam++;
aux = aux.urmatorul;
}în timp ce(aux != primul);
returntam;
}

2.OPERAȚIUNILE FUNDAMENTALE, acestea constituie metodele care


permit în inserarea de noduri noi ș i eliminarea lor unul câte unul

extremităț ile.

a.Insera primul nod în listă.În cazul în care


lista să nu aibă niciun element, se creează noul nod
ș i va actualiza pointerul.

67 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public void inserareLaInceput(int x dato) {


nodo nou = newnodo();
nuevo.dato = xdato;
dacă ((primul ==null) && (ultimul ==null)) {
primul = ultimul = nou;
ultimul.suivant = primul;
}else{
nuevo.siguiente = primero;
primero = nuevo;
ultimo.siguiente = primero;
}
}

b.Inserț ie în mediu, cazul în care lista ar avea


elemente deja, Se creează un nou nod ș i se inserează în
poziț ia indicată de utilizator.
Implementarea în java rămâne ca practică pentru
student

68 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
c.Insera ultimul nod în lista.Insera un nod la
final de la lista [ultimul nod].

public void inseraLaFinal(int x dato) {


nodo nuevo =newnodo();
nuevo.dato = xdato;
dacă(listaVacia()) {
primul = ultimul = nou;
ultimul.următor = primul;
}else{
ultimo.siguiente = nou;
ultimo = nuevo;
ultimul.siguiente = primul;
}
}

d.Scoate nodul iniț ial din listă. Ș terge nodul care


se află mai întâi pe listă.

69 Ing. Pascual Yana Chejo


STRUCTURI DE DATE

public inteliminarElPrimero() {

intx = -1;
dacă(listaVacia())
Lista goală..!, nu există elemente.
altfel{
dacă(primul == ultimul) {
x = primul.dato;
primul = ultimul = null;
}
x = primero.dato;
primul = primul.următor;
ultimo.siguiente = primero;
}
}
returnx;
}

70 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
e. Elimină ultimul nod din listă. Elimină nodul care
se află ultimul în listă.

71 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public inteliminarElUltimo() {
intx = -1;
if(primero ==null)
System.out.println("Lista goală..!, nu sunt elemente.");
altfel{
dacă(primul == ultimul) {
x = primero.dato;
primul = ultimul = null;
}else{
nodo aux = primul;

while(aux.siguiente != ultimul) {
aux = aux.următor;
}
x = ultimo.dato;
ultimul = aux;
ultimo.siguiente = primero;
}
}
returnx;
}

3.OPERAȚIUNI COMPLEMENTARE, sunt acele metode care sunt


aditionale la operaț iunile fundamentale, cum ar fi parcurgerea
lista, arată datele din listă, etc.

a.Căutaț i un element într-o listă, afiș aț i poziț ia.


Afiș ează pe ecran locaț ia unei valori în interiorul
lista.

72 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public void cauta(int x) {


nodo aux = primul;
booleansw =false;
intpos = 0;
do{ pos++;
dacă(x == aux.dato) { // Ș i găseș te datele
sw =true;
}else{ // Apunta al siguiente nodo
aux = aux.următor;
}
}în timp ce((aux != primul) && (sw !=true));
dacă (sw == adevărat) {

Sistem.out.println("Acest dată este în listă.")


Se află în poziț ia:
else{
System.out.println("Acest dat nu există...! En")
la lista
}
}

b.Imprimă lista de la stânga la dreapta. Afiș ează în


afiș aț i conț inutul listei.

73 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public void afiseazaLista() {


nod auxiliar;

dacă(listaVacia())
System.out.println("Lista goală...! Nu există ")
nimic de arătat
altfel{
aux = primul;
fă{
System.out.print(" " + aux.dato);
aux = aux.următor;
}while(aux != primul);

}
}

74 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

EXERCIȚII.

1.Dezvoltarea unei metode care să afiș eze pe ecran Primul de


lista.
2.Dezvoltaț i o metodă care să afiș eze pe ecran Ultimul de
lista.
3.Dezvoltaț i o metodă care să afiș eze pe ecran
Localizarea unui dată în cadrul listei.
4.Dezvoltarea unei metode care să permită inserarea unui nod înainte
de un anumit date.
5.Dezvoltarea unei metode care să permită inserarea unui nod după
de un anumit dat.
6.Dezvoltarea unei metode care să permită inserarea unui nod într-o
poziț ia dată.
7.Dezvoltarea unei metode care să permită eliminarea unui anumit
dato.
8.Dezvoltarea unei metode care permite eliminarea unui nod dintr-o
poziț ie determinată.
9.Dezvoltarea unei metode care să permită inserarea a N elemente în
lista.

75 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

ESTRUCTURA: LISTĂ DOBLEMENTE ÎNLAZATĂ

Este o structură de date liniară ș i dinamică, care se


caracterizează prin faptul că au noduri cu două câmpuri: legătură ș i câmp

dato; la aceleaș i care păstrează referinț e la un nod anterior ș i


următorul.
Elementele pot fi introduse la început sau la sfârș it de
lista. Se poate parcurge lista înainte sau înapoi
înapoi, permitându-se să se aibă imprimarea în ordine normală sau în ordine

inverso.

REPREZENTARE GRAFICĂ.

ELEMENTE ALE UNEI LISTE DOBLE.

a.NODO, Variabilă care este compusă dintr-un câmp de date ș i


două câmpuri care indică nodul anterior ș i următor
respectiv.

76 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
b.PRIMUL. Punctator de tip nod, care indică către adresa
de memoria a primului nod al listei.

c.ULTIMO. Puntero de tip nod, care pointează către adresa


de memoria a ultimului nod al listei.

IMPLEMENTAREA CLASEI LISTĂ DUBLĂ ÎN JAVA

Se va realiza prin intermediul a trei cursuri:

I. IMPLEMENTAREA CLASEI NOD ÎN JAVA.


Se creează un nod cu trei câmpuri, unul pentru a stoca
informaț ii ș i celelalte de pointeri.

public classnodo {
intdato;
nodul următor;
nodo anterior;
}

II. IMPLEMENTAREA CLASEI PRINCIPALE,


Reprezintă implementarea clasei nod ș i a clasei
listaDoble.

clasa publică principală {

public static voidmain(String[] args) {


listaDoble LD1=newlistaDoble();

// LD1.dimensiuneListaDublu();
// LD1.listaDobleVacia(); ș i alte instrucț iuni

}
}

77 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
III. IMPLEMENTAREA CLASEI LISTĂ DUBLĂ,
Creează lista, se declară pointerii care vor indica la
primul ș i ultimul nod al listei.
ATRIBUȚIILE CLASEI LISTĂ DUBLĂ

clasa listaDoble publică {


nodul întâi;
nodo ultim
// Adăugaț i aici metodele clasei...!
}

OPERATIUNI ASUPRA UNEI LISTE. Opera ț iile pe care le


se dezvoltă cu privire la listele duble legate sunt:

1.OPERAȚ IUNI DE STAT, sunt acelea care verifică


starea actuală a listei cum ar fi: a verifica dacă există vreo
element, cine este primul din listă, etc.

a.Inicializa lista.Inicializează pointerii listei,


atribuie valoare null.

publiclistaDoble() {
primero =null;
ultimo =null;
}

b.Lista goală. Returnează adevărat dacă lista nu are


niciun nod.

public boolean listaVacia() {


return((primero ==null) && (ultimo ==null));
}

78 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

c.Tamaño de lista. Returnează numărul de elemente care


poseda lista.

public int dimensiuneLista() {


inttam = 0;
dacă(listaVacia()) {
return0;
}else{
nodo aux = primul;
în timp ce(aux !=null) {

tam++;
aux = aux.următor;
}
}
returntam;
}

2.OPERAȚII FUNDAMENTALE, acestea sunt metodele care


permit să insera ț i noduri noi ș i să le elimina ț i câte unul
extremităț ile.

a.Insera primul nod în listă.În cazul în care


lista să nu aibă niciun element, se creează noul nod
ș i va actualiza pointerul.

79 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public void inseraLaÎnceput(int xdato) {


nodo nou =newnodo();
nuevo.dato = xdato;
dacă(listaVacia()) {
nuevo.anterior =null;
nuevo.siguiente =null;
ultimul = primul = nou;
}else{
nuevo.anterior =null;
nou.siguiente = primul;
primero.anterior = nuevo;
primero = nuevo;
}
}

80 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
b. Inserț ie în mediu, cazul în care lista ar avea
elemente deja, Se cree un nou nod ș i se inserează în
poziț ia indicată de utilizator.
Implementarea în Java rămâne ca practică pentru
student

c.Insera ultimul nod în listă. Inserează un nod la


final de la lista [ultimo nodo].

81 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public voidinsertarAlFinal(intxdato) {
nodo nuevo =newnodo();
nou.dato = xdato;
dacă(listaVacia()) {
nuevo.anterior =null;
nuevo.siguiente =null;
ultimul = primul = nou;
}else{
nuevo.siguiente =null;
nuevo.anterior = ultimo;
ultimul.siguiente = nou;
ultimo = nuevo;
}
}

82 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
d. Elimină primul nod din listă. Elimină nodul care
se află mai întâi pe listă.

83 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public inteliminarPrimero() {

intx = -1;
dacă(listaVacia())
System.out.println("Listă goală..!, nu se ")
pudo elimina
altfel{
dacă (primul == ultimul) {
x = primero.dato;
primul = ultimul = null;
}else{
x = primero.dato;
primul = primul.următor;
primero.anterior =null;
}
}
returnx;
}

84 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
e. Eliminarea ultimului nod din listă. Ș terge nodul care
se află ultimul în listă.

85 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public inteliminarUltimo() {

intx = -1;
dacă(listaVacia())
System.out.println("Lista goală..!, nu se ")
pud e elimina
altfel{
if(primero == ultimo) {
x = primero.dato;
primul = ultimul = null;
}else{
x = ultimo.dato;
ultimo = ultimo.anterior;
ultimo.siguiente =null;
}
}
returnx;
}

3.OPERAȚII COMPLEMENTARE, sunt acele metode care sunt


aditionale la operaț iile fundamentale, cum ar fi parcurgerea
lista, afiș aț i datele din listă, etc.

a.Caută un dată într-o listă, arată poziț ia.


Afiș ează pe ecran locaț ia unei valori în interiorul
lista.

86 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public void cauta(int x) {


nodo aux = primul;
booleansw =false;
intpos = 0;
while(aux != null && sw != true) {
pos++;
if(x == aux.dato) { // dacă găseș te datele
sw =true;
}else{ // apontaț i la următorul nod
aux = aux.urmator;
}
}
dacă (sw == adevărat) {

Sistem.out.println("Acest dată este în listă. Se


găseș te în poziț ia:
}else{
System.out.println("Acest date nu există...! În ")
lista
}
}

87 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

b.Imprimă lista de la stânga la dreapta. Afiș ează în


afiș ează conț inutul listei.

public voidmostrarListaID() {
nodo aux = primul;
dacă(aux ==null)
System.out.println("Lista goală..! nu există
nimic de arătat
altfel{
while(aux !=null) {
System.out.print(" " + aux.dato);
aux = aux.următorul;
}
}
}

88 Ing. Pascual Yana Chejo


STRUCTURI DE DATE

c.Imprimă lista de la dreapta la stânga. Afiș ează în


afiș ează conț inutul listei.

public void arataListaDI() {


nodo aux = ultimul;
dacă(aux == null)
Lista goală..! nu există
nimic de arătat
altfel{
while(aux != null) {
System.out.print(" " + aux.dato);
aux = aux.anterior;
}
}
}

89 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
EXERCIȚII.

1.Dezvoltaț i o metodă care să afiș eze pe ecran Primul de


lista.
2.Dezvoltaț i o metodă care să afiș eze pe ecran Ultimul de
pe listă.
3.Dezvoltaț i o metodă care să afiș eze pe ecran
Localizarea unui dat în interiorul listei.
4.Dezvoltarea unei metode care să permită inserarea unui nod înainte
de un anumit dată.
5.Developaț i o metodă care să permită inserarea unui nod după
de un anumit dată.
6.Dezvoltaț i o metodă care să permită inserarea unui nod într-o
poziț ia dată.
7.Dezvoltarea unei metode care să permită eliminarea unui anumit
dato.
8.Developaț i o metodă care să permită eliminarea unui nod dintr-o
poziț ie determinată.
9.Dezvoltarea unei metode care să permită introducerea a N elemente în
lista.

90 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

STRUCTURA: COPACI.

DEFINIȚIA UNUI COPAC

Un arbore este o structură de date non-liniară, dinamică ș i


jerarhică; în care fiecare nod poate indica către unul sau mai multe
nodos

Un arbore este definit ca o structură de date formată din


elemente de acelaș i tip, numite noduri, legate în astfel de
mod în care:

- Există un nod special numit rădăcină.


- Nodurile rămase se împart în A1, A2, A3,... AN;
fiecare dintre care, la rândul său, este arbore (subarbore).

Ș i se cunoaș te adresa nodului rădăcină, de la el se


are acces la toț i ceilalț i membri ai structurii.

REPREZENTARE GRAFICĂ A UNUI COPAC: Un copac general se


reprezintă prin grafuri.

91 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

TERMINOLOGÍA DE ARBOLES:

Definiț ii în relaț ie cu alte noduri:

Nod părinte: Este nodul arbore care are cel puț in un


nod copil.

Ejm. Aes este tatăl lui B, CyD.


Bes tată de EyF.
Des el tatăl lui GyH
Ees tată deIyJ
Fes este tatăl lui KyL
Ges tată deM

Nod fiu: Este acel nod care întotdeauna va avea un nod


antecesor sau tată.

Ejm. B, C ș i D sunt copii ai lui A

E ș i Fson de fii de B
G ș i H sunt fii de D
I y Json copii deE
K y Lson copii de F
Mes fiul meu deG

Nodo frate: sunt aceș tia care se află în aceeaș i


nivel, adică dacă au acelaș i părinte.

Ejm. B, C ș i D sunt fra ț i pentru că sunt copii de A


E ș i Fson fraț i pentru că sunt copii de B
G ș i Hson fraț i pentru că sunt fiii lui D
Eu ș i fraț ii mei pentru că sunt copii ai lui Dumnezeu

K y Lson fraț i pentru că sunt fiii lui F

92 Ing. Pascual Yana Chejo


STRUCTURA DE DATĂ

În ceea ce priveș te poziț ia în cadrul copacului:

Nodul rădăcină: Este nodul principal al unui arbore ș i nu are


antecesori. Acesta este nodul pe care îl vom folosi pentru a ne referi la

al pom.

Ejm.Aes nod rădăcină.

Nodo frunza: Sunt acele noduri care nu au copii sau


de asemenea, nodurile finale ale unui arbore.

Ejm.C,I, J, K, L ș i M sunt noduri frunza

Nodo rama: de ș i această defini ț ie abia o vom folosi,


acestea sunt nodurile care nu apar ț in niciuneia dintre
două categorii anterioare.

Ejm. B, D, E, F ș i G sunt noduri ramă.

Conceptii legate de dimensiunea lor:

Ordin: este numărul potenț ial de copii pe care îi poate


a avea fiecare nod de copac.

Grad: se spune că gradul unui nod este numărul


de fii pe care îi are acest nod.

Nivel sau adâncime: Se spune că nivelul unui nod


este numărul de arce care trebuie parcurse,
pornind de la rădăcină pentru a ajunge la el.

Înălț ime: Se spune că înălț imea unui copac este


maximul nivelurilor luând în considerare toț i nodurile sale.

Rama: este arcu care leagă un nod de altul.

Este important să conservăm întotdeauna nodoraiză, deoarece este

nodul de la care se dezvoltă copacul, dacă pierdem


dacă pierdem acest nod, vom pierde accesul la tot arborele.

93 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

ARBORE BINAL:

Un arbore binar este un set finit de zero sau mai multe noduri
tales que:

-Există un nod denumit rădăcină a arborelui.


Fiecare nod poate avea 0, 1 sau 2 subarbori; către care se
le cunosc ca subarbore stâng ș i subarbore drept.

Unde: se spune că două arbori binari sunt similari dacă


au aceea ș i structură ș i echivalente dacă con ț in
aceeaș i informaț ie.

Un arbore binar este echilibrat dacă înălț imile celor doi


subarborile fiecărui nod al arborelui se deosebesc cu o unitate
cel mult.

Un árbol binario está lleno cuando todas sus hojas están al


acelaș i nivel ș i nodurile sale interioare au fiecare câte doi copii.

Un arbore binar complet este echilibrat în timp ce un arbore


un arbore binar plin este complet echilibrat.

RECORRILE ÎNTR-UN ARBORE BINAR: A recorre înseamnă a vizita


nodurile copacului în formă sistematică; într-un mod în care
toate nodurile să fie vizitate o singură dată:

94 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
El recorrido en PRE-ORDEN, es también llamado orden previo y
constă în:

Vizitează rădăcina.
Parcurge subarborele stâng în preordine.
- Parcurgerea subarborelui drept în preordine.

Ejm.A B D H I E J K C F L G M N

Parcurgerea în IN-ORDINE, de asemenea cunoscută sub numele de ordine simetrică;

- Parcurge subarborele stâng în ordine.


Vizitaț i rădăcina.
Parcurgeț i subarborele drept în ordine.

Ejm.H D I B J E K A L F C M G N

Parcursul în POST-ORDINE, de asemenea, numit ordonare Posterioară;

Recorre subarborele stâng în post-ordonare.


- Parcurge subarborele drept în ordine post-ordine.
Vizitaț i rădăcina.

Ejm.H I D J K E B L F M N G C A

ARBORE BINARY DE CĂUTARE (ABB)

95 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
Este un arbore binar ordonat, care îndepline ș te următoarele
premisas:

- Există un nod numit rădăcină al arborelui ABB.


Datele nodurilor din subarborele stâng sunt
mai mici decât cele ale nodului rădăcină.

- Datele nodurilor din subarborele drept sunt mai mari


decât cea a nodului rădăcină.

Nu există două noduri cu aceeaș i dată.


- La fel, atât subarborele stâng cât ș i cel drept sunt
arborele binar de căutare.

NOTĂ: Un arbore binar ordonat este acela de la care se poate


ob ț ineț i o secven ț ă ordonată a datelor dvs., prin intermediul
parcurgere IN-ORDEN.

IMPLEMENTAREA UNEI ARBORE BINARE DE CĂUTARE ÎN JAVA.

Se implementează prin intermediul a trei clase: clasa nod, care defineș te

atributele unui nod; clasa arbore ABB, care defineș te

96 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
atributele ș i metodele acestei clase; ș i clasa principală,
ce va conț ine metoda main [în responsabilitatea studentului].

I. CLASA NODO ÎN JAVA.

Se creează un nod cu trei


câmpuri: cursor stâng,
care indică către subarbore

stânga; pointer drept,


care indică către subarbore

drept; ș i câmpul datei, care


conț ine informaț ia.

public class nodo {


intdato;
nod stâng;
nodo drept;
// Constructor, care iniț ializează pointerii în null....!
nodo() {
izquierdo =null;
derecho =null;
}
}

II.CLASA PRINCIPALĂ ÎN JAVA,


Se implementează în sala de clasă împreună cu profesorul ș i studentul.

III. CLASE ÁRBOL BINAR DE CĂUTARE ÎN JAVA,


Defini ț i clasa cu numele deabb, de asemenea stabili ț i
nodo rădăcină în null.

97 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public classabb {
nodo raiz =null;
// Adăugaț i aici metodele clasei listă....!
}

OPERATIUNI ASUPRA UNUI ARBOL BINAR DE CĂUTARE.


operaț ii care se desfăș oară asupra unui ABB; se clasifică în
operaciones de estado, operaciones fundamentales y
operaț iuni complementare:

1.OPERAȚ IUNI DE STAT, sunt acelea care verifică


starea actuală a listei, cum ar fi: verifica ț i dacă există vreo
element, care este primul din listă, etc.

a.Schimbare goală. Returnează adevărat dacă lista nu are


niciun nod.

public boolean arboreVacios() {


returnraiz == null;
}

b.Părinte de. Returnează adresa de memorie a părintelui


un nod copil.

98 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

publicnodo părinteleDe(nodo nodX) {


nodo raizAux = raiz;
nodo padre =null;
while(raizAux !=null) {
dacă(nodoX.dato == raizAux.dato)
returnpadre;
altfel dacă (nodoX.dato > raizAux.dato) {
tată = rădăcinăAux;
raizAux = raizAux.dreapta;
}else{
tata = raizAux;
raizAux = raizAux.izquierdo;
}
}
return null;
}

2.OPERAȚ II FUNDAMENTALE, acestea sunt metodele care


permit accesul la inserarea de noi noduri si eliminarea acestora; pentru aceasta se

sus ț in în alte metode precum: căutare (existăDato),


padre de, recorrerIzquierda, etc.

a.CĂUTARE ÎNTR-UN ABB: Căutarea va începe de la nodul


rădăcină. Dacă X este egal cu câmpul dat al nodului, căutarea
finaliza cu succes. Dacă X este mai mic decât câmpul dat de
nod, se va trebui să se efectueze căutarea în subarbore
stânga. Dacă, dimpotrivă, X este mai mare, atunci
căutare continuă în subarborele drept.

99 Ing. Pascual Yana Chejo


STRUCTURA DE DATI
Procesul continuă până când se găseș te un nod cu
câmpul dat este egal cu X sau un subarbore gol [NULL] cine
avalat că nu există niciun nod cu valoarea X.

publicnodo existeDato(intdatoX) {
nodo ra Aux = ra ;
while(raizAux !=null) {
dacă(datoX == raizAux.dato)
returnraizAux;
altfel dacă(datoX > raizAux.dato)
raizAux = raizAux.dreapta;
altfel
raizAux = raizAux.stanga;
}
return null;

b. INSERAREA UNUI NOD ÎNTR-UN ABB: primul lucru care trebuie


a face este a efectua căutarea. Dacă datele de inserat se
găse ș te în copac, nu se face nimic. În caz
din contră, datele sunt introduse în locul care
coresponde. Menț inând structura ABB.

100 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

public void inserareNod(int x) {


nodo nou = newnodo();
nuevo.dato = x;
daca(arbolVacio())
// Caz: dacă arborele ar fi gol, noul este rădăcina
raiz = nuevo;
altfel{
// Caz: arborele ar avea alte noduri.
dacă(existeDato(x) ==null) {
nodo padre =null;
nodo raizAux = raiz;
Parcurge până localizezi locul de inserare
while(raizAux !=null) {
tata = rădăcinăAux;
dacă(x < raizAux.dato)
raizAux = raizAux.stânga;
altfel
raizAux = raizAux.drept;
}
// Leagă ca fiu stâng sau drept
dacă(x < padre.dato)
padre.izquierdo = nuevo;
altfel
padre.derecho = nuevo;
else
// Caz: valoare repetată, nu se inserează
System.out.println("YA Există... " + x + "!, în ");
Copac.
}

101 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
NOTA: Nodurile sunt întotdeauna inserate prin frunze, deoarece
căutarea se încheie fără succes atunci când se accesează un subarbore

stânga sau dreapta care este goală.

c.ELIMINAREA UNUI NOD ÎNTR-UN ABB: Este un proces complex


deoarece trebuie men ț inută structura unui arbore
binariu, primul lucru este să căutăm în arbore pozi ț ia
del nod de eliminat ș i apoi eliminaț i în funcț ie de caz:
-Elimină un nod fără copii (frunză), pur ș i simplu se
elimină nodul.

-Elimina ț i un nod cu un singur copil, trebuie doar să


a efectua o reasignare de pointeri. tatăl lui
nodo pe care dorim să-l eliminăm începe să pointeze către fiul lui

nodul care este eliminat.

-Eliminarea unui nod cu doi copii,


1. Se înlocuie ș te câmpul de date al nodului pe care îl dorim
elimină cu datele maxime din subarborele său
izquierdo (sau elementul minim al subarborelui său
drept)
2. Uimitor, se elimină nodul maxim (sau minim,
în funcț ie de caz).

public inteliminarNodo(nodo dne) {


dacă(!arbolVacio()) {
intx = dne.dato;
// Creamăm o variabilă pentru a ș ti dacă are copii stânga ș i dreapta

booleantieneNodoDerecha = dne.derecho !=null?true:


fals
booleantieneNodoIzquierda = dne.izquierdo !=null?true
false
// Caso 1: No tiene hijos (es un nodo hoja)

102 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
dacă(!tieneNodoDerecha && !tieneNodoIzquierda) {
nodo padre = padreDe(dne);
dacă (padre.izquierdo == dne) {
padre.izquierdo =null;
}
if(padre.dreapta.dato == dne.dato) {
padre.derecho =null;
}
}
// Caz 2: Are un singur copil ș i celălalt nu
dacă((tieneNodoDerecha && !tieneNodoIzquierda) ||
(!tieneNodoDerecha && tieneNodoIzquierda)) {
nodo padre = padreDe(dne);
/* Guardemos los hijos del padre temporalmente para
să ș tii pe care dintre ei trebuie să îl elimini

nodo fiuActual = dne.izquierdo !=null ?


dne.izquierdo : dne.derecho;
dacă(padre.izquierdo == dne) {
padre.izquierdo = hijoActual;
}
if(padre.dreapta == dne) {
tata.drept = fiulActual;
}
}
// Cazul 3: Are amândoi copiii
dacă(tieneNodoDerecha && tieneNodoIzquierda) {
/* Luăm fiul drept al Nodului pe care îl dorim
elimina*/
nodo nodoMasALaIzquierda =
recorrerIzquierda(dne.drept);
nodo_părinte = părinteDe(nodoMaiLaStânga);
Înlocuim valoarea nodului pe care dorim să-l eliminăm
prin nodul care se află cel mai la stânga.

103 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
dne.dato = nodoMasALaIzquierda.dato;
// Eliminăm nodul cel mai din stânga
dacă(padre.dato != nodoMasALaIzquierda.dato)
padre.izquierdo =null;
altfel
padre.derecho =null;
}
returnx;
}
Arbore Gol...! Nu există nimic pentru
elimina
return0;
}
Recursiv, caută până găseș te nodul cel mai
la stânga*/

publicnodo parcurgereStanga(nodo dne) {


dacă (dne.izquierdo !=null) {
returnrecorrerStanga(dne.stanga);
}
returndne;
}

3.OPERAȚIUNI COMPLEMENTARE, sunt acele metode care sunt


adicionale la operaț iile fundamentale, cum ar fi a parcurge
copacul, a arăta datele copacului, etc.

a.Imprimarea datelor în ordine se efectuează prin


parcurgere In-Ordine.

104 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
private void imprimareInOrdine(nodo aux) {
dacă(aux !=null) {
imprimaInOrdine(aux.stanga);
System.out.print(aux.dato + " ");
imprimareInOrdine(aux.dreapta);
}
}
public void imprimeInOrdine() {
dacă(!arbolVacio()) {
imprimaInOrdine(raiz);
System.out.println("");
}else
Copac fără frunze...! Nu este nimic ce
afişa.
}

b.Imprimarea datelor în Pre-Ordine se realizează prin


recorrido Pre-Orden.

private void imprimarePreOrden(nod aux) {


dacă(aux != null) {
System.out.print(aux.dato + " ");
imprimirPreOrden(aux.izquierdo);
imprimirPreOrden(aux.dreapta);
}
}
public void imprimaPreOrdine() {
dacă(!arbolVacio()) {
imprimarePreOrdine(raiz);
System.out.println("");
}else
Sistem.out.println("Copac fără frunze...! Nu este nimic")
ce să arate.
}

105 Ing. Pascual Yana Chejo


STRUCTURA DE DATE

c.Imprimarea datelor în Post-Ordine se face prin intermediul


parcurgere Post-Ordine.

private void imprimaPostOrdine(nod aux) {


dacă(aux !=null) {
imprimirPostOrden(aux.stanga);
imprimarePostOrdonat(aux.drept)
System.out.print(aux.dato + " ");
}
}
public void imprimarePostOrdine() {
if(!arbolVacio()) {
imprimirPostOrden(raiz);
System.out.println("");
>else
Sistem.out.println("Copac fără frunze...! Nu este nimic"
ce să arate.
}

106 Ing. Pascual Yana Chejo


STRUCTURA DE DATE
EXERCIȚII.

1.Dezvoltarea unei metode care să afiș eze pe ecran cantitatea


de nodos hoja.
2.Dezvoltarea unei metode care să afiș eze pe ecran înălț imea
de copac.
3.Dezvoltaț i o metodă care să afiș eze pe ecran
Localizarea unui dat mai mare din arbore.
4.Desenvoltaț i o metodă care să afiș eze pe ecran
Localizarea unui element mai mic din arbore.

www.buenastareas.com
www.rena.edu.ve

107 Ing. Pascual Yana Chejo

S-ar putea să vă placă și