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: 1540
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. 2025 )