Huis Persoonlijke financiën Hoe maak je een gelinkte lijst in C-programmering - dummies

Hoe maak je een gelinkte lijst in C-programmering - dummies

Video: The mind behind Linux | Linus Torvalds 2024

Video: The mind behind Linux | Linus Torvalds 2024
Anonim

Als u in C-programmering een tweede structuur wilt toevoegen aan code die u al hebt gemaakt, maakt u een gekoppelde lijst - een reeks structuren die verwijzingen naar elkaar bevatten. Naast de basisgegevens in een structuur bevat de structuur een aanwijzer, die het adres van de volgende structuur in de lijst bevat.

Met een slimme combinatie van namen van aanwijzers en een NULL om het einde van de lijst te omzeilen, kunt u in A Primitive Linked-List Example iets krijgen dat lijkt op de broncode.

EEN PRIMITIEF LINKED-LIJST VOORBEELD

# include # include # include int main () {struct stock {char symbol [5]; int hoeveelheid; vlotterprijs; struct stock * next;}; struct stock * eerst; struct voorraad * actueel; struct stock * nieuw; / * Maak een structuur in het geheugen * / first = (struct stock *) malloc (sizeof (struct stock)); if (first == NULL) {puts ("Some type of malloc () error"); exit (1);} / * Structuurgegevens * / current = eerst toewijzen; strcpy (huidig-> symbool, "GOOG"); stroom-> hoeveelheid = 100; stroom-> prijs = 801. 19; stroom-> next = NULL; nieuw = (struct stock *) malloc (sizeof (struct stock)); if (nieuw == NULL) {puts ("Another malloc () error"); exit (1);} current-> next = nieuw; current = new; strcpy (huidig-> symbool, "MSFT"); stroom-> hoeveelheid = 100; stroom-> prijs = 28. 77; stroom-> next = NULL; / * Toon database * / puts ("Beleggingsportefeuille"); printf ("SymboltSharestPricetValuen"); current = eerste; printf ("% - 6st% 5dt%. 2ft%. 2fn", huidige-> symbool, huidige-> hoeveelheid, huidige-> prijs, huidige-> hoeveelheid * huidige-> prijs); current = stroom-> volgende; printf ("% - 6st% 5dt%. 2ft%. 2fn", huidige-> symbool, huidige-> hoeveelheid, huidige-> prijs, huidige-> hoeveelheid * huidige-> prijs); return (0);}

Deze broncode is vrij lang, maar het creëert simpelweg een tweede structuur, gekoppeld aan de eerste. Laat de lengte van de broncode je niet intimideren.

Regels 13 tot en met 15 verklaren de standaard drie structuurwijzers die nodig zijn voor een gelinkte danslijst. Traditioneel worden ze als eerste, huidig ​​en nieuw genoemd. Ze spelen in het vierde lid in de structuur, vervolgens gevonden op Lijn 11, die een structuuraanwijzer is.

Gebruik typedef niet om een ​​nieuwe structuurvariabele te definiëren bij het maken van een gekoppelde lijst. Een voorbeeld van een primitieve gekoppelde lijst gebruikt geen typedef, dus het is geen probleem met de code, maar veel C-programmeurs gebruiken typedef met structuren. Doe voorzichtig!

De variabele naam nieuw, gebruikt in regel 15, is een gereserveerd woord in C ++, dus als u tweetalig wilt zijn, wijzigt u de naam van de variabele in new_struct of in iets anders dan het woord new.

Wanneer de eerste structuur is gevuld, wijst lijn 30 een NULL-aanwijzer toe aan het volgende element.Die NULL-waarde sluit het einde van de gekoppelde lijst af.

Regel 32 maakt een structuur door het adres in de nieuwe pointervariabele te plaatsen. Het adres wordt opgeslagen in de eerste structuur in regel 38. Zo blijft de locatie van de tweede structuur behouden.

Regel 40 tot en met 43 vullen informatie voor de tweede aanwijzer, en kennen een NULL-waarde toe aan het volgende element op regel 43.

Het koppelen vindt plaats terwijl de inhoud van de structuur wordt weergegeven. Lijn 48 legt het adres van de eerste structuur vast. Vervolgens lijn 54 vangt het adres van de volgende structuur vanuit de eerste structuur.

Oefening 1 : Typ de broncode uit Voorbeeld van een primitieve gekoppelde lijst in uw editor. Hoewel het lang is, typt u het in, omdat u het later opnieuw moet bewerken (als u dat nu nog niet bent gewend). Bouw en ren.

In tegenstelling tot arrays, zijn structuren in een gekoppelde lijst niet genummerd. In plaats daarvan is elke structuur gekoppeld aan de volgende structuur in de lijst. Zolang u het adres van de eerste structuur kent, kunt u de lijst tot het einde doorlopen, die wordt gemarkeerd door een NULL.

Een voorbeeld van een primitieve gekoppelde lijst toont een slordige broncode met veel herhaalde code. Wanneer u meerdere verklaringen zoals deze in uw code ziet, zou u onmiddellijk "functies" moeten denken. "

EEN BETER LINKED-LIJST VOORBEELD

# include # include # include #define ITEMS 5 struct stock {char symbol [5]; int hoeveelheid; vlotterprijs; struct stock * next;}; struct stock * eerst; struct voorraad * actueel; struct stock * nieuw; struct stock * make_structure (void); void fill_structure (struct stock * a, int c); ongeldige show_structure (struct voorraad * a); int main () {int x; for (x = 0; xnext = new; current = new;} fill_structure (current, x + 1);} current-> next = NULL; / * Display-database * / puts ("Investment Portfolio"); printf ("SymboltSharestPricetValuen "); current = first; while (current) {show_structure (current); current = current-> next;} return (0);} struct stock * make_structure (void) {struct stock * a; a = (struct stock *) malloc (sizeof (struct stock)); if (a == NULL) {puts ("Some type of malloc () error"); exit (1);} return (a);} void fill_structure (struct stock * a, int c) {printf ("Artikel #% d /% d: n", c, ITEMS); printf ("Voorraadsymbool:"); scanf ("% s", a-> symbool); printf ("Nummer van shares: "); scanf ("% d ", & a-> aantal); printf (" Share price: "); scanf ("% f ", & a-> price);} void show_structure (struct stock * a) {printf ("% - 6st% 5dt%. 2ft%. 2fn", a-> symbool, a-> aantal, a-> prijs, a-> hoeveelheid * a-> prijs);}

Meeste gekoppelde lijsten worden gemaakt zoals weergegeven in Voorbeeld van een betere gekoppelde lijst De sleutel is om drie structuurvariabelen te gebruiken, weergegeven in regels 13 tot en met 15:

  • bevat altijd eerst het adres van de eerste structuur in de lijst. Altijd.

  • current bevat het adres van de structuur waaraan wordt gewerkt, die is gevuld met gegevens of die wordt weergegeven.

  • nieuw is het adres van een nieuwe structuur gemaakt met behulp van de functie malloc ().

Lijn 7 verklaart de voorraadstructuur als globaal. Op die manier is het toegankelijk via de verschillende functies.

De for-lus tussen regels 25 en 39 creëert nieuwe structuren die ze aan elkaar koppelen.De oorspronkelijke structuur is speciaal, dus het adres wordt opgeslagen op regel 30. Anders wordt een nieuwe structuur toegewezen, dankzij de functie make_structure ().

In regel 35 is de vorige structuur bijgewerkt; de waarde van stroom wordt niet gewijzigd tot regel 36. Voordat dat gebeurt, wordt de aanwijzer in de huidige structuur bijgewerkt met het adres van de volgende structuur, nieuw.

Op regel 40 wordt het einde van de gekoppelde lijst gemarkeerd door de nieuwe aanwijzer in de laatste structuur opnieuw in te stellen op een NULL.

De while-lus op regel 46 geeft alle structuren in de gekoppelde lijst weer. De conditie van de lus is de waarde van de huidige aanwijzer. Wanneer de NULL wordt aangetroffen, stopt de lus.

De rest van de code in A Better Linked-List Example bestaat uit functies die voor zichzelf spreken.

Oefening 2 : Kopieer de code van een beter voorbeeld met een gelinkte lijst naar de editor. Bouw en ren.

Let op de instructies scanf () in de functie fill_structure (). Vergeet niet dat de -> de "peeker" -notatie is voor een aanwijzer. Om het adres te krijgen, moet u de variabele een prefix geven met een & in de scanf () -functie.

Hoe maak je een gelinkte lijst in C-programmering - dummies

Bewerkers keuze

Tien Helpbronnen voor Junos OS - dummies

Tien Helpbronnen voor Junos OS - dummies

Dit is een top-tien lijst met bronnen die u moet zoeken meer informatie over softwarebewerkingen, training en ondersteuning voor Junos - alle extra details die u mogelijk nodig heeft om Junos OS te kunnen configureren en bedienen in uw eigen netwerkimplementaties. CLI Help-commando's Bent u op zoek naar meer achtergrondinformatie over hoe een bepaalde functie ...

De functie van de drie vlakken van Junos netwerk OS - dummies

De functie van de drie vlakken van Junos netwerk OS - dummies

De architectuur van de Junos opererende systeem verdeelt de functies van besturing, services en doorsturen op verschillende niveaus. Elk van de vlakken van Junos OS biedt een kritieke set van functionaliteit in de werking van het netwerk. Besturingsvlak van het Junos-netwerkbesturingssysteem (NOS) Alle functies van het besturingsvlak lopen op ...

De basisprincipes van BGP-routebealing - dummy's

De basisprincipes van BGP-routebealing - dummy's

Het configureren van Border Gateway Protocol (BGP) kan nogal lastig zijn, vooral met grote aantallen peersessies die handmatig moeten worden geconfigureerd. In feite kan in een groot netwerk de full-mesh-vereiste voor IBGP een provisioning-nachtmerrie zijn. BGP's antwoord op de IBGP-paring-configuratie-nachtmerrie die het volledige maaswerk is, wordt routeberefening genoemd. Route ...

Bewerkers keuze

Noodzakelijke elementen voor SEO om hoge trefwoorden te krijgen - dummies

Noodzakelijke elementen voor SEO om hoge trefwoorden te krijgen - dummies

Als de allerbeste locatie op het web staat op de pagina een van de zoekmachines, je moet de SEO-elementen kennen die je daar kunnen brengen. Een goede plek om te beginnen is met zoekwoorden. Zoekmachines gebruiken geavanceerde processen om zoekwoordgebruik en andere factoren te categoriseren en analyseren om erachter te komen ...

Persberichten als bron van SEO-inhoud - dummies

Persberichten als bron van SEO-inhoud - dummies

Het leuke aan persberichten is dat u ze zonder toestemming op uw website kunt gebruiken, en sommige zullen al voor de zoekmachine zijn geoptimaliseerd. Het doel van een persbericht is om het uit te sturen en te zien wie het ophaalt. U hoeft geen contact op te nemen met de eigenaar van het persbericht, omdat ...

Kies een domeinnaam die geoptimaliseerd is voor zoekmachines - dummies

Kies een domeinnaam die geoptimaliseerd is voor zoekmachines - dummies

Zelfs de domeinnaam van uw site moet geoptimaliseerd voor zoekmachines. Zoekmachines lezen uniforme resource locators (URL's), op zoek naar sleutelwoorden erin. Bijvoorbeeld als u een website heeft met de domeinnaam knaagdierracen. com en iemand zoekt Google op knaagdierenraces, Google ziet rodent-racing als een wedstrijd; omdat er een streepje verschijnt tussen de twee ...

Bewerkers keuze

Praxis Elementair onderwijs Examen-Economie - dummies

Praxis Elementair onderwijs Examen-Economie - dummies

U zult enkele basisconcepten van de economie voor de Praxis moeten kennen Elementair onderwijs examen. Elementaire economie onderzoekt de wens voor, de productie van en de verkoop en het gebruik van geld, zowel lokaal als wereldwijd. Het onderwijzen van economie omvat concepten zoals behoeften versus behoeften, kosten en meer tot nadenken stemmende onderwerpen, zoals de volgende: ...

Praxis Elementair onderwijs voor Dummy's Cheat Sheet - dummies

Praxis Elementair onderwijs voor Dummy's Cheat Sheet - dummies

Het Praxis basisonderwijs: Curriculum, instructie en beoordeling examen (5017) bestrijkt een breed scala van wat u moet weten over basisonderwijs. Als u het Praxis Elementary Education: Content Knowledge-examen (5018) neemt, moet u zich ervan bewust zijn dat het de dekking beperkt tot de inhoud van de vier hoofdonderwerpen die een elementaire leraar is ...

Praxis Core For Dummies Cheat Sheet - dummies

Praxis Core For Dummies Cheat Sheet - dummies

Voordat je te opgewonden raakt, begrijp dat de informatie die volgt niet klopt eigenlijk niet over het bedriegen van de Praxis. Het gaat echt meer om de meest efficiënte manieren om je voor te bereiden op het examen. Maar "voorbereidingsblad" heeft niet helemaal dezelfde reden. Trouwens, vals spelen is niet nodig als je weet wat je aan het doen bent, en ...