Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Data Structures
Data Structures and Algorithms
Outline
1 Stacks
2 Queues
Definition
Stack: Abstract data type with the following
operations:
Definition
Stack: Abstract data type with the following
operations:
Push(Key): adds key to collection
Definition
Stack: Abstract data type with the following
operations:
Push(Key): adds key to collection
Key Top(): returns most
recently-added key
Definition
Stack: Abstract data type with the following
operations:
Push(Key): adds key to collection
Key Top(): returns most
recently-added key
Key Pop(): removes and returns most
recently-added key
Definition
Stack: Abstract data type with the following
operations:
Push(Key): adds key to collection
Key Top(): returns most
recently-added key
Key Pop(): removes and returns most
recently-added key
Boolean Empty(): are there any
elements?
Balanced Brackets
Input: A string str consisting of ‘(‘, ‘)’, ‘[‘,
‘]’ characters.
Output: Return whether or not the string’s
parentheses and square brackets are
balanced.
Balanced Brackets
Balanced:
“([])[]()”,
“((([([])]))())”
Unbalanced:
“([]]()”
“][”
IsBalanced(str )
Stack stack
for char in str :
if char in [‘(‘, ‘[‘]:
stack.Push(char )
else:
if stack.Empty(): return False
top ← stack.Pop()
if (top = ‘[‘ and char != ‘]’) or
(top = ‘(‘ and char != ‘)’):
return False
return stack.Empty()
Stack Implementation with Array
numElements: 0
Push(a)
Stack Implementation with Array
numElements: 0
Push(a)
Stack Implementation with Array
numElements: 1
a
Push(a)
Stack Implementation with Array
numElements: 1
a
Push(a)
Stack Implementation with Array
numElements: 1
a
Push(b)
Stack Implementation with Array
numElements: 2
a b
Push(b)
Stack Implementation with Array
numElements: 2
a b
Push(a)
Stack Implementation with Array
numElements: 2
a b
Top()
Stack Implementation with Array
numElements: 2
a b
Top()→ b
Stack Implementation with Array
numElements: 2
a b
Push(a)
Stack Implementation with Array
numElements: 2
a b
Push(c)
Stack Implementation with Array
numElements: 3
a b c
Push(c)
Stack Implementation with Array
numElements: 3
a b c
Push(a)
Stack Implementation with Array
numElements: 3
a b c
Pop()
Stack Implementation with Array
numElements: 2
a b
Pop()→ c
Stack Implementation with Array
numElements: 2
a b
Push(a)
Stack Implementation with Array
numElements: 2
a b
Push(d)
Stack Implementation with Array
numElements: 3
a b d
Push(d)
Stack Implementation with Array
numElements: 3
a b d
Push(a)
Stack Implementation with Array
numElements: 3
a b d
Push(e)
Stack Implementation with Array
numElements: 4
a b d e
Push(e)
Stack Implementation with Array
numElements: 4
a b d e
Push(a)
Stack Implementation with Array
numElements: 4
a b d e
Push(f)
Stack Implementation with Array
numElements: 5
a b d e f
Push(f)
Stack Implementation with Array
numElements: 5
a b d e f
Push(a)
Stack Implementation with Array
numElements: 5
a b d e f
Push(g)
Stack Implementation with Array
numElements: 5
a b d e f
Push(g)→ ERROR
Stack Implementation with Array
numElements: 5
a b d e f
Push(a)
Stack Implementation with Array
numElements: 5
a b d e f
Empty()
Stack Implementation with Array
numElements: 5
a b d e f
Empty() → False
Stack Implementation with Array
numElements: 5
a b d e f
Push(a)
Stack Implementation with Array
numElements: 5
a b d e f
Pop()
Stack Implementation with Array
numElements: 4
a b d e
Pop()→ f
Stack Implementation with Array
numElements: 4
a b d e
Push(a)
Stack Implementation with Array
numElements: 4
a b d e
Pop()
Stack Implementation with Array
numElements: 3
a b d
Pop()→ e
Stack Implementation with Array
numElements: 3
a b d
Push(a)
Stack Implementation with Array
numElements: 3
a b d
Pop()
Stack Implementation with Array
numElements: 2
a b
Pop()→ d
Stack Implementation with Array
numElements: 2
a b
Push(a)
Stack Implementation with Array
numElements: 2
a b
Pop()
Stack Implementation with Array
numElements: 1
a
Pop()→ b
Stack Implementation with Array
numElements: 1
a
Push(a)
Stack Implementation with Array
numElements: 1
a
Pop()
Stack Implementation with Array
numElements: 0
Pop()→ a
Stack Implementation with Array
numElements: 0
Push(a)
Stack Implementation with Array
numElements: 0
Empty()
Stack Implementation with Array
numElements: 0
Empty() → True
Stack Implementation with Array
numElements: 0
Push(a)
Stack Implementation with
Linked List
head
Push(a)
Stack Implementation with
Linked List
head
Push(a)
Stack Implementation with
Linked List
a
head
Push(a)
Stack Implementation with
Linked List
a
head
Push(a)
Stack Implementation with
Linked List
a
head
Push(b)
Stack Implementation with
Linked List
b a
head
Push(b)
Stack Implementation with
Linked List
b a
head
Push(a)
Stack Implementation with
Linked List
b a
head
Top()
Stack Implementation with
Linked List
b a
head
Top()→ b
Stack Implementation with
Linked List
b a
head
Push(a)
Stack Implementation with
Linked List
b a
head
Push(c)
Stack Implementation with
Linked List
c b a
head
Push(c)
Stack Implementation with
Linked List
c b a
head
Push(a)
Stack Implementation with
Linked List
c b a
head
Pop()
Stack Implementation with
Linked List
b a
head
Pop()→ c
Stack Implementation with
Linked List
b a
head
Push(a)
Stack Implementation with
Linked List
b a
head
Push(d)
Stack Implementation with
Linked List
d b a
head
Push(d)
Stack Implementation with
Linked List
d b a
head
Push(a)
Stack Implementation with
Linked List
d b a
head
Push(e)
Stack Implementation with
Linked List
e d b a
head
Push(e)
Stack Implementation with
Linked List
e d b a
head
Push(a)
Stack Implementation with
Linked List
e d b a
head
Push(f)
Stack Implementation with
Linked List
f e d b a
head
Push(f)
Stack Implementation with
Linked List
f e d b a
head
Push(a)
Stack Implementation with
Linked List
f e d b a
head
Empty()
Stack Implementation with
Linked List
f e d b a
head
Empty() → False
Stack Implementation with
Linked List
f e d b a
head
Push(a)
Stack Implementation with
Linked List
f e d b a
head
Pop()
Stack Implementation with
Linked List
e d b a
head
Pop()→ f
Stack Implementation with
Linked List
e d b a
head
Push(a)
Stack Implementation with
Linked List
e d b a
head
Pop()
Stack Implementation with
Linked List
d b a
head
Pop()→ e
Stack Implementation with
Linked List
d b a
head
Push(a)
Stack Implementation with
Linked List
d b a
head
Pop()
Stack Implementation with
Linked List
b a
head
Pop()→ d
Stack Implementation with
Linked List
b a
head
Push(a)
Stack Implementation with
Linked List
b a
head
Pop()
Stack Implementation with
Linked List
a
head
Pop()→ b
Stack Implementation with
Linked List
a
head
Push(a)
Stack Implementation with
Linked List
a
head
Pop()
Stack Implementation with
Linked List
head
Pop()→ a
Stack Implementation with
Linked List
head
Push(a)
Stack Implementation with
Linked List
head
Empty()
Stack Implementation with
Linked List
head
Empty() → True
Stack Implementation with
Linked List
head
Push(a)
Stack Implementation with
Linked List
Stack Implementation with
Linked List
Stack Implementation with
Linked List
Push(a)
Summary
1 Stacks
2 Queues
Definition
Queue: Abstract data type with the following
operations:
Definition
Queue: Abstract data type with the following
operations:
Enqueue(Key): adds key to collection
Definition
Queue: Abstract data type with the following
operations:
Enqueue(Key): adds key to collection
Key Dequeue(): removes and returns
least recently-added key
Definition
Queue: Abstract data type with the following
operations:
Enqueue(Key): adds key to collection
Key Dequeue(): removes and returns
least recently-added key
Boolean Empty(): are there any
elements?
Definition
Queue: Abstract data type with the following
operations:
Enqueue(Key): adds key to collection
Key Dequeue(): removes and returns
least recently-added key
Boolean Empty(): are there any
elements?
head tail
Push(a)
Queue Implementation with
Linked List
head tail
Enqueue(a)
Queue Implementation with
Linked List
head tail
a
Enqueue(a)
Queue Implementation with
Linked List
head tail
a
Push(a)
Queue Implementation with
Linked List
head tail
a
Enqueue(b)
Queue Implementation with
Linked List
head tail
a b
Enqueue(b)
Queue Implementation with
Linked List
head tail
a b
Push(a)
Queue Implementation with
Linked List
head tail
a b
Empty()
Queue Implementation with
Linked List
head tail
a b
Empty()→ False
Queue Implementation with
Linked List
head tail
a b
Push(a)
Queue Implementation with
Linked List
head tail
a b
Enqueue(c)
Queue Implementation with
Linked List
head tail
a b c
Enqueue(c)
Queue Implementation with
Linked List
head tail
a b c
Push(a)
Queue Implementation with
Linked List
head tail
a b c
Dequeue()
Queue Implementation with
Linked List
head tail
b c
Dequeue()→ a
Queue Implementation with
Linked List
head tail
b c
Push(a)
Queue Implementation with
Linked List
head tail
b c
Enqueue(d)
Queue Implementation with
Linked List
head tail
b c d
Enqueue(d)
Queue Implementation with
Linked List
head tail
b c d
Push(a)
Queue Implementation with
Linked List
head tail
b c d
Enqueue(e)
Queue Implementation with
Linked List
head tail
b c d e
Enqueue(e)
Queue Implementation with
Linked List
head tail
b c d e
Push(a)
Queue Implementation with
Linked List
head tail
b c d e
Enqueue(f)
Queue Implementation with
Linked List
head tail
b c d e f
Enqueue(f)
Queue Implementation with
Linked List
head tail
b c d e f
Push(a)
Queue Implementation with
Linked List
head tail
b c d e f
Dequeue()
Queue Implementation with
Linked List
head tail
b c d e f
Dequeue()→ b
Queue Implementation with
Linked List
head tail
c d e f
Push(a)
Queue Implementation with
Linked List
head tail
c d e f
Dequeue()
Queue Implementation with
Linked List
head tail
d e f
Dequeue()→ c
Queue Implementation with
Linked List
head tail
d e f
Push(a)
Queue Implementation with
Linked List
head tail
d e f
Dequeue()
Queue Implementation with
Linked List
head tail
e f
Dequeue()→ d
Queue Implementation with
Linked List
head tail
e f
Push(a)
Queue Implementation with
Linked List
head tail
e f
Dequeue()
Queue Implementation with
Linked List
head tail
f
Dequeue()→ e
Queue Implementation with
Linked List
head tail
f
Push(a)
Queue Implementation with
Linked List
head tail
f
Dequeue()
Queue Implementation with
Linked List
head tail
Dequeue()→ f
Queue Implementation with
Linked List
head tail
Push(a)
Queue Implementation with
Linked List
head tail
Empty()
Queue Implementation with
Linked List
head tail
Empty() → True
Queue Implementation with
Linked List
head tail
Push(a)
Queue Implementation with
Linked List
Push(a)
Queue Implementation with Array
0 0
read write
Enqueue(a)
Queue Implementation with Array
0 1
read write
Enqueue(a)
Queue Implementation with Array
0 1
read write
Push(a)
Queue Implementation with Array
0 1
read write
Enqueue(b)
Queue Implementation with Array
0 2
read write
a b
Enqueue(b)
Queue Implementation with Array
0 2
read write
a b
Push(a)
Queue Implementation with Array
0 2
read write
a b
Empty()
Queue Implementation with Array
0 2
read write
a b
Empty()→ False
Queue Implementation with Array
0 2
read write
a b
Push(a)
Queue Implementation with Array
0 2
read write
a b
Enqueue(c)
Queue Implementation with Array
0 3
read write
a b c
Enqueue(c)
Queue Implementation with Array
0 3
read write
a b c
Push(a)
Queue Implementation with Array
0 3
read write
a b c
Dequeue()
Queue Implementation with Array
1 3
read write
b c
Dequeue()→ a
Queue Implementation with Array
1 3
read write
b c
Push(a)
Queue Implementation with Array
1 3
read write
b c
Dequeue()
Queue Implementation with Array
2 3
read write
Dequeue()→ b
Queue Implementation with Array
2 3
read write
Push(a)
Queue Implementation with Array
2 3
read write
Enqueue(d)
Queue Implementation with Array
2 4
read write
c d
Enqueue(d)
Queue Implementation with Array
2 4
read write
c d
Push(a)
Queue Implementation with Array
2 4
read write
c d
Enqueue(e)
Queue Implementation with Array
2 0
read write
c d e
Enqueue(e)
Queue Implementation with Array
2 0
read write
c d e
Push(a)
Queue Implementation with Array
2 0
read write
c d e
Enqueue(f)
Queue Implementation with Array
2 1
read write
f c d e
Enqueue(f)
Queue Implementation with Array
2 1
read write
f c d e
Push(a)
Queue Implementation with Array
2 1
read write
f c d e
Enqueue(g)
Queue Implementation with Array
2 1
read write
f c d e
Enqueue(g)→ ERROR
Queue Implementation with Array
2 1
read write
f c d e
Push(a)
Queue Implementation with Array
2 1
read write
f c d e
Dequeue()
Queue Implementation with Array
3 1
read write
f d e
Dequeue()→ c
Queue Implementation with Array
3 1
read write
f d e
Push(a)
Queue Implementation with Array
3 1
read write
f d e
Dequeue()
Queue Implementation with Array
4 1
read write
f e
Dequeue()→ d
Queue Implementation with Array
4 1
read write
f e
Push(a)
Queue Implementation with Array
4 1
read write
f e
Dequeue()
Queue Implementation with Array
0 1
read write
Dequeue()→ e
Queue Implementation with Array
0 1
read write
Push(a)
Queue Implementation with Array
0 1
read write
Dequeue()
Queue Implementation with Array
1 1
read write
Dequeue()→ f
Queue Implementation with Array
1 1
read write
Push(a)
Queue Implementation with Array
1 1
read write
Empty()
Queue Implementation with Array
1 1
read write
Empty() → True
Summary
Summary