Presentation laddar. Vänta.

Presentation laddar. Vänta.

Föreläsning 3 Lista Array/länkad lista Lista implementerad som länkad lista Inlämningsuppgifter.

Liknande presentationer


En presentation över ämnet: "Föreläsning 3 Lista Array/länkad lista Lista implementerad som länkad lista Inlämningsuppgifter."— Presentationens avskrift:

1 Föreläsning 3 Lista Array/länkad lista Lista implementerad som länkad lista Inlämningsuppgifter

2 Lista I en lista har varje element en position eller ett index Vi kan nå elementen i godtycklig ordning och sätta in eller ta bort element på godtycklig plats

3 Operationer på lista insert(element,index) -placerar element på plats position och flyttar alla element med en position ≥index en position upp remove(index) -tar bort och returnerar element på position index. Alla element med position>index flyttas ned ett steg inspect(index) returnerar (utan att ta bort) elementet på position = index size() returnerar antal element Oftast har man fler operationer (vi ger första platsen index 1 men även 0 förekommer)

4 Implementering av Lista Array +Effektivt och enkelt att hitta godtyckligt element via index - Vi måste flytta många element när vi ska sätta in respektive ta bort mitt i listan. Har en maxstorlek. Länkad lista +Effektivt att stoppa in och ta bort mitt i listan - Ineffektivt att hitta ett godtyckligt element. Ska vi gå igenom hela listan i ordning måste vi söka igenom listan för varje element! (detta löses normalt med en iterator)

5 Implementera med array Se boken

6 Lista implementerad med länkad lista Lista.c : #include #include #include "lista.h” typedef struct node node; node *first=NULL; int nrElements=0; struct node { element e; node *next; };… Lista.c : #include #include #include "lista.h” typedef struct node node; node *first=NULL; int nrElements=0; struct node { element e; node *next; };… Lista.h : typedef struct element element; struct element { char a[ordL]; }; void insert(element e, int index); element inspect(int index); int size(); element remov(int index); Lista.h : typedef struct element element; struct element { char a[ordL]; }; void insert(element e, int index); element inspect(int index); int size(); element remov(int index);

7 Lista implementerad med länkad lista Lista.c forts. : void insert(element e, int index) { node *newNode = (node *)malloc(sizeof(node)); newNode->e=e; if(first==NULL || index==1) { newNode->next=first; first=newNode; } else {… Lista.c forts. : void insert(element e, int index) { node *newNode = (node *)malloc(sizeof(node)); newNode->e=e; if(first==NULL || index==1) { newNode->next=first; first=newNode; } else {…

8 Lista implementerad med länkad lista Lista.c forts. : … node *node1 = first; node *node2 = first->next; while(node2!=NULL && index>2) { node1=node2; node2=node2->next; index--; } node1->next=newNode; newNode->next=node2; } nrElements++; }… Lista.c forts. : … node *node1 = first; node *node2 = first->next; while(node2!=NULL && index>2) { node1=node2; node2=node2->next; index--; } node1->next=newNode; newNode->next=node2; } nrElements++; }… index node1 node2 node1 node2

9 Lista implementerad med länkad lista Lista.c forts. : element inspect(int index) { node *node = first; while(node->next!=NULL && index>1) { node=node->next; index--; } return node->e; }… Lista.c forts. : element inspect(int index) { node *node = first; while(node->next!=NULL && index>1) { node=node->next; index--; } return node->e; }…

10 Lista implementerad med länkad lista Lista.c forts. : int size() { return nrElements; } … Lista.c forts. : int size() { return nrElements; } …

11 Lista implementerad med länkad lista Lista.c forts. : element remov(int index) { assert(0<index && index<=nrElements); if(index==1) { node *node1 = first; element e = first->e; first=first->next; free(node1); nrElements--; return e; } else {… Lista.c forts. : element remov(int index) { assert(0<index && index<=nrElements); if(index==1) { node *node1 = first; element e = first->e; first=first->next; free(node1); nrElements--; return e; } else {…

12 Inlämningsuppgifter Följande uppgifter redovisas senast onsdag den 30 januari och kan inte redovisas senare: 3A, 3B, 3C, 3D/3.1, 3.3 Dessa uppgifter bör göras nu för att ni ska kunna följa kursen på ett bra sätt. Övriga kan ni göra vid tillfälle för högre betyg.

13 Uppgifter ej i boken 3.A Skriv klart funktionen remov till Listan från föreläsningen. Skriv ett mainprogram som testar att listan fungerar som den ska. (2p) 3.B Skriv om listan så att storleken inte sparas i en variabel utan beräknas vid varje anrop till size(). (2p) 3.C Skriv om listan så att vi kan ha flera listor så som vi gjorde med stackarna. (3p) 3.D Implementera en lista med en array som lagrar heltal. Ta stöd av boken. Den ska ha samma operationer som vår lista implementerad med länkad lista. Skriv också ett mainprogram som testar den. Om du väljer att allokera arrayen dynamisk kan du ta med initierings- avslutningsoperationer också. (3p)


Ladda ner ppt "Föreläsning 3 Lista Array/länkad lista Lista implementerad som länkad lista Inlämningsuppgifter."

Liknande presentationer


Google-annonser