Presentation is loading. Please wait.

Presentation is loading. Please wait.

Week 4 - Friday.  What did we talk about last time?  Continued doubly linked list implementation  Linked lists with iterators.

Similar presentations


Presentation on theme: "Week 4 - Friday.  What did we talk about last time?  Continued doubly linked list implementation  Linked lists with iterators."— Presentation transcript:

1 Week 4 - Friday

2  What did we talk about last time?  Continued doubly linked list implementation  Linked lists with iterators

3

4 Bitmap Manipulator

5  You are given a reference to a node in a singly linked list and some data  You need to insert the data into the node in front of the node you are given a reference to  You do not have the head reference, you do not have a reference to the previous node  How do you do the insertion?

6

7  The generic part is really easy once you get the syntax set up  You use T instead of int (or whatever type you designed your linked lists to hold)  The trickier thing is to define an iterator class that can keep track of where you are inside the list  It has to be a non-static inner class!

8 public class LinkedList implements Iterable { private class Node { public T data; public Node next; public Node previous; } private class ListIterator implements Iterator { public Node current; } private Node head = null; private Node tail = null; public int size = 0; … }

9 Create a new iterator that points at the head of the list

10 Whether or not there is something in the current spot in the list

11 Get the current thing in the list

12 Remove the current item from the list (optional)

13

14  Linked lists can be made circular such that the last node points back at the head node  This organization is good for situations in which we want to cycle through all of the nodes in the list repeatedly tail 23 47 58

15  Insert at front (or back)  Θ(1)  Delete at front  Θ(1)  Delete at back costs Θ(n) unless we used doubly linked lists  Search Θ(n)Θ(n)

16  We can design linked lists with multiple pointers in some nodes  We want ½ of the nodes to have 1 pointer, ¼ of the nodes to have 2 pointers, 1/8 of the nodes to have 3 pointers… head 14 5 5 3 3 29 28 41 58 X X X

17  If ordered, search is  Θ(log n)  Go to index is  Θ(log n)  Insert at end  Θ(log n)  Delete  Totally insane, at least Θ(n)  Trees end up being a better alternative

18  We want to make items that are used frequently easy to get at  Several different approaches, mostly based on finding items repeatedly  Move to front: After finding an item, put it in the front  Transpose: After finding an item, move it up by one  Count: Keep the list ordered by how often you get a particular item (requires a counter in each node)  Ordering: Sort the list according to some feature of the data

19

20  Dynamic array  Advantages: pop and top are O(1)  Disadvantages: limited size, making enqueue O(n) in the worst case (still O(1) amortized)  Linked list  Advantages: push, pop, and top are O(1)  Disadvantages: slightly slower than the array version, considerably more memory overhead

21 public class ListStack { private static class Node { public String data; public Node next; } private Node top = null; private int size = 0; public void push(String value) {} public String pop() {} public String peek() {} //instead of top public int size() {} } public class ListStack { private static class Node { public String data; public Node next; } private Node top = null; private int size = 0; public void push(String value) {} public String pop() {} public String peek() {} //instead of top public int size() {} }

22

23

24

25

26  Circular array  Advantages: dequeue and front are O(1)  Disadvantages: limited size, making enqueue O(n) in the worst case (still O(1) amortized)  Linked list  Advantages: enqueue, dequeue, and front are O(1)  Disadvantages: slightly slower than the array version, considerably more memory overhead

27 class ListQueue { private class Node { public String data; public Node next; } private Node head = null; private Node tail = null; private int size = 0; public void enqueue(String value) {} public String dequeue() {} public String front() {} public int size() {} } class ListQueue { private class Node { public String data; public Node next; } private Node head = null; private Node tail = null; private int size = 0; public void enqueue(String value) {} public String dequeue() {} public String front() {} public int size() {} }

28

29

30

31

32

33  Recursion

34  Finish Project 1  Due tonight, September 18 by 11:59pm  Exam 1 is next Friday  My office hours today from 3:30-5pm are canceled due to travel  Anyone want to work for ITS?  For women in CS:  http://www.meetup.com/Ladies-Technically- Speaking-Lancaster/


Download ppt "Week 4 - Friday.  What did we talk about last time?  Continued doubly linked list implementation  Linked lists with iterators."

Similar presentations


Ads by Google