Hem Personliga finanser Hur man skapar en länkad lista i C-programmering - dummies

Hur man skapar en länkad lista i C-programmering - dummies

Video: Hur du programmerar dig själv till framgång - ta personlig utveckling till nästa nivå 2024

Video: Hur du programmerar dig själv till framgång - ta personlig utveckling till nästa nivå 2024
Anonim

I C-programmering, om du vill lägga till en andra struktur till kod du redan har skapat, skapa en länkad lista - en serie strukturer som innehåller pekar till varandra. Tillsammans med grunddata i en struktur innehåller strukturen en pekare, som innehåller adressen till nästa struktur i listan.

Med lite smart jonglering av pekarnamn, plus en NULL för att kapa slutet av listan, kan du sluta med något som liknar källkoden i ett primitivt länkslistaxempel.

En PRIMITIV LINKED-LIST EXEMPEL

#include # include #include int main () {struct lager {char symbol [5]; int kvantitet; float pris; struct lager * next;}; struct lager * först; struct lager * nuvarande; struct lager * nytt; / * Skapa struktur i minnet * / först = (struct lager *) malloc (sizeof (struct lager)); om (först == NULL) {sätter ("Något slags malloc () fel"); exit (1);} / * Tilldela strukturdata * / nuvarande = först; strcpy (nuvarande-> symbol, "GOOG"); ström-> kvantitet = 100; ström-> pris = 801. 19; ström-> bredvid = NULL; new = (struct lager *) malloc (sizeof (struct lager)); om (nytt == NULL) {sätter ("Ett annat malloc () fel"); avsluta (1);} nuvarande-> nästa = nytt; ström = new; strcpy (nuvarande-> symbol, "MSFT"); ström-> kvantitet = 100; ström-> pris = 28. 77; ström-> bredvid = NULL; / * Visa databas * / sätter ("Investment Portfolio"); printf ("SymboltSharestPricetValuen"); nuvarande = första; printf ("% - 6st% 5dt%. 2ft%. 2fn", nuvarande-> symbol, nuvarande-> kvantitet, nuvarande-> pris, nuvarande-> kvantitet * nuvarande-> pris); ström = ström-> bredvid; printf ("% - 6st% 5dt%. 2ft%. 2fn", nuvarande-> symbol, nuvarande-> kvantitet, nuvarande-> pris, nuvarande-> kvantitet * nuvarande-> pris); returnera (0);}

Denna källkod är ganska lång, men det skapar helt enkelt en andra struktur, kopplad till den första. Låt inte källkodens längd skrämma dig.

Linjerna 13 till 15 deklarerar de tre standardstrukturer som behövs för en länkad dans. Traditionellt heter de första, nuvarande och nya. De spelar in i den fjärde medlemmen i strukturen, nästa, som finns på Linje 11, som är en strukturpekare.

Använd inte typedef för att definiera en ny strukturvariabel när du skapar en länkad lista. Ett primitivt kopplat lista exempel använder inte typedef, så det är inte ett problem med koden, men många C-programmerare använder typedef med strukturer. Var försiktig!

Variabelnamnet nytt, som används i Linje 15, är ett reserverat ord i C ++, så om du vill vara tvåspråkig, ändra variabelnamnet till new_struct eller till något annat än ordet nytt.

När den första strukturen är fylld, tilldelar Line 30 en NULL-pekare till nästa element.Det NULL-värdet täcker slutet på den länkade listan.

Linje 32 skapar en struktur och placerar adressen i den nya pekarvariabeln. Adressen sparas i den första strukturen i Linje 38. Således håller platsen för den andra strukturen kvar.

Linjerna 40 till 43 fyller information för den andra pekaren och tilldelar ett NULL-värde till nästa element i rad 43.

Länken sker när strukturens innehåll visas. Linje 48 fångar den första strukturens adress. Sedan tar Line 54 in nästa strukturadress från den första strukturen.

Övning 1 : Skriv källkoden från ett primitivt länkslista-exempel till din redaktör. Även om det är länge, skriv det in eftersom du måste redigera det igen senare (om du inte är van vid det nu). Bygg och kör.

Till skillnad från arrayer är strukturer i en länkad lista inte numrerade. Istället är varje struktur kopplad till nästa struktur i listan. Så länge du vet adressen till den första strukturen kan du arbeta igenom listan till slutet, som är markerad med en NULL.

Ett primitivt länk-listexempel visar en slarvig källkod med mycket upprepad kod. När du ser flera uttalanden som detta i din kod bör du omedelbart tänka "funktioner". "

EN BÄSTA LINKED-LIST EXEMPEL

#include # include #include #define ITEMS 5 struct lager {char symbol [5]; int kvantitet; float pris; struct lager * next;}; struct lager * först; struct lager * nuvarande; struct lager * nytt; struct lager * make_structure (void); void fill_structure (struct lager * a, int c); void show_structure (struct lager * a); int huvud () {int x; för (x = 0; xnext = nytt; nuvarande = nytt;} fill_structure (nuvarande, x + 1);} nuvarande-> next = NULL; / * Visningsdatabas * / sätter ("Investment Portfolio"); printf ("SymboltSharestPricetValuen "), nuvarande = första, medan (nuvarande) {show_structure (current); current = current-> next;} returnera (0);} struct lager * make_structure (void) {struct lager * a;) malloc (sizeof (struct stock)), om (a == NULL) {sätter ("Något slags malloc () fel"); exit (1);} returnera (a);} void fill_structure, int c) {printf ("Artikel #% d /% d: n", c, PUNKTER); printf ("Lager Symbol:"); Scanf ("% s", a-> symbol); Printf av aktier: "); scanf ("% d ", & a-> kvantitet); printf (" Aktiepris: "); scanf ("% f ", & a-> pris);} void show_structure {printf ("% - 6st% 5dt%. 2ft%. 2fn", a-> symbol, a-> kvantitet, a-> pris, a-> kvantitet * a-> pris);}

Mest länkade listor skapas som visas i ett exempel på bättre sammanhang. Nyckeln är att använda tre strukturvariabler, som visas i rad 13 till 15:

  • innehåller alltid alltid adressen av den första strukturen i listan. Alltid.

  • Nuvarande innehåller adressen till strukturen som bearbetas, fylld med data eller visas.

  • Ny är adressen till en ny struktur skapad genom att använda funktionen malloc ().

Linje 7 förklarar aktiestrukturen som global. På så sätt kan man komma åt de olika funktionerna.

För loop mellan linjerna 25 och 39 skapas nya strukturer, som sammanlänkar dem.Den ursprungliga strukturen är speciell, så adressen är sparad i rad 30. Annars fördelas en ny struktur tack vare funktionen make_structure ().

I rad 35 uppdateras den tidigare strukturen; värdet av ström ändras inte till linje 36. Innan det händer uppdateras pekaren i den aktuella strukturen med adressen till nästa struktur, ny.

I rad 40 markeras slutet på den länkade listan genom att återställa den nya pekaren i den sista strukturen till en NULL.

Samtidigt slingan i linje 46 visar alla strukturer i den länkade listan. Slingans tillstånd är värdet av den aktuella pekaren. När NULL stöter på stannar slingan.

Resten av koden som visas i ett exempel på bättre länk-lista består av funktioner som är ganska självförklarande.

Övning 2 : Kopiera koden från ett exempel med bättre länk till redigeraren. Bygg och kör.

Notera scanf () -sättningarna i funktionen fill_structure (). Kom ihåg att -> är "tittaren" notation för en pekare. För att få adressen måste du prefixera variabeln med en & i scanf () -funktionen.

Hur man skapar en länkad lista i C-programmering - dummies

Redaktörens val

Nätverksenheter och tjänster Översikt för certifikatprov på CCENT-dummies

Nätverksenheter och tjänster Översikt för certifikatprov på CCENT-dummies

Du kan vara säker på att få några frågor om certifieringsexamen som testar din kunskap om typer av enheter och olika nätverkstjänster. Nedan följer några viktiga punkter att komma ihåg om enheter och tjänster: Nätverksenheter Hubb: Ett nav är en lag 1-enhet som används för att ansluta system tillsammans. När ...

OSI-modell för CCENT-certifieringsexamen - dummies

OSI-modell för CCENT-certifieringsexamen - dummies

Certifieringen certifierar dig kraftigt på OSI-modellen och olika protokoll och enheter som körs på varje lager av OSI-modellen. I följande tabell granskas OSI-modellen genom att ge dig en beskrivning av varje lager och exempel på protokoll och enheter som körs i varje lager. Layer Beskrivning Exempel 7. Applikation ...

OSI-modell för Cisco ICND1-certifieringsexamen - dummies

OSI-modell för Cisco ICND1-certifieringsexamen - dummies

Cisco ICND1-certifieringsexamen testa dig kraftigt på OSI modell och de olika protokoll och enheter som körs i varje lager av OSI-modellen. Följande granskar OSI-modellen genom att ge dig en beskrivning av varje lager och exempel på protokoll och enheter som körs i varje lager. Layer Beskrivning Exempel 7. Applikation ...

Redaktörens val

Hur man skalar på skifferelement i kantfilm - dummies

Hur man skalar på skifferelement i kantfilm - dummies

Skalar ett element i Adobe Edge Animate betyder i huvudsak att du kan ändra storleken på ett element samtidigt som dess proportioner hålls konsekventa om du vill. Du kan: Skalelement med verktyget Transform Skalaelement från Egenskaper-panelen Skalning med verktyget Transform Om du föredrar att använda en klicka-och-dra-metod för skalering ...

Hur man arbetar med mallar i Adobe Edge Animate - dummies

Hur man arbetar med mallar i Adobe Edge Animate - dummies

Mallar introducerades i Edge Animate 2. 0. Denna funktion tar bort nödvändigheten att återuppfinna hjulet varje gång du vill starta en ny komposition. Visst kan du alltid starta en ny komposition från en sparad fil, men Mallar gör att du kan starta ett nytt projekt som redan innehåller attribut och element som du vill ha.

Keyframes Modes in Edge Animation - dummies

Keyframes Modes in Edge Animation - dummies

Keyframe-verktyg i Edge Animate finns till höger om Play-kontrollerna. För att skapa nyckelfiler automatiskt måste du först aktivera nyckelbilder genom att klicka på den röda stoppklockans ikon. Som standard, när du startar en ny animering, är Stopwatch rött men har gråa linjer som löper genom det (som visat). Här är standardstatus för ...

Redaktörens val

Hur man tolkar figurativt språk för GED RLA-dummiesna

Hur man tolkar figurativt språk för GED RLA-dummiesna

Författare använder språk antingen bokstavligt eller figurativt . GED Reasoning Through Language Arts testet kommer att ha några frågor för att testa din förmåga att identifiera skillnaden. En NASA-vetenskapsman kan beskriva en asteroid väldigt bokstavligt: ​​består huvudsakligen av vatten, blandat med vissa stenar och mindre fasta fragment. Eller kan han eller hon skriva figurativt och beskriva ...

Hur (och var) ska schemalägga för att ta GED-dummiesna

Hur (och var) ska schemalägga för att ta GED-dummiesna

För att ta GED test, schemalägger du det baserat på tillgängliga testdatum. Varje stat eller lokalt testcenter ställer in sitt eget schema för GED-testet, vilket innebär att ditt tillstånd bestämmer hur och när du kan ta varje avsnitt av testet. Det bestämmer också hur ofta du kan återta en misslyckad ...

Hur man förbereder sig på GED RLA Extended Response - dummies

Hur man förbereder sig på GED RLA Extended Response - dummies

Uppsats för utvidgad respons på GED Reasoning Through Language Arts-testet kräver några mycket specifika färdigheter, allt från grammatik och korrekt språkanvändning till förståelse och analysförmåga. Om du någonsin har haft ett argument om vem som har det bästa laget eller vilken arbetsgivare är bättre, vet du redan hur man bedömer argument och svarar. ...