120 likes | 253 Views
Datastruktur & Algoritmik 4. Lister, Stakke & Køer Specifikation, Verifikation & Implementation. k. k. k. k. k. k. k. e. e. e. e. e. e. e. Dynamiske Mængder samling af objekter. Element. Data. Operationer/interface: Search(Key k):Elem Insert(Elem e) Delete(Key k) Min():Elem
E N D
Datastruktur & Algoritmik 4 Lister, Stakke & Køer Specifikation, Verifikation & Implementation
k k k k k k k e e e e e e e Dynamiske Mængdersamling af objekter Element Data • Operationer/interface: • Search(Key k):Elem • Insert(Elem e) • Delete(Key k) • Min():Elem • Max():Elem • Successor(Elem e):Elem • Predecessor(Elem e):Elem • IsIn(Key k):Boolean Key • Elementære Datastrukturer • Lister (Stakke,Køer) • Hash tabeller • Binære Søgetræer • Rød-Sorte Træer
ListerEn specialiseret mængde L: Elem C A R L O S p1 p2 p3 p4 p5 p6 Positioner • Operationer: • First():Pos • End():Pos • Next(Pos p):Pos • Prev(Pos p):Pos • Retrieve(Pos p):Elem • Insert(Elem e,Pos p) • Delete(Pos p) • Reverse() • Length():Integer • IsEmpty():Boolean
Hüttel, Ingólfsdóttir, Larsen ListerFormel, induktiv definition Liste:sekvens af elementer over A: Definition Notation
k k k k k k k e e e e e e e Dynamiske Mængdersamling af objekter Element Data • Operationer/interface: • Search(Key k):Elem • Insert(Elem e) • Delete(Key k) • Min():Elem • Max():Elem • Successor(Elem e):Elem • Predecessor(Elem e):Elem • IsIn(Key k):Boolean Key • Elementære Datastrukturer • Lister (Stakke,Køer) • Hash tabeller • Binære Søgetræer • Rød-Sorte Træer
Liste Implementation IArrays L: C A R L O S 1 2 3 4 5 6 7 8 9 10 Max Last
Liste Implementation IIKædet Liste I bogen kun key-felt prev key data next key head[L] C A R L O
head[L] C A R L O Kædet ListeOperationer Search(Key k) x:=head[L] while x<>Nil and key[x]<>k do x:=next[x] return x Insert(Elem x) /* x indsættes først i list*/ next[x]:=head[L] if head[L]<>Nil then prev[head[L]]:=x head[L]:=x prev[x]:=Nil Delete(Elem x) /* x slettes*/ if prev[x]<>Nil then next[prev[x]]:=next[x] else head[L]:=next[x] if next[x]<>Nil then prev[next[x]]:=prev[x]
Liste Implementation IIIKædet Liste med vagt (sentinel) vagt[L] x C A R L O Delete(Elem x) /* x slettes*/ next[prev[x]]:=next[x] prev[next[x]]:=prev[x]
StakLast-In-First-Out S: C A R L O S 1 2 3 4 5 6 7 8 9 10 • Operationer: • IsEmpty():Bool • Pop():Elem • Push(Elem e) max top Push(Elem e) if top=max then return OVERFLOW else top:=top+1 S[top]:=e IsEmpty() if top=0 then return TRUE else return FALSE Pop if top=0 then return UNDERFLOW else top:=top-1 return S[top+1]
KøFirst-In-First-Out Q: R L O S 1 2 3 4 5 6 7 8 9 10 Indsæt i halen og slet i hovedet. head tail Enqueue(Elem e) Q[tail]:=e if tail=max then tail:=1 else tail:=tail+1 Dequeue() x:=Q[head] if head=max then head:=1 else head:=head+1 return x IsEmpty() .... IsFull() .....