C-programmering ID120V William Sandqvist Länkad lista

Slides:



Advertisements
Liknande presentationer
Talföljder formler och summor
Advertisements

Formulär Tänkte nu gå igenom vad ett formulär är och hur man kan skapa dem i Access.
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Funktioner och programorganisation
Algoritmer och data strukturer -Länkade listor
Sökning och sortering Linda Mannila
Föreläsning 3 Lista Array/länkad lista Lista implementerad som länkad lista Inlämningsuppgifter.
De fundamentala datatyperna
Logikprogrammering Ons, 25/9
Komplexa tal inför Laborationerna
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Arrays Indicerade variabler.
Föreläsning 2 Datastrukturer Abstrakta datastrukturer Stack
Föreläsning 6 Länkade lista Komplexitet Linjärsökning & binärsökning
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 11 Arrayer.
William Sandqvist Funktion som byter plats på två variabler /* swap1.c first attempt at a swaping function */ /* from Stephen Prata, C Primer.
Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Vektorer (klassen Vector) Sortering
Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar.
William Sandqvist C:s minnesmodell.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Modulär programutveckling
Anders Sjögren Pekare. Anders Sjögren Skapa ett program som byter plats på två heltal Pekare.
Anders Sjögren Bitfält Kompakt datalagring i delar av bytes, ett fält av bits StackBytes Heap.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
William Sandqvist Databuffer Omvandlar mellan olika storlekar på dataobjekt Anpassar mellan olika dataöverföringshastigheter Databuffer.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Programmering i C# 9. Pekare och osäker kod.
Anders Sjögren Bitfält exempel Nu kommer ett förbättrat program. Det är funktions- uppdelat och kan lägga till poster som lagras på fil.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
Språket för inbyggda system 2
Anders Sjögren Filer - långtidslagring. Anders Sjögren Filtyper i DOS talet ett ( intx=1; ) lagrat i en –textfil, (en sekvens av tecken ( bytes )) enligt.
F6 - Pekare 1 Programmeringsteknik, 4p vt-00 Pekare & adresser Alla variabler är knutna till en viss adress i minnet int i; adressen till denna fås med.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
Anders Sjögren Deklarationsområde och funktioner.
Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
Kronljusströmställaren 0, 1, 2, 3
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
Datorteknik övning 4 Maskinnära programmering med C inför hemlab 1
William Sandqvist Datorteknik övning 4 Maskinnära programmering med C inför hemlab 1.
Anders Sjögren Minnen, variabler, att lagra i primärminnet forts. Den här bilden känner ni igen sedan tidigare. Vi skall fortsätta att prata variabeltyper.
Anders Sjögren Minnen, variabler, att lagra i primärminnet forts.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Anders Sjögren Funktioner något in och något annat ut.
TDP004 Objektorienterad Programmering Fö 5 Minneshantering.
Länkade listor á la C/C++
Presentationens avskrift:

C-programmering ID120V William Sandqvist Länkad lista

Länkad lista William Sandqvist Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )

Tänk om arrayen Komplex z[?]; inte är tillräcklig? William Sandqvist Komplex z  Problemet med Komplex z[?] är att storleken måste bestämmas när man skriver programmet inte när det körs.  De medel som står tillbuds, tills nu, är att allokera upp minne på heapen m h a malloc() eller calloc() ( continous ). Funktionen ger konsekutivt minne på heapen som kan behandlas som en array. Dock måste allt minne allokeras på en gång.

malloc( ) och calloc() William Sandqvist Stack Bytes Heap Stack Heap Stack Heap Att indexera fungerar bra, z[3] Att indexera fungerar inte, z[3] z[3] Att indexera fungerar bra, z[3] Att utöka en ”array” genom succesiva allokeringar går inte så bra, minnet ”hänger” inte ihop. calloc() malloc() har använts en gång calloc() malloc() har använts flera gånger länkad lista, posterna hänger ihop med pekare

Tänk om arrayen Komplex z[?]; inte är tillräcklig? William Sandqvist Komplex z allokera dynamiskt en struct ( ett komplext tal ) i taget och håll ihop dem med en länk ( = pekare ) till en länkad lista. Detta löser problemet!

Länkad lista William Sandqvist inget = null re im pekare re im pekare re im pekare re im pekare Den nya strukturen, posten  allokera dynamiskt en "tunna" i taget efter behov  låt föregående "tunna" peka ut nästa för att hålla ihop data

Länkad lista William Sandqvist inget = null re im pekare re im pekare re im pekare re im pekare typedefstruct Komplex{ floatre; /* realdel */ float im; /* Imaginärdel */ struct Komplex*nextPek; /* pekare till nästa */ } Komplex ; Eftersom strukturen skall referera till sig själv så måste definitionen se ut på detta sätt.  strukturen

Hur skapas en ”länkad lista” ? William Sandqvist main() inget = null re im pekare re im pekare re im pekare re im pekare Det behövs en pekare till första posten! zListPek Denna funktion skapar listan int main ( void ) { Komplex* zListPek ; zListPek = LaesKomplexaTalLista(); SkrivKomplexTalLista( zListPek ); FreeMemory( zListPek ); return 0 ; }

linklist.c William Sandqvist /* linklist.c länkad lista med struct av komplexa tal */ #include #include typedef struct Komplex { float re; /* realdel */ float im; /* Imaginärdel */ struct Komplex * nextPek; /* pekare till nästa i listan */ } Komplex ; Komplex* LaesKomplexaTalLista( void ); void SkrivKomplexTalLista( Komplex * zListPek ); void FreeMemory( Komplex * zListPek );

main() William Sandqvist int main(int argc, char *argv[]) { Komplex * zListPek ; zListPek = LaesKomplexaTalLista(); SkrivKomplexTalLista( zListPek ); FreeMemory( zListPek ); printf("\n"); system("PAUSE"); return 0; }

LaesKomplexaTalLista(void); William Sandqvist Komplex * LaesKomplexaTalLista( void ) { char avslutandeTecken = ' '; Komplex * huvudPek = NULL, * svansPek ; huvudPek = (Komplex *)malloc(sizeof( Komplex )); printf("\nAvsluta med * efter sista talet --> 2 3* !"); printf("\nGe real och imagin\204rdel --> "); scanf("%f%f%c", &huvudPek->re, &huvudPek->im, &avslutandeTecken ); /* vid första inmatningen är huvudet också svans */ svansPek = huvudPek;...

LaesKomplexaTalLista(void); William Sandqvist while ( avslutandeTecken != '*' ) { svansPek->nextPek=(Komplex*)malloc(sizeof(Komplex )); svansPek = svansPek->nextPek; printf("\nAvsluta med * efter sista talet 2 3* !"); printf("\nGe real och imagin\204rdel --> "); scanf("%f%f%c", &svansPek->re, &svansPek->im, &avslutandeTecken); svansPek->nextPek = NULL; } return huvudPek ; }...  ytterligare ett element har lagts till  ett element har lagts till

LaesKomplexaTalLista(void); William Sandqvist return huvudPek ; svansPek->nextPek=(Komplex*)malloc(sizeof(Komplex ));  ny post  ny svans svansPek = svansPek->nextPek;  inmatning scanf("%f%f%c", &svansPek->re, &svansPek->im, &avslutandeTecken);  sista peka på NULL svansPek->nextPek = NULL;  ( returnera huvud/svans )

SkrivKomplexTalLista(); William Sandqvist void SkrivKomplexTalLista( Komplex * zlistPek ) { Komplex *current = zListPek; /* Börja med huvudet */ printf("\n"); while(current != NULL) { printf("%f %fi\n", current->re, current->im); current = current->nextPek; /* Gå vidare till nästa element */ } }

FreeMemory() William Sandqvist while(!NULL) next = current->nextPek current = next free(current) Man kan inte ta bort ett element förrän man sparat undan dess next-pekare!

FreeMemory() William Sandqvist void FreeMemory( Komplex * zListPek) { Komplex *current = zListPek; /* Börja med huvudet */ Komplex * next ; while(current != NULL) { next = current->nextPek; /* Såga aldrig av den gren du sitter på */ free(current); /* Strukten tas bort inklusive nextPek! */ current = next; /* Gå vidare till nästa element */ } }

William Sandqvist Länkad lista i minnet En länkad lista lagras inte sammanhängande i minnet Den här listan kan man inte sortera med Quicksort!

Sortera index William Sandqvist Man sorterar inte länkade listor. Däremot behöver man kunna sortera vilken ordning man vill bearbeta, eller skriva ut, posterna. Inför en sådan uppgift kan man lagra pekarna till posterna i en array (indexarray). Då kan pekarna sorteras utan att posterna behöver flyttas i minnet. Sorteringsfunktionen använder pekarna tillsammans med piloperatorn -> för att nå valfri delpost att sortera utifrån.

Hur sorterar man elefanter? Genom att sortera pekarna – inte gärna genom att flytta på elefanterna! William Sandqvist

Långsamt! Snabbt! NULL