Presentation is loading. Please wait.

Presentation is loading. Please wait.

Week 4 - Wednesday.  What did we talk about last time?  Started linked lists.

Similar presentations


Presentation on theme: "Week 4 - Wednesday.  What did we talk about last time?  Started linked lists."— Presentation transcript:

1 Week 4 - Wednesday

2  What did we talk about last time?  Started linked lists

3

4 Bitmap Manipulator

5  You are given a singly linked list  It may have a loop in it, that is, a node that points back to an earlier node in the list  If you try to visit every node in the list, you’ll be in an infinite loop  How can you see if there is a loop in a linked list?

6

7  Node consists of data, a next pointer, and a previous pointer  Advantages: bi-directional movement  Disadvantages: slower, 4 pointers must change for every insert/delete X head 23 47 58 X tail

8  Let’s try a simple definition for a linked list: public class LinkedList { private static class Node { public int data; public Node next; public Node previous; } private Node head = null; private Node tail = null; public int size = 0; … }

9

10

11

12 Assuming that the list has been kept in order

13

14  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!

15 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; … }

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

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

18 Get the current thing in the list

19 Remove the current item from the list (optional)

20

21  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

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

23  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

24  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

25  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

26

27

28  Special kinds of linked lists  Circular lists  Skip lists  Self-organizing lists  Stack implementation with linked lists  Queue implementation with linked lists

29  Keep reading Chapter 3  Keep working on Project 1  Due this Friday, September 18 by 11:59pm  My office hours this Friday from 3:30-5pm are canceled due to travel  CS Club tonight at 6pm  Anyone want to work for ITS?  For women in CS:  http://www.meetup.com/Ladies-Technically- Speaking-Lancaster/


Download ppt "Week 4 - Wednesday.  What did we talk about last time?  Started linked lists."

Similar presentations


Ads by Google