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

Jewish Funeral Traditions - dummies

Jewish Funeral Traditions - dummies

Judiska begravningar sker vanligen i en synagoge, begravningshem eller på en kyrkogård. Med tradition är judiska begravningar enkla (symboliserar tron ​​att människor är alla lika i döden), men de varierar mycket och har ingen uppsättning liturgi. Att skicka blommor till ett begravnings- eller sorgshem är starkt avskräckt i judendomen. Inte bara kommer ...

Identifiera komplicerade grävande dummies

Identifiera komplicerade grävande dummies

Komplicerat roende är det tekniska namnet som sorgproffs ger till en sorgprocess som sitter fast vid något tillfälle , vilket gör det omöjligt för de förlorade att framgångsrikt starta eller avsluta sorgprocessen. Komplicerat sorg är ofta ett tecken på olösta problem i förhållandet mellan de förlorade och den avlidne som gör det ...

Redaktörens val

Hur man ställer in kartkontroller i Main_iPad. Storyboard i din iOS App - dummies

Hur man ställer in kartkontroller i Main_iPad. Storyboard i din iOS App - dummies

När du har en anpassad vy för MapController i din iOS-app, måste du berätta för iPad-storyboardet att du laddar in din anpassade vy i stället för en UIViewController. Följ dessa steg: Välj Projekt navigator genom att välja Main_iPad. storyboard och välj sedan View Controller i View Controller - Map Scene i dokumentutskriften. ...

Hur man roterar objekt i din iOS-app - dummies

Hur man roterar objekt i din iOS-app - dummies

Här hittar du hur man rotera en vy (i så fall vrid bilen runt) i din iOS-app. För att göra det uppdaterar du den roterande kodstuben du startade med och ersätter den med den fetstilta koden. - (void) rotera {CGAffineTransform transform = CGAffineTransformMakeRotation (M_PI); void (^ animation) () = ^ () {self. bil. transformera = transformera; ...

Hur man ställer in en WeatherController i Main_iPad. storyboard-fil för din iOS-app - dummies

Hur man ställer in en WeatherController i Main_iPad. storyboard-fil för din iOS-app - dummies

Bör du lägga till en ny anpassad vykontroll till din iOS-app innan du fortsätter till dessa steg. Du behöver fortfarande berätta för storyboardet att du vill att den ska ladda den nya anpassade vykontrollen istället för en UIViewController. Följ dessa steg:

Redaktörens val

Spara en grafisk stil i Adobe CS5 Illustrator - dummies

Spara en grafisk stil i Adobe CS5 Illustrator - dummies

Adobe Creative Suite 5 (Adobe CS5) Illustrator tillåter Du sparar en grafisk stil. En grafisk stil är en kombination av alla inställningar du väljer för ett visst filter eller en effekt i Utseendepanelen. Genom att spara informationen i en grafisk stil lagras du dessa attribut så att du snabbt och enkelt kan tillämpa ...

Välj som ett transformationsverktyg i Adobe CS5 Illustrator - dummies

Välj som ett transformationsverktyg i Adobe CS5 Illustrator - dummies

I Adobe Creative Suite 5 (Adobe CS5 ) Illustratör du kan använda markeringsverktyget för att skala och rotera ett valt objekt. Dra begränsningsboxens handtag för att ändra storlek på objektet, eller flytta dig utanför ett handtag och sedan, när markören ändras till en flippig pil (en böjd pil med pilhuvud i båda ändarna), dra till ...

Objekttransformation i Adobe CS5 Illustrator - dummies

Objekttransformation i Adobe CS5 Illustrator - dummies

Verktygen Rotate, Reflect, Scale och Shear i Adobe Creative Suite 5 (Adobe CS5) Illustrator använder alla samma grundläggande steg för att utföra transformationer. Här är fem sätt att transformera ett objekt: en för en godtycklig omvandling och fyra andra för exakta omvandlingar baserat på en numerisk mängd som du anger. Vilkårlig omvandlingsmetod Eftersom detta ...