Video: CANCER DE COLON ( cancer colorectal ). CUM SE FACE TESTUL hemocult care îl depistează 2024
În programarea C, dacă doriți să adăugați oa doua structură codului pe care l-ați creat deja, creați o listă legată - o serie de structuri care conțin indicii între ei. Împreună cu datele de bază dintr-o structură, structura conține un pointer, care conține adresa următoarei structuri din listă.
Cu o anumită jonglare inteligentă a numelor de indicatori, plus un NULL pentru a acoperi sfârșitul listei, s-ar putea să ajungeți la ceva asemănător cu codul sursă în Exemplu de listă legată de Primitivă.
EXEMPLU PRIMITIVĂ LISTATĂ
#include #include #include int principal () {struct stoc {simbol char [5]; cantitate int; prețul flotant; struct stoc * următor;}; struct stoc * în primul rând; stoc stoc * curent; struct stoc * nou; / * Crearea structurii în memorie * / first = (struct stock *) malloc (sizeof (stoc stoc)); dacă (prima == NULL) {pune ("Un fel de eroare malloc ()"); ieșire (1);} / * Atribuiți datele de structură * / current = first; strcpy (actual-> simbol, "GOOG"); a curentului> cantitate = 100; a curentului> pret = 801. 19; a curentului> următor = NULL; nou = (struct stoc *) malloc (sizeof (stoc stoc)); dacă (new == NULL) {puts ("O altă eroare malloc ()"); ieșire (1);} current-> next = new; curent = nou; strcpy (curent-> simbol, "MSFT"); a curentului> cantitate = 100; a curentului> pret = 28. 77; a curentului> următor = NULL; / * Afișare bază de date * / pune ("Portofoliu de investiții"); printf ("SymboltSharestPricetValuen"); = Curent primul; printf ("% - 6st% 5dt% 2ft% 2fn", curent-> simbol, curent-> cantitate, curent-> pret, curent-> cantitate * curent-> pret); curent = a curentului> următor; printf ("% - 6st% 5dt% 2ft% 2fn", curent-> simbol, curent-> cantitate, curent-> pret, curent-> cantitate * curent-> pret); retur (0);}
Acest cod sursă este destul de lung, dar creează pur și simplu oa doua structură, legată de prima. Nu lăsați lungimea codului sursă să vă intimideze.
Liniile 13 până la 15 declară standardii trei indicatori de structură care sunt necesari pentru un dans al listei legate. În mod tradițional, ele sunt numite primele, actuale și noi. Ei joacă în cel de-al patrulea membru din structură, următor, găsit la linia 11, care este un indicator al structurii.
Nu utilizați typedef pentru a defini o nouă variabilă de structură atunci când creați o listă legată. Un Exemplu Primitiv Linked List nu utilizează typedef, deci nu este o problemă cu codul, dar mulți programatori C folosesc typedef cu structuri. Ai grija!
Numele variabilei noi, folosit în Linia 15, este un cuvânt rezervat în C ++, deci dacă doriți să fiți bilingv, schimbați numele variabilei în new_struct sau altceva decât cuvântul nou.
Când prima structură este umplută, Linia 30 atribuie un indicator NULL elementului următor.Valoarea NULL capă sfârșitul listei legate.
Linia 32 creează o structură, plasându-și adresa în noua variabilă a indicatorului. Adresa este salvată în prima structură din Linia 38. Astfel se păstrează locația celei de-a doua structuri.
Liniile 40 până la 43 completează informațiile pentru al doilea pointer, atribuind o valoare NULL elementului următor la Linia 43.
Legătura are loc când conținutul structurilor este afișat. Linia 48 capturează adresa primei structuri. Apoi linia 54 captează adresa următoarei structuri din cadrul primei structuri.
Exercițiul 1 : Introduceți codul sursă din Exemplu de listă legată primitivă în editorul dvs. Chiar dacă este lung, tastați-l pentru că va trebui să îl editați din nou mai târziu (dacă nu sunteți obișnuit cu asta până acum). Construiți și alergați.
Spre deosebire de rețele, structurile dintr-o listă asociată nu sunt numerotate. În schimb, fiecare structură este legată de structura următoare din listă. Atâta timp cât cunoașteți adresa primei structuri, puteți lucra în listă până la final, care este marcat de un NULL.
Un exemplu de listă legată primitivă arată un cod sursă nefolositor cu multe coduri repetate. Când vedeți mai multe declarații de genul acesta în codul dvs., trebuie să vă gândiți imediat la "funcții". "
O EXEMPLU EXEMPLU DE LINK-URI
#include #include #include #define ITEMS 5 struct stoc {char symbol [5]; cantitate int; prețul flotant; struct stoc * următor;}; struct stoc * în primul rând; stoc stoc * curent; struct stoc * nou; struct stoc * make_structure (void); void fill_structure (struct stoc * a, int c); void show_structure (struct stoc * a); int principal () {int x; pentru (x = 0; xnext = new; current = new;} fill_structure (curent, x + 1);} current-> next = NULL; / * displayf ()), curent = primul, în timp ce (curent) {show_structure (curent); current = current-> next;} return (0)) malloc (sizeof (stoc stoc)); if (a == NULL) {puts ("Un fel de eroare malloc ()";, int c) {printf ("Element #% d /% d: n", c, ITEMS); printf (" (% d), & a-> price); void show_structure (stoc stoc * a); scanf (" {printf ("% - 6st% 5dt% 2ft% 2fn", a-> simbol, a-> cantitate, a-> preț, a-> cantitate * a-> preț); sunt create așa cum se arată într-un exemplu de listă mai bine legat. Cheia este de a utiliza trei variabile de structură, prezentate în liniile 13 până la 15:
mai întâi conține întotdeauna adresa a primei structuri din listă. Mereu.
-
curentul conține adresa structurii pe care se lucrează, se completează cu date sau se afișează.
-
nou este adresa unei noi structuri create folosind funcția malloc ().
-
Linia 7 declară structura stocului ca globală. În acest fel, acesta poate fi accesat din diferite funcții.
Buclele pentru liniile 25 și 39 creează structuri noi, leagă-le împreună.Structura inițială este specială, astfel încât adresa sa este salvată în Linia 30. În caz contrar, este alocată o nouă structură datorită funcției make_structure ().
În rândul 35, structura anterioară este actualizată; valoarea curentului nu se modifică până la linia 36. Înainte de aceasta, indicatorul din structura actuală este actualizat cu adresa următoarei structuri, nou.
La linia 40, sfârșitul listei legate este marcat prin resetarea noului pointer din ultima structură la un NULL.
Buclele de timp de la Linia 46 afișează toate structurile din lista conectată. Starea buclă este valoarea cursorului curent. Când se întâlnește NULL, bucla se oprește.
Restul codului prezentat într-un exemplu de listă legată mai bine constă din funcții destul de explicative.
Exercițiul 2
: Copiați codul dintr-un exemplu de listă legată mai bine în editor. Construiți și alergați. Luați notă de instrucțiunile scanf () din funcția fill_structure (). Rețineți că -> este notația "peeker" pentru un pointer. Pentru a obține adresa, trebuie să prefixați variabila cu o funcție & în funcția scanf ().