IT1101 Informatikk basisfag Plan de siste ukene: I dag: siste om datastruktuter (kap. 7) Mandag 17/11: dobbel forelesning om filstrukturer (kap. 8) Torsdag 20/11: øvingsforelesning med Inge Mandag 24/11: dobbel forelesning om datahistorie og IT og lovverket (og etikk) Torsdag 27/11: oppsummering Sist gang (1) atastruktur: hvordan organisere data i et program (fysisk: i hovedminnet) Hovedminnet er lineært pp: dressert fra 00000000 (hex: 00) til 11111111 (hex: FF) atastruktur: Tabell ata ligger i en sammenhengende blokk i minnet (1, 2 eller flere dimensjoner) Fordeler: 1) Kan hoppe direkte inn i tabellen (kan beregne hvor elementer ligger ut fra adressen til det første elementet) nødvendig ved binærsøk 2) nkel å bruke Ulemper: 1) Må flytte elementer ved innsetting og utsetting (dersom vi feks skal holde elementene sortert). 2) Tabellen kan ikke utvides (er statisk). Sist gang (2) Hva menes med konseptuelt og fysisk i forb med datastrukturer? atastruktur: Lenket liste ata ligger hvor som helst i hovedminnet Pekere lenker elementene sammen Hvert element består av 1) verdi og 2) adresse til neste element (pekeren) Fordeler: 1)lite arbeid å sette inn og slette elementer 2)er dynamisk (kan vokse etter behov) Ulempe: 1)Må traversere elementene sekvensielt kan ikke bruke binærsøk Konseptuell datastruktur: hvordan vi kan skissere datastrukturen hvordan vi ser den for oss Men den må lagres binært i et lineært hovedminne (fysisk) flates ut F F Oppgave: lenket liste (konseptuelt) Oppgave: Lenket liste (fysisk) Vi har en lenket liste med elementene,, G og S som vist i figur under. Lista er sortert. ) Ta ut element G (vis i skisse hvordan peker(ne) skal forandres) ) Sett inn element. Lista skal fortsatt være sortert. F S NIL G enne tabellen viser innholdet til hovedminnets minneceller på et gitt tidspunkt. ) Fyll inn adressene til hvert element slik at innholdet i minnet representerer en alfabetisk sortert lenket liste. ) Hva blir head pointer? Hver bokstav representeres vha 8 bit (SII) 1 2 3 4 5 6 7 8 9 J L P
Oppgave: tabell (fysisk) Gitt en 1-dimensjonal tabell med 7 elementer Tabellen skal være sortert Til høyre vises innholdet til hovedminnets minneceller på et gitt tidspunkt. ) Sett inn bokstaven. Hva må skje? ) Slett deretter. Hva bør skje? dresse 0 1 2 3 4 5 6 Innhold J L P - Vi har andre datastrukturer, feks Stakk n stakk er en spesiell form for liste. I en tabell eller lenket liste kan man legge inn og slette elementer hvor som helst i tabellen/lista Hvis man i en slik tabell eller liste kun har lov til å legg inn og slette elementer i den ene enden av tabellen/lista kaller vi dette en stakk! nalogier: Operasjoner på datastrukturen Vi kan utføre operasjoner på datastrukturen: Legg inn element Slette element I forbindelse med stakk så kaller vi operasjonen å legge inn element push (dytte) Og å slette element pop (hente ut) Fysisk representasjon av stakk (implementasjon) Kan lagres vha en sammenhengende blokk (som for tabeller) eller vha pekere (som for lenkede lister) Ved sammenhengende område: stakken har en maks størrelse en ene enden er bunnen base! Har en peker til toppen av stakken stakkpeker! Ved pekere (mindre vanlig): Stakken blir dynamisk (ingen maksstørrelse) Legge inn og ta ut av en stakk (ved sammenhengede område) Når vi legger inn: stakkpeker oppdateres til å peke på det nye elementet som legges inn Når vi fjerner: stakkpeker oppdateres til å peke på elementet under den vi tar av Oppgave: stakk enne tabellen representerer en stakk som 10 er lagret i en sammenhengende blokk i 11 hovedminnet. 12 ersom basen til stakken er 10 og 13 G stakkpekeren har verdi 13, hvordan vil 14 J minnet se ut og hvilken verdi vil 15 K stakkpekeren ha etter at følgende er utført 16 L på stakken: 17 M Pop() 18 Push(L) 19 F Push(K) 20 P Pop() 21
nda en datastruktur: kø For stakk: tar ut og legger inn i samme ende av lista/tabellen Hvordan fungererer en kø?? Legger inn i den ene enden og tar ut i den andre Kaller front for head Og ende for tail n kø kan også lagres fysisk vha en sammenhengende blokk eller pekere Legge inn og ta ut av en kø (ved sammenhengede område) Manipulerer (endrer) head og tail pekerne Køa vil krype innover i minnet Problem: Legger til i samme ende hele tiden Sletter i samme ende hele tiden Køen kryper innover i minnet n sirkulær kø-implementasjon n kø implementes vanligvis på en sirkulær måte vs vi setter av et fast område til køa, og når køa når slutten legges nye elementer inn i starten. Har en makslengde på køa, må passe på atastrukturer i programmeringspråk I høynivå programmeringspråk kan vi definere slike datastrukturer selv, eller de kan være en del av et standardbibliotek som følger programmerinsspråket. Å forstå hvordan datastrukturene implementeres fysisk er viktig fordi: Vite om begrensninger og muligheter Fordeler og ulemper Stack klassen i Java PI Ferdig Stack klasse i Java PI (pplication Programming Interface) public class Stack
n siste datastruktur: tre! egreper i forbindelse med trær Organisere data på en hierarkisk måte! ksempel på data organisert som et tre: organisasjonskart i en bedrift Opp-ned tre Node: et element i treet Rotnode: øverste node i treet Løv/terminalnoder: noder nederst i treet Foreldrenode: en node som peker til en annen node arnenode: en node som blir pekt på Søskennoder: noder med samme foreldrenode Undertrær (sub-trees): er del-trær i et større tre ybde: antall noder i den lengste stien fra rot til en løvnode Fysisk lagring av trær Implementasjon vha pekere forts. Trær kan og lagres fysisk vha sammenhengende område og vha pekere! Vha pekere: Nodene kan ligge hvor som helst Hver node holder på sin verdi pluss to pekere venstrebarn og høyrebarn (evt til NIL) Hver node vil altså bestå av 3 komponenter: Rotpeker: peker til treets rot! lternativ til lenkede binærtrær: sammenhengende blokk inærtre lagret i sammenhengende blokk (2) arna til node n ligger da i posisjon 2n og 2n+1 i denne blokka Organisering i blokka: Rotnoden ligger først eretter følger venstre og høyre barn av rotnoden Så følger venstre og høyre barn av venstre barn av rotnoden etc.
Problem med statisk struktur kontra bruk av pekere ersom treet er skjevt vil man sløse med plass Scenario: vi trenger å lagre data i en datastruktur men vet ikke hvilken Vi ønsker å lage en liste! Krav: Man skal kunne utføre følgende (effektivt): 1. Søke etter elementer i lista 2. Sette inn et nytt element Problemanalyse Vi kan velge å lagre listen i en tabell Problem: lite effektivt å sette inn element (masseforflytning i minnet) Vi kan velge å lagre i en lenket liste Problem: lite effektivt å søke i listen, må traversere sekvensiellt Ønsker å bruke binærsøkealgoritmen! Løsning Løsning: Implementerer listen som et lenket binærtre (dvs bruke pekere) Hvordan? Setter det midterste elementet i lista til å være rotnoden et midterste elementet til den venstre lista blir venstre barnenode til rotnoden et midterste elemenetet til den høyre lista blir høyre barnenode til rotnoden osv. ks. Lagring av liste i binærtre Søking i lista (treet) Listen,,,,, F, G, H, I, J, K, L, M. Søke etter bokstaven J. inærsøk!
Legge inn nytt element M Som ved binærsøk! t lenket binærtre Fordeler i forhold til tabeller og lenkede lister: Raskt å søke etter elementer (må skje sekvensielt i lenket liste) Lett å sette inn nye elementer (masseforflytning i tabell) ksamensoppgave H02 5a