Hva er en datastruktur? Datastrukturer Elementære Datastrukturer En datastruktur er en systematisk måte å lagre og organisere data på, slik at det er lett å aksessere og modifisere dataene Eksempler på datastrukturer kan være stacker, køer, lenkede-lister, endimensjonale array (vektor), todimensjonale array (matrise), binære tre, b-tre etc Bernt Ingvald Sunde 1 Bernt Ingvald Sunde 2 Generelt om Datastrukturer Elementer består av En nøkkel og eventuell annen data En kan utføre spørringer Search(S,k), Minimum(S), Maimum(S), Successor(S,) Predecessor(S,) En kan modifisere dataene Insert(S,), Delete(S,) Fordeler / Ulemper Fordeler: Systematisk programmeringsmetodikk Letter programmering av store systemer Bibliotek; mindre repetering av kode Ulemper: Liten ekstra overhead (samme kompleksitet) Bernt Ingvald Sunde 3 Bernt Ingvald Sunde 4 Stakker (Stacks) Stakker (Stacks) Ide: (LIFO) Tallerkenstabel Last-in-first-out Operasjoner Stack-Empty(S) Push(S,) og Pop(S) (Kjøretid O(1) på alle) Tallerkenstabel Bernt Ingvald Sunde 5 Bernt Ingvald Sunde 6
Køer (Queues) Køer (Queues) Ide: (FIFO) Butikk-kø First-in-First-out Operatorer Enqueue(Q,) Dequeue(Q) Kjøretid O(1) på begge Bernt Ingvald Sunde 7 Bernt Ingvald Sunde Lenkede Lister Lenkede lister Representasjon Objekter arrangert i linjær rekkefølge Rekkefølgen er bestemt av pekere, og ikke indeen i et array Egenskaper Tilbyr en fleksibel representasjon av dynamiske sett. Bernt Ingvald Sunde 9 Bernt Ingvald Sunde 10 Lenkede Lister : Grafisk Lenkede Lister : Begreper Grafisk representasjon Enkel: NIL Head [L] key net Tail [L] Dobbel: prev Sortert liste Nøklene ordnet i linjær rekkefølge Bernt Ingvald Sunde 11 Bernt Ingvald Sunde 12
Lenkede Lister : Begreper Senitel Er et dummy objekt som tillater oss å forenkle grense-betingelser. X <- head[l] while NIL and key[] k do <- net[] return Sirkulær liste: Bernt Ingvald Sunde 13 Bernt Ingvald Sunde 14 X <- head[l] while NIL and key[] k do <- net[] return X <- head[l] while NIL and key[] k do <- net[] return Key[] = 6 Key[] = Node ikke funnet Node ikke funnet Bernt Ingvald Sunde 15 Bernt Ingvald Sunde 16 <- head[l] while NIL and key[] k do <- net[] return <- head[l] while NIL and key[] k do <- net[] return Key[] = 3 Key[] = 3 Node funnet, returner node. Kjøretid O(n) i verste tilfelle, siden en kanskje må søke gjennom hele listen Bernt Ingvald Sunde 17 Bernt Ingvald Sunde 1
Lister : Sletting Lister : Sletting List-Delete(L,) if prev[] NIL then net[prev[]] <- net[] else head[l] <- net[] if net[] NIL then prev[net[]] <- prev[] Slett node med key= List-Delete(L,) if prev[] NIL then net[prev[]] <- net[] else head[l] <- net[] if net[] NIL then prev[net[]] <- prev[] Slett node med key= Bernt Ingvald Sunde 19 Bernt Ingvald Sunde 20 Lister : Sletting Lister : Innsetting List-Delete(L,) if prev[] NIL then net[prev[]] <- net[] else head[l] <- net[] if net[] NIL then prev[net[]] <- prev[] Slett node med key= List-Insert(L,) net[] <- head[l] if head[l] NIL then prev[head[l]] <- head[l] <- prev[] <- NIL Sett inn node med key=5 Kjøretid O(1), men O(n) dersom vi vil slette et element med en gitt verdi. Vi må da kalle List-Insert først. Bernt Ingvald Sunde 21 Bernt Ingvald Sunde 22 Lister : Innsetting Lister : Innsetting List-Insert(L,) net[] <- head[l] if head[l] NIL then prev[head[l]] <- head[l] <- prev[] <- NIL Sett inn node med key=5 List-Insert(L,) net[] <- head[l] if head[l] NIL then prev[head[l]] <- head[l] <- prev[] <- NIL Sett inn node med key=5 5-5 - Kjøretid O(1), men O(n) dersom vi vil slette et element med en gitt verdi. Vi må da kalle List-Insert først. Bernt Ingvald Sunde 23 Bernt Ingvald Sunde 24
Hva er et tre? Trestrukturer Tre er en veldig viktige og nyttig datastruktur De er som regel tegnet opp-ned Tillater oss å representere hierarki Alle noder har en far, utenom roten Bernt Ingvald Sunde 25 Bernt Ingvald Sunde 26 Subrutine-struktur Hoved progr. Organisering av informasjon Ola og Kari 1 2 3 Familietre Truls (Gry) Trine (Per) Ole Marte Frank Mona 4 5 Bernt Ingvald Sunde 27 Bernt Ingvald Sunde 2 Organisering av informasjon Bibiliotek Bibiliotek Representasjon av aritmetiske uttrykk i kompilatorteknikken - A * C/D + E/F Bok A Bok B A B * ( C/D + E/F ) B + / / Kapittel 1 Kapittel 2 C D E F Bernt Ingvald Sunde 29 Bernt Ingvald Sunde 30
rot søsken Anatomien til et Tre Rot B og C s Mor/Far-node R Grener Noder far & barn R s subtre A D H B C F G Terminalnode, (endenode, løvnode) Bernt Ingvald Sunde 31 A s barn (venstre) A s barn (høyre) Søskennoder D s etterfølgere Bernt Ingvald Sunde 32 Komplett tre Et tre er komplett dersom alle løvnoder har den samme distansen fra roten Proper tre Alle indre noder har to barn Proper tre Komplett tre Fritt tre Enhver node oppfattes som rot Grener uten retning Rettet tre Grenene har retning Roten entydig valgt Trehøyden Maks antall grener som kan passeres fra og med rot til og med løvnode Bernt Ingvald Sunde 33 Bernt Ingvald Sunde 34 Nivå for node Antall grener som må passeres fra og med tot til og med node Node grad Antall subtrær for noden Antall barn Binær tre Rettet tre der hver node har høyst 2 etterfølgere Ordnet tre Den relative ordning av subtrær har betydning Bernt Ingvald Sunde 35 Bernt Ingvald Sunde 36
Tre vs. Grafer / Nettverk Internet er ikke et tre. Hvorfor ikke? Noder i et kan bare ha en far Grafer / Nettverk er det mer generelle tilfellet Abstrakte, nøstede datastrukturer Bernt Ingvald Sunde 37 Bernt Ingvald Sunde 3 Nøstede datastrukturer Nøstede datastrukturer Liste av Lister Matrise av Lister Vektor av binære trær av lister Bernt Ingvald Sunde 39 Bernt Ingvald Sunde 40 Nøstede datastrukturer Blandet tilfelle: Flettdede lister Fylke Stikk- Ordliste Parti Bernt Ingvald Sunde 41 Bernt Ingvald Sunde 42