Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




LISTE

c


LISTE

9.1. DATE STRUCTURATE DEFINITE RECURSIV

Limbajul C permite definirea de tipuri structurate recursiv (autoreferentiate). Acest lucru se face cu ajutorul pointerilor, si anume un element al structurii poate sa fie un pointer spre tipul de data introdus prin structura respectiva:



struct nume

;

Un tip definit ca mai sus se spune ca este un tip autoreferit sau recursiv. O data structurata declarata printr-un astfel de tip se spune ca este autoreferita sau recursiva. Datele structurate recursive au numeroase aplicatii īn prelucrarea listelor īnlantuite si arborescente.

Doua tipuri structurate t1 si t2 pot sa contina fiecare un pointer spre celalalt. Īn acest caz se va proceda ca mai jos:

struct t1; // o declaratie inainte fara de care nu se poate

// declara tipul t2

struct t2

;

struct t1

;

9.2. LISTE ĪNLĂNŢUITE

Datele structurate se pot organiza īn tablouri sau īn structuri recursive introducānd īn tipul structurat unul sau mai multi pointeri spre tipul structurat respectiv. Astfel se stabileste o relatie de ordine (uneori chiar mai multe) īntre elementele multimii de date structurate; de asemenea, multimea rescpectiva se poate organiza īn mod dinamic, adaugānd elemente noi sau suprimāndu-le pe cele care nu mai sunt necesare.

Definitie O multime dinamica de structuri recursive de acelasi tip si care satisfac una sau mai multe relatii de ordine introduse prin pointeri se numeste lista īnlantuita. Elementele listei se mai numesc noduri.

Cele mai utilizate tipuri de lista sunt:

lista simplu īnlantuita;

lista circulara simplu īnlantuita;

lista dublu īnlantuita;

lista circulara dublu īnlantuita;.

Cele patru tipuri de liste sunt exemplificate grafic astfel:

capul


lista liniara simplu īnlantuita;

capul


lista liniara circulara simplu īnlantuita;

capul


lista liniara dublu īnlantuita;

capul


lista liniara circulara dublu īnlantuita;

9.3. LISTA LINIARĂ SIMPLU ĪNLĂNŢUITĂ

O lista simplu īnlantuita; este o lista īnlantuita; ale carei noduri satisfac o singura relatie de ordine introdusa prin pointeri.

Tipul unui nod dintr-o lista simplu īnlantuita; se poate declara īn doua moduri:

struct tnod

typedef struct tnod

TNOD;

Observatii

1o. Varianta b) este mai folosita.

2o. Pointerul urmator introduce o relatie de ordine īntre nodurile de tip TNOD.

3o. Ultimul nod al listei va avea pointerul urmator = NULL.

4o. Pentru nodurile interioare ale listei pointerul urmator va avea valori adrese; daca urmator din nodul a pointeaza spre nodul b, spunem ca nodul b este succesorul lui a.

Operatiile ce se pot efectua asupra unei liste simplu īnlantuita;

crearea listei;

accesul la un nod al listei;

inserarea unui nod īnlantuita;

stergerea unui nod dintr-o lista;

stergerea unei liste.

Memorarea listelor se poate face:

dinamic (īn memoria interna);

static (īn fisiere).

Pentru modul dinamic se va folosi functia malloc la crearea listei cāt si la inserarea de noduri, iar la stergerea de noduri functia free.

9.4. CREAREA sI AFIsAREA UNEI LISTE

Vom crea o lista ce contine īn noduri informatii despre numere īntregi si patratele lor. Avem doua functii: una de creare care īntoarce adresa capului listei si o functie de afisare a informatiei din noduri. Vom comenta instructiunile importante din program.

#include <stdio.h>

#include <alloc.h>

typedef struct nod // definirea tipului NOD

NOD;

NOD *creaza(void) // functia de creare, intoarce adresa capului

p->leg=NULL; // ultimul nod al listei are pointerul leg = NULL

free(pc); // eliberarea ultimei adrese care de fapt nu face parte din lista

return cap; // returneaza adresa capului listei

}

void afisare(NOD *p) // functia de afisare a listei

void main (void) // functia principala



Document Info


Accesari: 1449
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )