Riktade listor i C och Java Lösning till gruppövning 1.

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

Algoritmer och data strukturer -Länkade listor
Föreläsning 3 Lista Array/länkad lista Lista implementerad som länkad lista Inlämningsuppgifter.
Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper
Programmeringsteknik Föreläsning 6 Skolan för Datavetenskap och kommunikation.
Fortsättningskurs i Programmering lektion 6
OOP Objekt-orienterad programmering
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Binära Sökträd, kapitel 19
Föreläsning 2 Datastrukturer Abstrakta datastrukturer Stack
C-programmering ID120V William Sandqvist Länkad lista
Arv.
Programmeringsteknik för K och Media
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Alice in Action with Java
i olika programmeringsspråk
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++
Föreläsning 5. Problemet Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism) class Bil : public.
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
int res2=Math.max(tal1,tal2);
4. Arv och dynamisk bindning
Föreläsning 8, kapitel 8 Förbättra strukturen med arv Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
Vektorer (klassen Vector) Sortering
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Arv.
Programmeringsteknik för Media1 & K1
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
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
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Reflektioner kring OU1 Generellt sett bra kvalitet på dokumentationen! Första intryck... –Skulle du lämna in en jobbansökan med ett häftstift/gem eller.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Datastrukturer och algoritmer
OOP F14:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 14 Repetition Tips inför inlämningsuppgift 2.
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Sökträd, naiva och balancerade lösningar -HashTable -- Kapitel.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Föreläsning 2. Allmänt STL genererar varningar i Visual C++ –”#pragma warning (disable : 4786)”
Föreläsning 3, Kapitel 3 Objektinteraktion - Skapa objekt som samarbetar Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David.
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.
7. Delegerare och notifierare
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
TILLÄMPAD DATALOGI (TILDA) Övning 1 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
Programmeringsteknik
Programmeringsteknik för K och Media
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 10.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 4.
Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 1 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Överlagring av operatorer.
Arv, abstrakta klasser och gränssnitt
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Sökning, Symbol tabeller Binära sökträd.
Länkade listor á la C/C++
Föreläsning 3: Booleans, if, switch
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Föreläsning 9: Arv och UML
Repetitionsföreläsning 1: Lite rekursion & problemlösning
Presentationens avskrift:

Riktade listor i C och Java Lösning till gruppövning 1

Gränsytan på sidan 66 Empty ()  Dlist(val) Insert (v:val, p:pos, l: Dlist(val))  (Dlist(val), pos) IsEmpty(l:Dlist(val))  Bool Inspect(p:pos, l: Dlist(val))  val IsEnd(p:pos, l: Dlist(val))  Bool First(l: Dlist(val))  pos Next(p:pos, l: Dlist(val))  pos Remove (p:pos, l: Dlist(val))  (Dlist(val), pos)

”Problemet” Insert ska stoppa in ett element före den angivna positionen. –Men i en riktad lista finns ingen prev-pekare... Hur löser man problemet? –Stoppar in en ny cell efter positionen, kopierar värdet på positionen till den nya cellen och stoppar in det nya värdet på den gamla platsen. –Använder sig av en fysisk och en logisk referens

Java vs. C I Java –är den abstrakta datatypen en egen klass som döljer attributen och eventuella hjälpmetoder. –man har inte listan med som argument till metoderna. –Empty motsvaras av klassens konstruktor. I C –når man alla funktioner ”lika lätt” och man har listan med som argument. –måste man komma ihåg att avallokera minnet man använder. –funktionshuvudena blir i princip som de i boken.

Java:s interface public interface DListInterface { // Empty ()  Dlist(val) blir konstruktorn public Pos insert(Object v, Pos p) ; public boolean isEmpty(); public Object inspect(Pos p); public boolean isEnd(Pos p); public Pos first(); public Pos next(Pos p); public Pos remove(Pos p); } DListInterface.java

C:s ”interface” /* Funktionsprototyper */ dlist_t *dlist_empty(); pos_t *dlist_insert(dlist_t *list, void *v, pos_t *pos); int dlist_isempty(dlist_t *list); void *dlist_inspect(dlist_t *list, pos_t *pos); int dlist_isend(dlist_t *list, pos_t *pos); pos_t *dlist_first(dlist_t *list); pos_t *dlist_next(dlist_t *list, pos_t *pos); pos_t *dlist_remove(dlist_t *list, pos_t *pos); DList.c

Datatypen Pos och DList Java class Pos{ // Inte så snyggt gjort!!! public Object v = null; public Pos next = null; } // DList blir en egen klass public class DList implements DListInterface{ private Pos head; … C typedef struct pos_s{ void *v; struct pos_s *next; } pos_t; typedef struct dlist_s{ pos_t *head; } dlist_t;

Empty DList(){ // Tomma listan head = new Pos(); head.next = head; } dlist_t *dlist_empty(){ dlist_t *list = malloc(sizeof(dlist_t)); list->head = malloc(sizeof(pos_t)); list->head->next = list->head; return list; } head vnext list

IsEmpty, Inspect public boolean isEmpty(){ return (head.next == head); } public Object inspect(Pos pos){ return (pos.next.v); } int dlist_isempty(dlist_t *list){ return (list->head->next == list->head); } void *dlist_inspect(dlist_t *list, pos_t *pos){ return (pos->next->v); } Kom ihåg: Inspect är inte definierad för listans sista position head vnext list vnextv... vnext pos Logisk position Fysisk position

IsEnd, First, Next public boolean isEnd(Pos pos){ return (pos.next == head); } public Pos first(){ return (head); } public Pos next(Pos pos){ return (pos.next); } int dlist_isend(dlist_t *list, pos_t *pos){ return (pos->next == list->head); } pos_t *dlist_first(dlist_t *list){ return (list->head); } pos_t *dlist_next(dlist_t *list, pos_t *pos){ return (pos->next); } head vnext list vnextv... vnext

Insert public Pos insert (Object v, Pos pos){ Pos p = new Pos(); p.v = v; if (isEmpty()) { head.next = p; p.next = head; return head; } else { p.next = pos.next; pos.next = p; return pos; } pos_t *dlist_insert(dlist_t *list, void *v, pos_t *pos) { pos_t *p = malloc(sizeof(pos_t)); p->v = v; if (dlist_isempty(list)) { list->head->next = p; p->next = list->head; return list->head; } else { p->next = pos->next; pos->next = p; return pos; }

Remove public Pos remove(Pos pos){ Pos p = pos.next; p.v = null; // Behövs eg. inte pos.next = p.next; return pos.next; } pos_t *dlist_remove(dlist_t *list, pos_t *pos){ pos_t *p = pos->next; if (p->v != NULL) { free(p->v); } pos->next = p->next; return pos->next; }