IAT 265 Linked Lists, Binary Search Trees July 2, 2015 IAT 265 1 Data Structures With a collection of data, we often want to do many things – Store and organize data – Go through the list of data and do X per item – Add new data – Delete unwanted data – Search for data of some value • “Give me Smith’s phone number” July 2, 2015 IAT 265 2 Arrays 0 1 2 3 Store data 4 arr[3] = 33 Add arr[last] = newNumber ; last++ ; July 2, 2015 6 Delete i for( j = i+1 ; j < last ; j++ ) arr[j-1] = arr[j] ; last -- ; Iterate (go thru): for( i = 0 ; i < 10 ; i++) sum = sum + arr[i] ; 5 IAT 265 Search for 42 for( i = 0 ; i < last ; i++ ) if( arr[i] == 42 ) SUCCESS ; 3 First Pointer Linked List 0 P 1 P 3 2 P 4 P P A chain of nodes, where each node links to the next Node Has: – Value – Pointer to Next Node Inserting a new item is faster than array – move pointers around Deleting is also faster than array Searching takes time – Must go link by link from Node to Node July 2, 2015 IAT 265 4 First Pointer Linked List class Node { int value ; Node next ; } Node n, first ; Store data Iterate: 0 P 1 July 2, 2015 3 2 Add Delete n1 Search 42 IAT 265 P 4 P P n.value = 33 n = first ; while( n!= NULL ) { sum += n.value ; n = n.next; } P n = new Node( 12 ); n.next = first ; first = n ; n1 = n.next ; n.next = n1.next ; n = first ; while( n!= NULL ) { if( n.value == 42 ) SUCCESS ; n = n.next ; } 5 Runtime Often, we care about the time that computation takes It’s ok if unimportant things run slow Important stuff needs to go fast – Stuff that gets run all the time – “The Inner Loop” is a slang term I use July 2, 2015 IAT 265 6 What’s Important YOUR time is important Runtime != Creation Time If any old algorithm will work, – AND you’re only going to do it once or twice – Use it! If you’re going to run it millions of times – Think about the algorithm! July 2, 2015 IAT 265 7 Trees A Tree is a node-link structure It is built to enable fast searching – What – Store – Go Thru – Add – Delete – Search July 2, 2015 Write Like linked list More complex More complex More complex A little complex IAT 265 Runtime As fast As fast A little slower A little slower Much faster 8 Binary Search Tree July 2, 2015 IAT 265 9 Binary Search Tree Each Root Pointer LP 3 RP Node has two links LP 5 RP – left and right child – Top node is root – Node without children is leaf Binary meaning two children Search tree because of the node arrangement July 2, 2015 IAT 265 10 Binary Search Tree Root Pointer LP 3 RP LP 5 RP LP 1 RP LP 0 RP July 2, 2015 LP 2 RP LP 4 RP IAT 265 LP 6 RP 11 Binary Search Tree For Any node n – To the left • All child values are Less Than n – To the right • All child values are Greater Than n This July 2, 2015 is a recursive definition!!! IAT 265 12 Binary Search Tree July 2, 2015 IAT 265 13 Nodes Typically, each node has 3 or 4 parts: – The key (names in pictures) – The payload that goes with the key (not shown) – The left child pointer (possibly null) – The right child pointer (possibly null) July 2, 2015 IAT 265 14 Binary Search Tree Search class BNode { int key ; BNode left, right ; } BNode root, cursor ; cursor = root ; while( cursor != null ) // search for SEARCH { if( SEARCH == cursor.key ) SUCCESS ; if( SEARCH > cursor.key ) cursor = cursor.right ; else cursor = cursor.left ; } July 2, 2015 IAT 265 15 Delete July 2, 2015 IAT 265 16 Iterate (In Order) public void inOrder (BNode cursor) { if (cursor == null) return; inOrder(cursor.left ); System.out.println(cursor.key ); inOrder(cursor.right ); } July 2, 2015 IAT 265 17 Things aren’t perfect Unbalanced searches trees cause slower – Balancing algorithms manage that Inserting items in order can cause this problem July 2, 2015 IAT 265 18 Trees in Java Use the TreeSet class to get this functionality – You don’t have to build the structure yourself – Stores Objects TreeSet t1 = new TreeSet(); t1.add( “aaa” ); Iterator it1 = t1.iterator(); while( it1.hasNext() ) { Object o1 =it1.next(); System.out.println( o1 ); } July 2, 2015 IAT 265 19