Abstrakta datastrukturer

Relevanta dokument
Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Exempel ( )

Datastrukturer. föreläsning 3. Stacks 1

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 11. ADT:er och datastrukturer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

Föreläsning 5. Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning

Föreläsning 3. Stack

Föreläsning 3. Stack

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

#include <stdio.h> #include <string.h>

Tentamen *:58/ID100V Programmering i C Exempel 3

Datastrukturer och algoritmer

Datastrukturer och algoritmer

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 1 Datastrukturer (DAT037)

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

3 Listor. 3.1 Envägslistor

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

1 Objektorienterad programkonstruktion

Abstrakt datatyp, ADT

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

Länkade strukturer. (del 2)

Algoritmer och Datastrukturer

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Övning 1 - Abstrakta datatyper

Tentamen i Algoritmer & Datastrukturer i Java

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 2. Stackar, köer och listor TDDC91,TDDE22,725G97: DALG. Innehåll. 1 ADT stack. 1.1 Tillämpningar

Föreläsning 3 Datastrukturer (DAT037)

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Tommy Färnqvist, IDA, Linköpings universitet

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

Föreläsning 4 Datastrukturer (DAT037)

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Föreläsning 10. ADT:er och datastrukturer

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Stackar, köer, iteratorer och paket

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 3 Datastrukturer (DAT037)

Datastrukturer och algoritmer

Maskinorienterad programmering, IT2

Föreläsning Datastrukturer (DAT036)

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

Tentamen TEN1 HI

Övning från förra gången: readword

Exempeltenta GruDat 2002/2003

Tentamen Datastrukturer (DAT036)

2 Pekare och dynamiska variabler.

Den som bara har en hammare tror att alla problem är spikar

BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag

TDIU01 - Programmering i C++, grundkurs

Föreläsning 4 Innehåll

Tentamen Datastrukturer (DAT036)

Lösningsförslag till exempeltenta 2

Tentamen TEN1 HI

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Föreläsning 2. Länkad lista och iterator

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Pekare och arrayer. Indexering och avreferering

Föreläsning 2. Länkad lista och iterator

Tentamen Datastrukturer för D2 DAT 035

Föreläsning 9. struct

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Föreläsning 12. struct

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

DAI2 (TIDAL) + I2 (TKIEK)

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Programmeringsteknik för Ingenjörer VT06. Föreläsning 10

2 Modul 2 - (Länkade) Listor

Tentamen Datastrukturer (DAT037)

Datastrukturer. Kapitel Introduktion till datastrukturer Abstrakta datastrukturer

Symboliska konstanter const

Föreläsning 9 Innehåll

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Programmering av inbyggda system. Pekare och Arrayer. Viktor Kämpe

Föreläsning 7. Träd och binära sökträd

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Mål Förklaring av termer

Föreläsning 6: Introduktion av listor

Programmering av inbyggda system. Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe

Datastrukturer. Föreläsning 5. Maps 1

Transkript:

Föreläsning 2 Datastrukturer Abstrakta datastrukturer Stack Stack implementerad med array Länkad lista Stack implementerad med länkad lista Inlämningsuppgifter

Datastrukturer En datastruktur är en struktur som organiserar data Ett elementärt exempel är en array i C Val av datastruktur ska göras så att vi effektivt kan lagra, organisera och processa data För vissa problem är val av rätt datastruktur mer än halva lösningen!

Abstrakta datastrukturer Exempel på datastrukturer: stack, kö, lista, prioritetskö, träd, graf array, länkad lista, heap (-ADT) (-implementeringar) En abstrakta datastruktur (ADT-abstract data type) definieras via operationerna som kan utföras utan att diskutera implementation En stack kan definieras via push (som lägger ett element överst i stacken) och pop (som returnerar översta elementet i stacken) En stack kan implementeras med en array eller en länkad lista Det finns flera möjliga definitioner av tex en stack-adt

Stack (ADT) En stack fungerar som en hög. Man fyller på överst och man tar bort överst. LIFO-Last In First Out. push(element) - lägger element överst i stacken pop() avlägsnar och returnerar översta elementet (ibland pull) Möjliga operationer: initstack() / freestack(stack) isempty() returnerar true om stacken är tom isfull() - returnerar true om stacken är full peek() - returnerar översta elementet (utan att avlägsna det)

Stack implementerad med array stack.c: #include "stack.h" #define SIZE 30 static char stack[size]; static int nrelements = 0; void push(char c){ stack[nrelements]=c; nrelements++; char pop(){ return stack[--nrelements]; int isempty(){ return nrelements == 0; stack.h: void push(char c); char pop(); int isempty(); main.c: #include <stdio.h> #include <stdlib.h> #include "stack.h" int main(){ push('h'); push('e'); push('j'); while(!isempty()) printf("%c,",pop()); return 0; Saknar skydd! Om vi behöver 2 stackar?

Flera stackar stackarray.c: #include <stdlib.h> #include <assert.h> #include "stackarray.h" Stack* initstack(){ Stack *sp = (Stack*)malloc(sizeof(Stack)); sp->nrelements=0; return sp; void push(stack *sp, int element){ assert(sp->nrelements<maxstack); sp->array[sp->nrelements]=element; ++(sp->nrelements); int pop(stack *sp){ assert(!isempty(sp)); --(sp->nrelements); return sp->array[sp->nrelements]; stackarray.h: #define MAXSTACK 20 typedef struct{ int nrelements; int array[maxstack]; Stack; Stack* initstack(); void push(stack *sp, int element); int pop(stack *sp); main.c: Stack *s1 = initstack(); Stack *s2 = initstack(); int i; for(i=0;i<10;i++) push(s1,i); for(i=0;i<10;i++) push(s2,pop(s1)); for(i=0;i<10;i++) printf("element: %d \n",pop(s2)); freestack(s1); freestack(s2);

Länkad lista (enkellänkad) första En länkad lista är en datastruktur där varje element ligger i en nod som håller reda på nästa nod. Det enda man behöver är den första noden. Fördelarna med denna struktur jämfört med ett fält är att den kan växa dynamiskt och att det är effektivt att stoppa in eller ta ut element mitt i. Man behöver inte flytta massor med element utan bara ändra länkarna. Data1 Data2 Data3 Data4

första Lägga till data på godtycklig plats: Data1 Data2 Data3 Data4 Ny data första Ta bort data: Data1 Data2 Data3 Data4

Stack implementerad som länkad lista stacklink.c: #include <stdlib.h> #include "stacklink.h" typedef struct node node; node *top=null; struct node{ char element; node *next; ; void push(char c){ node *newnode = (node *)malloc(sizeof(node)); newnode ->element = c; newnode ->next=top; top= newnode; main.c: #include <stdio.h> #include "stacklink.h" int main(){ int i; for(i=0;i<10;i++){ push('a'+i); while(!isempty()) printf("%c\n",pop()); return 0; stacklink.h: void push(char c); char pop(); int isempty();

stack.c: char pop(){ char c = top->element; node *newnode =top; top = top->next; free(newnode); return c; int isempty(){ return top==null;

Flera stackar stacklink.c: #include <stdlib.h> #include <assert.h> #include "stacklink.h" Stack* initstack(){ Stack *sp = (Stack*)malloc(sizeof(Stack)); sp->top=null; return sp; void push(stack *sp, int element){ Node *newnode = (Node*)malloc(sizeof(Node)); newnode->element=element; newnode->next=sp->top; sp->top=newnode; int pop(stack *sp){ assert(!isempty(sp)); int element = sp->top->element; Node *temp = sp->top; sp->top = sp->top->next; free(temp); return element; stacklink.h: typedef struct node Node; struct node{ int element; Node *next; ; typedef struct{ Node *top; Stack; Stack* initstack(); void push(stack *sp, int element); int pop(stack *sp); main.c: Stack *s1 = initstack(); Stack *s2 = initstack(); int i; for(i=0;i<10;i++) push(s1,i); for(i=0;i<10;i++) push(s2,pop(s1)); for(i=0;i<10;i++) printf("element: %d \n",pop(s2)); freestack(s1); freestack(s2);

Inlämningsuppgifter Följande uppgifter redovisas senast måndag den 28 januari och kan inte redovisas senare: 2A, 2B, 2.2, 2.C 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.

Uppgifter ej i boken 2.A Implementera en stack för decimaltal mha en array. Använd separata filer: stack.c, stack.h, main.c. Stacken ska ha funktionerna push, pop, peek, isempty, isfull, initstack och freestack. Den ska allokera minne för stacken dynamiskt (dvs som på föreläsningen, ejdynamisk storlek på arrayen). Skriv ett eget testprogram i main som testar att allt verkar fungera. Se till att du lär dig att kompilera projekt med flera filer i codeblocks. (2p) 2.B Implementera en stack för strängar mha länkade listor. Använd separata filer. Skriv ett program i main som läser in 10 ord från användaren och lagrar dessa i stacken. Sedan ska programmet skriva ut alla ord i stacken. TIPS: Skapa en struct som innehåller en sträng (char-array). (2p) 2.C Gör exempel 2.1 i boken. (3p)