ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear
ITM2 Innehåll Fält Pekare Listor Träd Stack Kö Egentillverkade datatyper
ITM3 Fält (Array) Endimensionellt fält –Läs av temperaturen var tredje timme under 1 dygn float avl[8]; avl[0] = 11.3; avl[1] = 13.6; avl[5] = -2.3;
ITM4 Tvådimensionellt fält Läs av temperaturen var tredje timme under en vecka float avl[8][7]; // avl[Tid,Dag] avl[2][3] = 13.0; avl[5][6] = -1.7;
ITM5 Listor Kontinuerlig lista (i minnet) –Ett fält är en kontinuerlig lista –Fördel: enkel konstruktion –Nackdelar: storleken sätts vid deklarationen kan ta upp onödigt mycket utrymme krånglig att hantera t.ex. vid sortering & sökning krånglig att utöka
ITM6 Pekare En pekare innehåller adressen till en minnescell där data är lagrad
ITM7 Länkad lista Varje element har en pekare till nästa i listan –Fördelar: enkelt att lägga till och radera data enkelt att sortera data –Nackdel: något krångligare teknik
ITM8 Länkad lista II Radera ett element –Ändra pekaren för elementet innan –Lämna tillbaka minnesallokeringer för den borttagna elementet
ITM9 Länkad lista III Lägga till ett element –Ändra pekaren för elementet innan –Låt det nya elementet peka på nästa i listan
ITM10 Länkad lista IV Pseudokod för en procedur som skriver ut en länkad lista: procedure PrintList(List) Assign curPointer the value headPointer while curPointer inte är NIL do ( Skriv namnet i posten som curPointer pekar på; Assign curPointer the value adressen i aktuell post )
ITM11 Stack En stack är ett exempel på där man kan använda en kontinuerlig lista LIFO = Last In First Out –Tillägg och radering görs i toppen –Push = tillägg –Pop = radering
ITM12 Stack II Minne reserveras för en kontinuerlig lista (gulmarkerat) Stacken kan bli full StackPointer (SP) innehåller adressen till den senast inlagda posten StackPointer flyttas när data ”poppas” och ”pushas”
ITM13 Kö FIFO = First In First Out –Tillägg görs vid svansen (bak) –Radering görs vid huvudet (fram) –HeadPointer (HP) pekar till början av kön –TailPointer (TP) pekar till slutet av kön –Om kön är tom pekar både HP och TP på samma element
ITM14 Kö II I en kontinuerlig lista utnyttjas utrymmet dåligt. Den del som innehåller data flyttar sig inom det reserverade utrymmet Förbättring: –Cirkulär lista –Länkad lista
ITM15 Träd Nod = varje position i trädet Rotnod = noden i ”toppen” av trädet Löv = avslutande nod ”längst ner” i trädet Subträd = delträd Barn = noder närmast under en nod Föräldrar= nod närmast över en nod Syskon = noder med samma föräldrar Djup = största antalet noder från rot till löv
ITM16 Träd i en länkad lista Ett binärträd implementerad med en länkad lista
ITM17 Träd utan pekare
ITM18 Obalanserat träd utan pekare
ITM19 Manipulera datastrukturer Datastrukturer som ett abstrakt verktyg Skapa funktioner som: –Lägger till en post –Ta bort en post –Ändrar en post –Söker –Sorterar –Skriver ut
ITM20 Utskrift av en lista i ett träd procedure PrintTree(Tree) If(trädet inte är tomt)then ( Kör PrintTree för vänster subträd Skriv rotNoden Kör PrintTree för höger subträd ) Vilken skrivs ut först? Vilken skrivs ut tvåa?
ITM21 Sökning i träd Data att lagra i trädet : –A B C D E F G H I J K L M Lagra med ”mittenposten” i roten så blir det enkelt att söka binärt Sökmetod: – Ställ dig i roten –Om söktVärde < aktuelltVärde så gå till vänster barn –Om söktVärde > aktuelltVärde så gå till höger barn –Upprepa detta tills söktVärde = aktuelltVärde eller tills listan är slut
ITM22 Insättning av data i ett träd Data kan sättas in som en nod i botten av trädet oavsett värdet Metod: –Sök i trädet med det nya värdet som sökvärde –Om det nya värdet redan finns görs inget –Om det nya värdet inte finns: Om nya värdet < värdet i aktuell nod så sätt in den nya noden som vänster barn Om nya värdet > värdet i aktuell nod så sätt in den nya noden som höger barn
ITM23 Egentillverkade datatyper Skapa en egen datatyp för att hantera –Namn –Adress –Skonummer struct Person { string name; string address; int shoeNr; }; Person person1, person2; person1.name = ”Olle Svensson”; person1.address= ”Gågatan 3”; person1.shoeNr = 43; person2.name = ”Eva Andersson”; person2.address= ”Byvägen 43”; person2.shoeNr = 37;
ITM24 Egentillverkade datatyper - klasser I datatypen Person kan man lagra data, men inte manipulera det data som är lagrat. Vad betyder: –person1 < person2 ? –person3 = person2 ? I en klass kan man både lagra och utföra operationer på data.