Video: Odin Makes: Red Guardian's Helmet from the Black Widow movie 2024
I C-programmering, hvis du vil legge til en annen struktur for å kode du allerede har opprettet, opprett en koblet liste - en rekke strukturer som inneholder pekere til hverandre. Sammen med de grunnleggende dataene i en struktur inneholder strukturen en peker, som inneholder adressen til den neste strukturen i listen.
Med litt smart jonglering av pekerenavn, pluss en NULL for å lukke slutten av listen, kan du ende opp med noe som ligner kildekoden i et primært koblingslisteeksempel.
En PRIMITIV LINKED-LIST EKSEMPEL
#include #include #include int main () {struct lager {char symbol [5]; int kvantitet; flyt pris; struct lager * neste;}; struct lager * først; struct lager * nåværende; struct lager * ny; / * Lag struktur i minnet * / første = (struct lager *) malloc (sizeof (struct lager)); hvis (først == NULL) {setter ("Noen slags malloc () feil"); utgang (1);} / * Tilordne strukturdata * / nåværende = første; strcpy (nåværende-> symbol, "GOOG"); strømføren-> mengde = 100; strømføren-> pris = 801. 19; strømføren-> next = NULL; new = (struct lager *) malloc (sizeof (struct lager)); hvis (ny == NULL) {setter ("En annen malloc () feil"); utgang (1);} nåværende-> neste = nytt; strøm = new; strcpy (nåværende-> symbol, "MSFT"); strømføren-> mengde = 100; strømføren-> pris = 28. 77; strømføren-> next = NULL; / * Display database * / puts ("Investment Portfolio"); printf ("SymboltSharestPricetValuen"); Nåværende = først; printf ("% - 6st% 5dt%. 2ft%. 2fn", nåværende-> symbol, nåværende-> kvantum, nåværende-> pris, nåværende-> kvantitet * nåværende-> pris); strøm = strømføren-> neste; printf ("% - 6st% 5dt%. 2ft%. 2fn", nåværende-> symbol, nåværende-> kvantum, nåværende-> pris, nåværende-> kvantitet * nåværende-> pris); returnere (0);}
Denne kildekoden er ganske lang, men det oppretter bare en ny struktur, knyttet til den første. Ikke la kildekoden lengde skremme deg.
Linjene 13 til 15 erklærer standard tre strukturpoengene som kreves for en danseliste. Tradisjonelt heter de først, nåværende og nytt. De spiller inn i det fjerde medlemmet i strukturen, neste, funnet på Linje 11, som er en strukturpeker.
Ikke bruk typedef for å definere en ny strukturvariabel når du oppretter en koblet liste. En primitiv koblingslisteeksempel bruker ikke typedef, så det er ikke et problem med koden, men mange C-programmerere bruker typedef med strukturer. Vær forsiktig!
Variabelnavnet nytt, brukt i Linje 15, er et reservert ord i C ++, så hvis du vil være tospråklig, endre variabelnavnet til new_struct eller til noe annet enn ordet nytt.
Når den første strukturen er fylt, tilordner Line 30 en NULL-peker til neste element.Den NULL-verdien henger på slutten av den koblede listen.
Linje 32 lager en struktur, og plasserer adressen i den nye pekervariabelen. Adressen er lagret i den første strukturen i Linje 38. Slik holdes plasseringen til den andre strukturen beholdt.
Linjene 40 til 43 fyller informasjon for den andre pekeren, og tildeler en NULL-verdi til det neste elementet på Linje 43.
Koblingen foregår når strukturenes innhold vises. Linje 48 fanger den første strukturen adresse. Da tar Line 54 inn den neste strukturen sin adresse fra den første strukturen.
Øvelse 1 : Skriv kildekoden fra et primært koblet eksempel i redigeringsprogrammet. Selv om det er lenge, skriv det inn fordi du må redigere det igjen senere (hvis du ikke er vant til det nå). Bygg og løp.
I motsetning til arrays er strukturer i en koblet liste ikke nummerert. I stedet er hver struktur knyttet til neste struktur i listen. Så lenge du vet adressen til den første strukturen, kan du jobbe gjennom listen til slutten, som er merket med en NULL.
En primitiv koblingslisteeksempel viser noe slurvet kildekode med mye gjentatt kode. Når du ser flere utsagn som dette i koden din, bør du umiddelbart tenke "funksjoner. "
EN BEDRE LINKED-LIST EKSEMPEL
#include #include #include #define ITEMS 5 struct lager {char symbol [5]; int kvantitet; flyt pris; struct lager * neste;}; struct lager * først; struct lager * nåværende; struct lager * ny; struct lager * make_structure (void); void fill_structure (struct lager * a, int c); void show_structure (struct lager * a); int main () {int x; for (x = 0; xnext = nytt; nåværende = nytt;} fill_structure (nåværende, x + 1);} nåværende-> neste = NULL; / * Visningsdatabase * / setter ("investeringsportefølje"); printf ("SymboltSharestPricetValuen "); nåværende = første; mens (nåværende) {show_structure (nåværende); nåværende = nåværende-> neste;} retur (0);} struct lager * make_structure (void) {struct lager * a;) malloc (sizeof (struct lager)), hvis (a == NULL) {setter ("Noen form for malloc () feil"); utgang (1);} retur (a);} void fill_structure, int c) {printf ("Element #% d /% d: n", c, ITEMS); printf ("Stock Symbol:"); scanf ("% s", a-> symbol); printf av aksjer: "); scanf ("% d ", & a-> kvantitet); printf (" Aksjekurs: "); scanf ("% f ", & a-> pris);} ugyldig show_structure {printf ("% - 6st% 5dt%. 2ft%. 2fn", a-> symbol, a-> kvantum, a-> pris, a-> mengde * a-> pris);}
Mest kalkulerte lister er opprettet som vist i et eksempel på bedre sammenkobling. Nøkkelen er å bruke tre strukturvariabler, vist i linjene 13 til 15:
-
første inneholder alltid adressen av den første strukturen i listen. Alltid.
-
Nåværende inneholder adressen til strukturen som blir bearbeidet, fylt med data, eller vist.
-
Ny er adressen til en ny struktur opprettet ved hjelp av malloc () -funksjonen.
Linje 7 erklærer aksjestrukturen som global. På den måten kan den nås fra de ulike funksjonene.
Forløpet mellom linjene 25 og 39 skaper nye strukturer, som knytter dem sammen.Den opprinnelige strukturen er spesiell, så adressen er lagret i linje 30. Ellers blir en ny struktur tildelt, takket være make_structure () -funksjonen.
I linje 35 oppdateres den forrige strukturen; verdien av gjeldende endres ikke til linje 36. Før det skjer, blir pekeren i den nåværende strukturen oppdatert med adressen til den neste strukturen, ny.
På Linje 40 markeres slutten av den koblede listen ved å tilbakestille den nye pekeren i den siste strukturen til en NULL.
Mens sløyfen på linje 46 viser alle strukturer i den lenkede listen. Sløyfe tilstanden er verdien av den nåværende pekeren. Når NULL oppstår, stopper sløyfen.
Resten av koden som vises i et bedre koblingslisteeksempel består av funksjoner som er ganske selvforklarende.
Øvelse 2 : Kopier koden fra et bedre koblingslisteeksempel i redigeringsprogrammet. Bygg og løp.
Legg merke til scanf () -sagnene i fill_structure () -funksjonen. Husk at -> er "peeker" notasjonen for en peker. For å få adressen må du prefikse variabelen med en & i scanf () -funksjonen.