data structures - cse.chalmers.se · print a singly linked list in reverse in constant space:...

65
Data Structures Exercise Session Marco Vassena

Upload: others

Post on 10-Jul-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Data StructuresExercise Session

Marco Vassena

Page 2: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 1 from 12/08

Analyze the time complexity

in terms of M , N and |stack|

for(int r = 0; r < M; r++) for(int c = 0; c < N; c++)

stack.push(c);

Page 3: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3 from 12/04

1 2 3 4 5.append ( )

Page 4: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3 from 12/04

1 2 3 4 5.append ( )

=

1 2 3 4 5

Page 5: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3 from 12/04

Implement append in O(1)

1 2 3 4 5.append ( )

=

1 2 3 4 5

Page 6: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Linked List

Page 7: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Linked ListList

Page 8: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Linked ListListhead

Page 9: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1

Linked List

ListNode

Listhead

Page 10: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1

Linked List

ListNode

next

Listhead

Page 11: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

Linked List

ListNode

next

Listhead

Page 12: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

Linked List

ListNode null

next

Listhead

Page 13: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

4 5

.append ( )

Page 14: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

4 5

.append ( )

Page 15: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

4 5

O(N) .append ( )

Page 16: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

4 5

O(N) .append ( )

Page 17: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

Linked List with pointer to last

Page 18: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

Linked List with pointer to last

Page 19: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

Linked List with pointer to last

tail

Page 20: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

4 5

.append ( )

Page 21: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

4 5

.append ( )

Page 22: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

4 5

.append ( )

Page 23: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

4 5

.append ( )O(1 )

Page 24: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

1 2 3

4 5

.append ( )O(1 )

Page 25: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3.25a

Stack:

Page 26: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3.25a

Stack:

push(x)

Page 27: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3.25a

Stack:

push(x) O(1)

Page 28: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3.25a

Stack:

push(x) O(1)

Page 29: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3.25a

Stack:

push(x)

pop()

O(1)

Page 30: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3.25a

Stack:

push(x)

pop()

O(1)

O(1)

Page 31: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3.25a

Stack:

push(x)

pop()

O(1)

O(1)

Page 32: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3.25a

Stack:

push(x)

pop()

findMin()

O(1)

O(1)

Page 33: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3.25a

Stack:

push(x)

pop()

findMin()

O(1)

O(1)

O(1)

Page 34: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3.25a

Stack:

push(x)

pop()

findMin()

O(1)

O(1)

O(1)

Page 35: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3.29

Print a singly linked list in reverse in constant space:

Page 36: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3.29

Print a singly linked list in reverse in constant space:

1 2 3 .printRev () // O(1) memory

Page 37: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 3.29

Print a singly linked list in reverse in constant space:

1 2 3 .printRev () // O(1) memory

3

2

1

Page 38: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs

here prev next

Page 39: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs

here prev next

Init

Page 40: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs

here prev next

Init

here = xs.head prev = null

Page 41: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs

here prev next

Init

here = xs.head prev = null

Page 42: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs

here prev next

Init

here = xs.head prev = null

Page 43: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs

here prev next

Init

Rev Loop

here = xs.head prev = null

Page 44: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs

here prev next

Init

while (here ≠ null) do next = here.next here.next = prev prev = here

here = next

Rev Loop

here = xs.head prev = null

Page 45: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs

here prev next

Init

while (here ≠ null) do next = here.next here.next = prev prev = here

here = next

Conc

Rev Loop

here = xs.head prev = null

Page 46: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs

here prev next

Init

while (here ≠ null) do next = here.next here.next = prev prev = here

here = next

Conc

xs.head = prev

Rev Loop

here = xs.head prev = null

Page 47: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs.head = prev

1xs

here prev next

Init

while (here ≠ null) do next = here.next here.next = prev prev = here

here = next

Conc

Rev Loop

here = xs.head prev = null

Page 48: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs.head = prev

1xs

here prev next

Init

while (here ≠ null) do next = here.next here.next = prev prev = here

here = next

Conc

Rev Loop

here = xs.head prev = null

Page 49: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs.head = prev

1xs

here prev next

Init

while (here ≠ null) do next = here.next here.next = prev prev = here

here = next

Conc

Rev Loop

here = xs.head prev = null

Page 50: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs.head = prev

1xs

here prev next

Init

while (here ≠ null) do next = here.next here.next = prev prev = here

here = next

Conc

Rev Loop

here = xs.head prev = null

Page 51: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs.head = prev

1xs

here prev next

Init

while (here ≠ null) do next = here.next here.next = prev prev = here

here = next

Conc

Rev Loop

here = xs.head prev = null

Page 52: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs.head = prev

1xs

here prev next

Init

while (here ≠ null) do next = here.next here.next = prev prev = here

here = next

Conc

Rev Loop

here = xs.head prev = null

Page 53: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

xs.head = prev

1xs

here prev next

Init

while (here ≠ null) do next = here.next here.next = prev prev = here

here = next

Conc

Rev Loop

here = xs.head prev = null

Page 54: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 5 from13/04

Dynamic Array:

• ins(x) // Insert in first empty position

• del() // Removes the last element

Page 55: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Operations Dynamic Array

Page 56: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Operations Dynamic Array

new()

Page 57: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Operations Dynamic Array

new()

ins(1) 1

Page 58: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Operations Dynamic Array

new()

ins(1) 1

ins(2)

Page 59: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Operations Dynamic Array

new()

ins(1) 1

ins(2)

Double the size if full

Page 60: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Operations Dynamic Array

new()

ins(1) 1

ins(2) 1

Double the size if fullCopy

Page 61: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Operations Dynamic Array

new()

ins(1) 1

ins(2) 1 2

Double the size if fullCopy

Page 62: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Operations Dynamic Array

new()

ins(1) 1

ins(2) 1 2

Double the size if fullCopy

del() 1

Page 63: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Operations Dynamic Array

new()

ins(1) 1

ins(2) 1 2

Double the size if fullCopy

del() 1

Resize if half-empty

Page 64: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Operations Dynamic Array

new()

ins(1) 1

ins(2) 1 2

Double the size if fullCopy

del() 1

Resize if half-empty

1

Page 65: Data Structures - cse.chalmers.se · Print a singly linked list in reverse in constant space: Exercise 3.29 Print a singly linked list in reverse in constant space: 1 2 3.printRev

Exercise 5 from13/04

SN : Sequence of N operations

T(SN) = Ω(N2)

For every N exists

such that