Hjem Personlig finansiering Hvordan lage en koblet liste i C programmering - dummies

Hvordan lage en koblet liste i C programmering - dummies

Video: Odin Makes: Red Guardian's Helmet from the Black Widow movie 2024

Video: Odin Makes: Red Guardian's Helmet from the Black Widow movie 2024
Anonim

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.

Hvordan lage en koblet liste i C programmering - dummies

Redaktørens valg

Speil Lockup (MUP) på Nikon D7100-dummies

Speil Lockup (MUP) på Nikon D7100-dummies

En komponent i det optiske systemet til din Nikon D7100 kamera er et speil som beveger seg hver gang du trykker på lukkerknappen. Den lille vibrasjonen som følge av speilets handling kan føre til svak utryddelse av bildet når du bruker en veldig langsom lukkerhastighet, skyter med en lang teleobjektiv, ...

Opptaksmuligheter på Nikon D5300 - dummies

Opptaksmuligheter på Nikon D5300 - dummies

Du kan styre noen få aspekter av din filmoppgave på din Nikon D5300. Du kan manipulere videoen din for å skape en rekke effekter. Følgende liste går gjennom disse alternativene: Eksponeringsmodus: Du kan ta opp filmer i hvilken som helst eksponeringsmodus (Auto, Scenemodus, Effektmodus, P, M, og så videre). Som med fortsatt ...

Hvordan man manipulerer eksponering og kontroll på Nikon D5600-dummies

Hvordan man manipulerer eksponering og kontroll på Nikon D5600-dummies

Følgende retusjonsverktøy på din Nikon D5600 kamerajustering eksponering og farge: D-Lighting, Quick Retouch, Filter Effects og Monochrome. Selv om disse verktøyene ikke får deg til å velge ett kamera over en annen, hvis du allerede har en Nikon D5600, er de tilgjengelige, så du kan også lære å bruke dem! D-Lighting: Active D-Lighting ...

Redaktørens valg

DOs og DON'Ts of Fantasy Basketball Draft Picks - dummies

DOs og DON'Ts of Fantasy Basketball Draft Picks - dummies

Hvis du vurderer bli med i en fantasy basketball liga, må du ta hensyn til følgende DOs og DON'Ts før du vurderer spillerne du vil utarbeide på laget ditt. Kreditt: © iStockphoto. com / IS_ImageSource Fantasy basketball draft pick DOS I de fleste fantasy basketball ligaer bestemmer kommisjonen (personen som setter opp ligaen) bestillingen i ...

Linjene og dimensjonene til en basketballbane - dummies

Linjene og dimensjonene til en basketballbane - dummies

En basketballbane har symmetri; Den ene halvdelen av retten er et speilbilde av den andre. Hele basketballbanen (se figur 1) er 94 fot med 50 fot. På hver halvplass viser malte linjer fritt korsbanen og sirkelen, samt trepunktsbuen, hvis avstand fra kurven varierer basert ...

Kjøp av gratis agenter i fantasy fotball - dummies

Kjøp av gratis agenter i fantasy fotball - dummies

I løpet av fantasy fotball sesongen, spillere som ikke blir utarbeidet bli gratis agenter - spillere tilgjengelig for enhver ligamatch villig til å slippe en eid spiller. Bruk gratis agentbassenget til å erstatte en skadet spiller eller noen som bare ikke lever opp til dine forventninger. Bruk disse tipsene for å finne en gratis agent for å ...

Redaktørens valg

Grunnleggende for din iOS-app - dummies

Grunnleggende for din iOS-app - dummies

Heldigvis mesteparten av det du trenger å gjøre så langt som iOS animasjon er opptatt er allerede bygd inn i rammen. Noen visningsegenskaper kan animeres, noe som betyr at du bare må fortelle visningen hvor du skal begynne og hvor du skal avslutte flyttingen, og noen få andre valgfrie parametere, og du er ferdig. ...

Montering av verktøylinjen for Android App Development - dummies

Montering av verktøylinjen for Android App Development - dummies

Når du vet at du er klar til være en Android-utvikler, ta tak i datamaskinen din og få sprekker på å installere verktøyene og rammene som er nødvendige for å bygge ditt første blockbuster-program. Linux-kjernen Android ble opprettet på toppen av åpen kildekode Linux-kjernen. Android-teamet valgte å bruke denne kjernen fordi den ga bevist ...

Grunnleggende om Cocoa Touch i iOS Apps - dummies

Grunnleggende om Cocoa Touch i iOS Apps - dummies

Cocoa Touch-laget inneholder det meste av objektet -orientert utvikler-vendt rammer for å bygge iOS applikasjoner. Det er ditt eneste utgangspunkt for app-utvikling. Apple-guiderne oppfordrer deg til å undersøke teknologiene i dette laget for å se om de oppfyller dine behov, før du ser på de andre lagene. Med andre ord, Apple har til hensikt å ...