SDA Lab4 [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Universitatea Tehnică a Moldovei Catedra Automatică și Tehnologii Informaționale

Disciplina: Structuri de date si algoritmi Varianta 20

Raport Tema :

“Analiza prelucrării structurilor de date cu liste ”

A efectuat:

Sahaidac Maria,TI-173 Moțpan Serghei

A verificat:

Chisinău 2018

1

Cuprins:

1. 2. 3. 4. 5. 6. 7.

Scopul si obiectivele lucrarii………………………..3 Sarcina……………………………………………....4 Schema bloc…………………………………………5 Concluzii………………………………………….....8 Bibliografie………………………………………….9 Anexa A…………………………………………….10 Anexa B…………………………………………….11

2

Scopul şi obiectivele: 1. de studiat şi însuşit materialul teoretic pentru evidenţierea esenţialului prelucrării structurilor de date cu liste în elaborarea modelelor soluţiei, analizând exemplele din text; 2. să se selecteze problemele din compartimentul “3 şi Anexe” şi să se elaboreze organigramele (pentru funcţiile principale) şi programele cu liste (declarări, parcurgeri, etc.), pentru aprofundare şi rularea programelor în limbajul C să se elaboreze scenariile succinte de soluţionare prin respectiva tehnică de prelucrare cu calculele de verificare şi explicaţii. 3. să se analizeze tehnica modelării şi programării eficiente pentru diverse compartimente ale diferitor situaţii cu diverse argumentări şi modele de structuri abstracte, incluzând fişiere cu teste de verificare şi vizualizări.

3

Sarcina: Scrieţi un program, care din trei liste simplu lănţuite să selecteze într-o listă nouă mai întîi numerele divizibile la 2, 4 şi 8, apoi numerele negative impare.

4

Schema bloc: START

struct Node *head1=NULL;

struct Node *head2=NULL;

struct Node *head3=NULL;

-------------------------------createNode(value,head1);

createNode(value,head2);

createNode(value,head3);

print(head1,head2,head3);

Numerele divizibile la 2 , 4 si 8:

divizibil(head1,head2,head3);

Numerele negative impare:

ImparNegativ(head1,head2);

ImparNegativ(head3);

STOP

5

createNode

Node *newNode;

newNode = ( Node*)malloc(sizeof( Node));

newNode==NULL

newNode->data=value;

return(head);

newNode->next=head; newNode->next=head; return(newNode);

STOP

ImparNegativ

Node* aux; aux=head;

aux!=NULL

aux->data%2!=0&& aux->datadata

aux=aux->next; STOP

6

print

Node* temp;

head==NULL

temp=head;

Lista este goala.

Elementele listei:

temp==NULL

temp->data

temp=temp->next;

STOP

7

Concluzii: In cadrul acestei lucrari de laborator am facut cunostinta cu stucturile de date de tip lista si alte structuri de date precum stiva si coada. Am analizat principiul de formarea a listei,parcurgerea ei,inserarea unui element,stergerea. M-am convins de eficacitatea listelor prin faptul ca putem adauga un nou nod in lista sau putem sterge orice nod fie de la inceput, de la sfarsit sau din interiorul listei.

8

Bibliografie: . 1."Limbajul de programare C". Brian W.Kernighan. Dennis M.Ritchie. 2."C. Tehnici de programare". Florin Munteanu, Gheroghe Musca, Florin Moraru. 3."Arta programarii calculatoarelor". Donald Cnut. 4. Tudor Sorin, Tehnici de programare, 1997.

9

Anexa A Executia programului :

10

Anexa B: #include #include typedef struct Node { int data; struct Node *next; }Node;

Node *createNode(int value, Node *head) { Node *newNode; newNode = ( Node*)malloc(sizeof( Node));

if (newNode==NULL) return(head); else { newNode->data=value; newNode->next=head; return(newNode); } } void print( Node *head) { Node* temp; if(head==NULL) printf("Lista goala"); else { temp=head; printf(" \nElementele listei:",temp->data); while(temp){ printf(" %d ",temp->data);

11

temp=temp->next; } }}

void divizibil(Node *head) { Node* aux; aux=head; while(aux) { if (aux->data%2==0 && aux->data%4==0 && aux->data%8==0 )

printf(" %d ",aux->data); aux=aux->next;}} void ImparNegativ(Node *head) { Node* aux; aux=head; while(aux) { if (aux->data%2!=0 && aux->datadata); aux=aux->next;}} int main () { struct Node *head1=NULL; struct Node *head2=NULL; struct Node *head3=NULL; printf("\n-----------------------------------------------------"); head1=createNode(-3,head1); head1=createNode(6,head1); head1=createNode(9,head1); head1=createNode(12,head1); head1=createNode(120,head1);

12

head2=createNode(160,head2); head2=createNode(63,head2); head2=createNode(54,head2); head2=createNode(-45,head2); head2=createNode(-23,head2); head3=createNode(-67,head3); head3=createNode(65,head3); head3=createNode(-9,head3); head3=createNode(64,head3); head3=createNode(144,head3); print(head1); print(head2); print(head3); printf("\n-----------------------------------------------------"); printf("\nNumerele divizibile la 2 , 4 si 8:\n") ; divizibil(head1); divizibil(head2); divizibil(head3); printf("\n-----------------------------------------------------"); printf("\nNumerele negative impare:\n"); ImparNegativ(head1); ImparNegativ(head2); ImparNegativ(head3); printf("\n-----------------------------------------------------");}

13