Elementary Data Structures Stacks & Queues Lists, Vectors, - - PowerPoint PPT Presentation

elementary data structures
SMART_READER_LITE
LIVE PREVIEW

Elementary Data Structures Stacks & Queues Lists, Vectors, - - PowerPoint PPT Presentation

Elementary Data Structures Stacks & Queues Lists, Vectors, Sequences Amortized Analysis Trees push pop Stack ADT top of stack Container that stores arbitrary objects Insertions and deletions follow last-in first-out (LIFO) scheme


slide-1
SLIDE 1

Elementary Data Structures

Stacks & Queues Lists, Vectors, Sequences Amortized Analysis Trees

slide-2
SLIDE 2

Stack ADT

  • Container that stores arbitrary objects
  • Insertions and deletions follow last-in first-out (LIFO) scheme
  • Main operations

– push(object): insert element – object pop(): remove and returns last element

  • Auxiliary operations

– object top(): returns last element without removing it – integer size(): returns number of elements stored – boolean isEmpty(): returns whether no elements are stored

Elementary Data Structures 2

push pop top of stack

slide-3
SLIDE 3

Applications of Stacks

  • Direct

– Page visited history in a web browser – Undo sequence in a text editor – Chain of method calls in C++ runtime environment

  • Indirect

– Auxiliary data structure for algorithms – Component of other data structures

Elementary Data Structures 3

slide-4
SLIDE 4

Array-based Stack

  • Add elements from left to right in an array S of capacity N
  • A variable t keeps track of the index of the top element
  • Size is t+1

Elementary Data Structures 4

S 1 2 …

Algorithm pop(): if isEmpty() then throw EmptyStackException else t ¬ t - 1 return S[t + 1] Algorithm push(o): if t = N-1 then throw FullStackException else t ¬ t + 1 S[t] ¬ o

O(1) O(1)

t

slide-5
SLIDE 5

Extendable Array-based Stack

  • In a push operation, when the array is full, we can replace the

array with a larger one instead of throwing an exception – Values in old array must be copied over to the new array

  • How large should the new array be?

– incremental strategy: increase the size by a constant c – doubling strategy: double the size

Elementary Data Structures 5

Algorithm push(o) if t = N-1 then A ¬ new array of size N* for i ¬ 0 to t do A[i] ¬ S[i] S ¬ A t ¬ t + 1 S[t] ¬ o

N* = ?

slide-6
SLIDE 6

Comparing the Strategies via Amortization

  • Amortization: analysis tool to understand running times of

algorithms that have steps with widely varying performance

  • We compare incremental vs. doubling strategy by analyzing the total

time T(n) needed to perform a series of n push operations

  • We call amortized time of a push operation the average time taken

by a push over a series of operations – i.e., T(n) / n

  • Assume we start with an empty stack represented by an empty array

Elementary Data Structures 6

slide-7
SLIDE 7

Incremental Strategy

  • We replace the array k = n/c times
  • Total time T(n) of a series of n push operations is proportional to:

n + c + 2c + 3c + 4c + … + kc = n + c(1 + 2 + 3 + … + k) = n + ck(k + 1)/2

  • Since c is constant, T(n) is O(n + k2), which is O(n2)
  • The amortized time of a push operation is O(n)

Elementary Data Structures 7

slide-8
SLIDE 8

Doubling Strategy

  • We replace the array k = log2n times
  • Total time T(n) of a series of n push operations is proportional to:

n + 1 + 2 + 4 + 8 + … + 2k = n + 2k+1 – 1 = n + 2logn + 1 – 1 = n + 2logn 21 – 1 = n + 2n - 1 = 3n – 1

  • T(n) is O(n)
  • The amortized time of a push operation is O(1)

Elementary Data Structures 8

Recall the summation of this geometric series:

slide-9
SLIDE 9

Accounting Method Analysis

  • The accounting method determines amortized running time using a

scheme of credits and debits

  • View computer as a coin-operated devices that needs $1 (cyber-

dollar) for each primitive operation – Set up an amortization scheme for charging operations – Must always have enough money to pay for actual cost of

  • peration

– Total cost of the series of operations is no more than the total amount charged

  • (amortized time) £ (total $ charged) / (# operations)

Elementary Data Structures 9

slide-10
SLIDE 10

Accounting Method Analysis: Doubling Strategy

  • How much to charge for a push operation?

– Charge $1? – Charge $2? – Charge $3 for a push: use $1 to pay for push, save $2 to pay for copying all old elements into new array.

  • Each push runs in O(1) amortized time; n pushes run in O(n)

time.

Elementary Data Structures 10

No, not enough $$ to copy old elements No, not enough $$ to copy old elements 0 1 2 3 0 1 2 3 4 5 6 7

slide-11
SLIDE 11

Queue ADT

  • Container that stores arbitrary objects
  • Insertions and deletions follow first-in first-out (FIFO) scheme
  • Main operations

– enqueue(object): insert element at end – object dequeue(): remove and returns front element

  • Auxiliary operations

– object front(): returns front element without removing it – integer size(): returns number of elements stored – boolean isEmpty(): returns whether no elements are stored

Elementary Data Structures 11

dequeue enqueue

end front

slide-12
SLIDE 12

Applications of Queues

  • Direct

– Waiting lines – Access to shared resources – Multiprogramming

  • Indirect

– Auxiliary data structure for algorithms – Component of other data structures

Elementary Data Structures 12

slide-13
SLIDE 13

Singly Linked List

  • A data structure consisting of a sequence of nodes
  • Each node stores an element and a link to the next node

Elementary Data Structures 13

next elem head A B C D

Æ

tail

slide-14
SLIDE 14

Queue with a Singly Linked List

  • Singly Linked List implementation

– front is stored at the first node – end is stored at the last node

  • Space used is O(n) and each operation takes O(1) time

Elementary Data Structures 14

A B C D

Æ

enqueue dequeue front end

slide-15
SLIDE 15

List ADT

  • A collection of objects ordered with respect to their position

(the node storing that element) – each object knows who comes before and after it

  • Allows for insert/remove in the “middle”

Elementary Data Structures 15

  • Query operations

– isFirst(p), isLast(p)

  • Accessor operations

– first(), last() – before(p), after(p)

  • Update operations

– replaceElement(p, e) – swapElements(p, q) – insertBefore(p, e), insertAfter(p, e) – insertFirst(e), insertLast(e) – remove(p)

slide-16
SLIDE 16

Doubly Linked List

  • Provides a natural implementation of List ADT
  • Nodes implement position and store

– element – link to previous and next node

  • Special head and tail nodes

Elementary Data Structures 16

next elem prev

tail head

A B C D

slide-17
SLIDE 17

Insertion: insertAfter(p, X)

Elementary Data Structures

A B C p A B C p q A B X C p q

17

X

slide-18
SLIDE 18

Deletion: remove(p)

Elementary Data Structures

  • We visualize remove(p), where p = last()

A B C D p A B C D p A B C

18

slide-19
SLIDE 19

Vector ADT

  • A linear sequence that supports access to its elements by their

rank (number of elements preceding it)

  • Main operations:

– size() – isEmpty() – elemAtRank(r) – replaceAtRank(r, e) – insertAtRank(r, e) – removeAtRank(r)

Elementary Data Structures 19

slide-20
SLIDE 20

Array-based Vector

  • Use an array V of size N
  • A variable n keeps track of the size of the vector (number of

elements stored)

  • elemAtRank(r) is implemented in O(1) time by returning V[r]

Elementary Data Structures

V 1 2 n r

20

slide-21
SLIDE 21

Insertion: insertAtRank(r, o)

  • Need to make room for the new element by shifting forward the

n - r elements V[r], …, V[n - 1]

  • In the worst case (r = 0), this takes O(n) time
  • We could use an extendable array when more space is required

Elementary Data Structures

V 1 2 n r V 1 2 n

  • r

1 2 n r V

21

slide-22
SLIDE 22

Deletion: removeAtRank(r)

  • Need to fill the hole left by the removed element by shifting

backward the n - r - 1 elements V[r + 1], …, V[n - 1]

  • In the worst case (r = 0), this takes O(n) time

Elementary Data Structures

V 1 2 n r V 1 2 n

  • r

V 1 2 n r

22

slide-23
SLIDE 23

Sequence

  • A generalized ADT that includes all methods from vector and list

ADTs

  • Provides access to its elements from both rank and position
  • Can be implemented with an array or doubly linked list

Elementary Data Structures

Operation Array List size, isEmpty O(1) O(1) atRank, rankOf, elemAtRank O(1) O(n) first, last, before, after O(1) O(1) replaceElement, swapElements O(1) O(1) replaceAtRank O(1) O(n) insertAtRank, removeAtRank O(n) O(n) insertFirst, insertLast O(1) O(1) insertAfter, insertBefore O(n) O(1) remove (at given position) O(n) O(1)

23

slide-24
SLIDE 24

Tree

  • Stores elements hierarchically
  • Each node has a parent-child relation
  • Direct applications:

– Organizational charts – File systems – Programming environments

Elementary Data Structures 24

Computers”R”Us Sales R&D Manufacturing Laptops Desktops US International Europe Asia Canada

root external nodes (leaves) internal nodes

slide-25
SLIDE 25

Tree ADT

  • Accessor methods:

– position root() – position parent(p) – PositionList children(p)

  • Query methods:

– boolean isInternal(p) – boolean isExternal(p) – boolean isRoot(p)

Elementary Data Structures 25

  • Generic methods:

– integer size() – boolean isEmpty() – ObjectList elements() – PositionList positions() – swapElements(p, q) – object replaceElement(p, o)

The positions in a tree are its nodes.

slide-26
SLIDE 26

Tree Traversal

A traversal visits the nodes of a tree in a systematic manner.

  • preorder: a node is visited before its descendants

preOrder(A) visits ABEFCGHID

  • postorder: a node is visited after its descendants

postOrder(A) visits EFBGHICDA

Elementary Data Structures 26

A B C D E F G H I Algorithm preOrder(v) visit(v) for each child w of v preOrder (w) Algorithm postOrder(v) for each child w of v postOrder (w) visit(v)

O(n) O(n)

slide-27
SLIDE 27

(Full) Binary Trees

  • A binary tree is a tree with the following properties:

– Each internal node has two children – The children of a node are an ordered pair (left child, right child)

  • Recursive definition: a binary tree is

– A single node is a binary tree – Two binary trees connected by a root is a binary tree

  • Applications:

– arithmetic expressions – decision processes – searching

Elementary Data Structures 27

A B C F G D E H I

slide-28
SLIDE 28

Arithmetic Expression Tree

  • Binary tree associated with an arithmetic expression

– internal nodes: operators – external nodes: operands

  • Ex: arithmetic expression tree for expression (2 ´ (a - 1) + (3 ´ b))

Elementary Data Structures 28

+ ´ ´

  • 2

a 1 3 b

slide-29
SLIDE 29

Decision Tree

  • Binary tree associated with a decision process

– internal nodes: questions with yes/no answer – external nodes: decisions

  • Ex: dining decision

Elementary Data Structures 29

Want a fast meal? How about coffee? On expense account? Tree City Pizza Fire Taco Tantos Ray’s

Yes No Yes No Yes No

slide-30
SLIDE 30

Properties of Binary Trees

n number of nodes e number of external nodes i number of internal nodes h height (max depth)

Elementary Data Structures 30

Properties:

  • e = i + 1
  • n = 2e - 1
  • h £ i
  • h £ (n - 1)/2
  • e £ 2h
  • h ³ log2 e
  • h ³ log2 (n + 1) - 1
slide-31
SLIDE 31

Inorder Traversal of a Binary Tree

  • inorder traversal: visit a node after its left subtree and before

its right subtree

Elementary Data Structures 31

A B C F G D E H I

Algorithm inOrder(T, v) if T.isInternal (v) inOrder (T.leftChild (v)) visit(v) if T.isInternal (v) inOrder (T.rightChild (v))

Ex: DBHEIAFCG

O(n)

slide-32
SLIDE 32

Printing Arithmetic Expressions

  • Specialization of an inorder traversal

– print operand/operator when visiting node – print “(“ before visiting left – print “)” after visiting right

Elementary Data Structures 32

Algorithm printExpression(T, v) if T.isInternal (v) print(“(‘’) inOrder (T.leftChild (v)) print(v.element ()) if T.isInternal (v) inOrder (T.rightChild (v)) print (“)’’) + ´ ´

  • 2

a 1 3 b

((2 ´ (a - 1)) + (3 ´ b))

O(n)

slide-33
SLIDE 33

Euler Tour Traversal

  • Generic traversal of a binary tree
  • Includes preorder, postorder, and inorder traversals as special cases
  • Walk around the tree and visit each node three times:

– on the left (preorder) + ´ 2 – 5 1 ´ 3 2 – from below (inorder) 2 ´ 5 – 1 + 3 ´ 2 – on the right (postorder) 2 5 1 – ´ 3 2 ´ +

Elementary Data Structures 33

+ ´

  • 2

5 1 3 2 L B R ´

slide-34
SLIDE 34

Linked Data Structure for Representing Trees

A node stores:

  • element
  • parent node
  • sequence of children nodes

Elementary Data Structures 34

Æ

B

Æ Æ

A D F

Æ

C

Æ

E

B D A C E F

slide-35
SLIDE 35

Linked Data Structure for Binary Trees

A node stores:

  • element
  • parent node
  • left node
  • right node

Elementary Data Structures 35

Æ Æ Æ Æ Æ Æ B A D C E Æ

B D A C E

slide-36
SLIDE 36

Array-Based Representation of Binary Trees

Nodes are stored in an array

  • rank(root) = 1
  • If rank(node) = i, then

rank(leftChild) = 2*i rank(rightChild) = 2*i + 1

Elementary Data Structures 36

B D A C E 1 2 3 6 7 E A B C D rank: 1 2 3 4 5 6 7 Ex: ‘E’ is right child of D rank(E) = 2 * rank(D) + 1 = 2 * 3 + 1 = 7 Ex: ‘A’ is left child of B rank(A) = 2 * rank(B) = 2 * 1 = 1