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å 2025

Video: Hur du programmerar dig själv till framgång - ta personlig utveckling till nästa nivå 2025
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

Vad är en Java-karta? - dummies

Vad är en Java-karta? - dummies

Arrays och specialiserade listor gör det möjligt att utföra en fantastisk uppsättning uppgifter med Java. Det finns dock situationer där en Java-applikation behöver något som är mer relaterat till en databas, utan att egentligen ha allt databasbagage (som att behöva köpa en separat applikation). Till exempel kanske du vill kunna ...

Några få saker om Java Math - dummies

Några få saker om Java Math - dummies

Tro det eller inte, datorer - även de mest kraftfulla - Ha vissa begränsningar när det gäller att utföra matematiska beräkningar. Dessa begränsningar är vanligtvis obetydliga, men ibland slår de sig och biter på dig. Här är de saker du behöver se upp för när du gör matte i Java. Helhetsflöde Det grundläggande problemet ...

Vad är recursion i Java Programmering? - dummies

Vad är recursion i Java Programmering? - dummies

Rekursion är en grundläggande programmeringsteknik som du kan använda i Java, där en metod kallar sig för att lösa ett problem. En metod som använder denna teknik är rekursiv. Många programmeringsproblem kan lösas endast genom rekursion, och vissa problem som kan lösas med andra tekniker löses bättre genom rekursion. En av ...

Redaktörens val

4 Måste-inkludera i din blogg sidobardesign - dummies

4 Måste-inkludera i din blogg sidobardesign - dummies

Din bloggens sidofält är viktig fastighet som bör innehålla de element du vill ha mest. När du utformar din blogg sidofält kan du dra från en nästan oändlig lista över sidospårelement. Genom att välja noggrant vad som ska inkluderas (och vad som inte ska inkluderas) kan du ställa in din blogg från andra.

5 Användbara Wordpress Plugins - dummies

5 Användbara Wordpress Plugins - dummies

Om du bloggar på en självhävd plattform med WordPress-programvara, är det dags att anpassa din blogg med plug-ins - programvara som kan "anslutas" till din befintliga WordPress bloggprogramvara. Plug-ins gör det möjligt för dig att göra allt från funktionsbildspel i dina blogginlägg för att ansluta sociala medier till din webbplats. Här är fem användbara ...

7 Sätt att erövra Writer's Block som en Blogger - dummies

7 Sätt att erövra Writer's Block som en Blogger - dummies

Varje bloggare möter författarens block i ett tid eller annan. Om du är den typ av bloggare som sköter innehåll varje dag, kan författarens block vara stäverande. Kan du inte ta en paus för att få ditt skrivande mojo tillbaka? Prova en (eller flera) av dessa sju sätt att slå författarens block för att få dig tillbaka ...

Redaktörens val

10 Stora elektronikkomponentkällor - dummies

10 Stora elektronikkomponentkällor - dummies

Letar du efter några bra källor till dina elektroniska delar? Denna lista ger dig några fleråriga favoriter, både inom och utanför Nordamerika. Denna lista är inte uttömmande. Du hittar bokstavligen tusentals specialutbud för ny och begagnad elektronik. Plus, Amazon och eBay ger virtuella marknadsplatser för alla sorters säljare - ...

Elektronik Basics: Resistance - dummies

Elektronik Basics: Resistance - dummies

I elektronikvärlden är motståndet inte meningslöst. Faktum är att motstånd kan vara mycket användbart. Utan motstånd skulle elektronik inte vara möjligt. Elektronik handlar om att manipulera strömmen av ström, och ett av de mest grundläggande sätten att manipulera strömmen är att minska det genom resistans. Utan motstånd strömmar strömmen oreglerad och där ...

Digital elektronik: Så här installerar du BASIC Stamp Editor och Anslut till Stämpeldummorna

Digital elektronik: Så här installerar du BASIC Stamp Editor och Anslut till Stämpeldummorna

För att berätta för BASIC Stamp vad du vill göra i ditt digitala elektronikprojekt måste du programmera det. BASIC Stamp Windows Editor är den programvara som du använder på din dator för att skapa program som kan laddas ner till en BASIC Stamp-mikrokontroller. Denna programvara är tillgänglig gratis från Parallax webbplats. ...