Topic 14 Li k d Li t Linked Lists "All the kids who did great - - PowerPoint PPT Presentation

topic 14 li k d li t linked lists
SMART_READER_LITE
LIVE PREVIEW

Topic 14 Li k d Li t Linked Lists "All the kids who did great - - PowerPoint PPT Presentation

Topic 14 Li k d Li t Linked Lists "All the kids who did great in high school writing g g g pong games in BASIC for their Apple II would get to college, take CompSci 101, a data structures course and when they hit the pointers business


slide-1
SLIDE 1

Topic 14 Li k d Li t Linked Lists

"All the kids who did great in high school writing g g g pong games in BASIC for their Apple II would get to college, take CompSci 101, a data structures course and when they hit the pointers business their course, and when they hit the pointers business their brains would just totally explode, and the next thing you knew, they were majoring in Political Science because law school seemed like a better idea."

  • Joel Spolsky

p y

Thanks to Don Slater of CMU for use of his slides.

CS 307 Fundamentals of Computer Science Linked Lists

1

slide-2
SLIDE 2

Attendance Question 1

8What is output by the following code?

ArrayList<Integer> a1 = new ArrayList<Integer>(); ArrayList<Integer> a2 = new ArrayList<Integer>(); ArrayList<Integer> a2 = new ArrayList<Integer>(); a1.add(12); a2.add(12); System.out.println( a1 == a2 );

  • A. No output due to syntax error
  • B. No output due to runtime error
  • C. false
  • D. true

CS 307 Fundamentals of Computer Science Linked Lists

2

slide-3
SLIDE 3

Dynamic Data Structures

8Dynamic data structures 8Dynamic data structures

– They grow and shrink one element at a time, normally without some of the inefficiencies of normally without some of the inefficiencies of arrays – as opposed to a static container like an array pp y

8Big O of Array Manipulations

– Access the kth element – Add or delete an element in the middle of the array while maintaining relative order – adding element at the end of array? space avail? no space avail? add element at beginning of an array

CS 307 Fundamentals of Computer Science Linked Lists

3

– add element at beginning of an array

slide-4
SLIDE 4

Object References

8Recall that an object reference is a variable that stores the address of an object 8A reference can also be called a pointer 8They are often depicted graphically:

student John Smith 40725 3.57

Linked Lists

4

slide-5
SLIDE 5

References as Links

8Object references can be used to create links between objects 8Suppose a Student class contained a f t th d bj t reference to another Student object

John Smith 40725 3.57 Jane Jones 58821 3.72

Linked Lists

5

slide-6
SLIDE 6

References as Links

8References can be used to create a variety

  • f linked structures, such as a linked list:

studentList

Linked Lists

6

slide-7
SLIDE 7

Linked Lists

8A li ll ti f lf f ti l bj t ll d 8A linear collection of self-referential objects, called nodes, connected by other links

– linear: for every node in the list, there is one and only one node y , y that precedes it (except for possibly the first node, which may have no predecessor,) and there is one and only one node that succeeds it, (except for possibly the last node, which may have no successor) no successor) – self-referential: a node that has the ability to refer to another node of the same type or even to refer to itself node of the same type, or even to refer to itself – node: contains data of any type, including a reference to another node of the same data type, or to nodes of different data types node of the same data type, or to nodes of different data types – Usually a list will have a beginning and an end; the first element in the list is accessed by a reference to that class, and the last

CS 307 Fundamentals of Computer Science Linked Lists

7

y , node in the list will have a reference that is set to null

slide-8
SLIDE 8

Advantages of linked lists

8Li k d li d i h h i k 8Linked lists are dynamic, they can grow or shrink as necessary 8Linked lists can be maintained in sorted order simply by inserting each new element at the proper simply by inserting each new element at the proper point in the list. Existing list elements do not need to be moved to be moved 8Linked lists are non-contiguous; the logical Linked lists are non-contiguous; the logical sequence of items in the structure is decoupled from any physical ordering in memory

CS 307 Fundamentals of Computer Science Linked Lists

8

y p y g y

slide-9
SLIDE 9

Nodes and Lists

8A different way of implementing a list 8Each element of a Linked List is a separate Node object. 8Each Node tracks a single piece of data plus ac

  • de t ac s a s g e p ece o data p us

a reference (pointer) to the next 8Create a new Node very time we add Create a new Node very time we add something to the List 8Remove nodes when item removed from list 8Remove nodes when item removed from list and allow garbage collector to reclaim that memory

CS 307 Fundamentals of Computer Science Linked Lists

9

memory

slide-10
SLIDE 10

A Node Class

public class Node<E> { public class Node<E> { private E myData; private Node myNext; public Node() public Node() { myData = null; myNext = null; } public Node(E data, Node<E> next) { myData = data; myNext = next; } { y ; y ; } public E getData() { return myData; } public Node<E> getNext() { return myNext; } public void setData(Et data) { D t d t } { myData = data; } public void setNext(Node<E> next) { myNext = next; } }

CS 307 Fundamentals of Computer Science Linked Lists

10 }

slide-11
SLIDE 11

One Implementation of a Linked List

8Th N d h th i lid 8The Nodes show on the previous slide are singly linked

d f l t th t d i th – a node refers only to the next node in the structure – it is also possible to have doubly linked nodes it is also possible to have doubly linked nodes. – The node has a reference to the next node in the structure and the previous node in the structure p as well

8How is the end of the list indicated

– myNext = null for last node – a separate dummy node class / object

CS 307 Fundamentals of Computer Science Linked Lists

11

slide-12
SLIDE 12

Interfaces and Standard Java

8Finally, an alternate implementation to an ADT 8Specify a List interface

– Java has this

C ki

8Implement in multiple ways

– ArrayList

Cookie

ArrayList – LinkedList

8Which is better? 8Which is better?

CS 307 Fundamentals of Computer Science Linked Lists

12

slide-13
SLIDE 13

A Linked List Implementation

public class LinkedList<E> implements Ilist<E> public class LinkedList<E> implements Ilist<E> private Node<E> head; private Node<E> tail; private int size; public LinkedList(){ head = null; tail = null; tail = null; size = 0; } } LinkedList<String> list = new LinkedList<String>();

LinkedList myHead iMySize

null ll

CS 307 Fundamentals of Computer Science Linked Lists

13

myTail

null

slide-14
SLIDE 14

Writing Methods

8When trying to code methods for Linked Lists draw pictures!

– If you don't draw pictures of what you are trying to do it is very easy to make mistakes!

CS 307 Fundamentals of Computer Science Linked Lists

14

slide-15
SLIDE 15

add method

8add to the end of list 8special case if empty 8steps on following slides 8public void add(Object obj) public void add(Object obj)

CS 307 Fundamentals of Computer Science Linked Lists

15

slide-16
SLIDE 16

Add Element - List Empty (Before)

head tail size ll ll null null Object item

CS 307 Fundamentals of Computer Science Linked Lists

16

slide-17
SLIDE 17

Add Element - List Empty (After)

head tail size 1 String Node myData myNext null null

CS 307 Fundamentals of Computer Science Linked Lists

17

slide-18
SLIDE 18

Add Element - List Not Empty (Before)

h d il i 1 head tail size Node Node myData myNext null null String String item

CS 307 Fundamentals of Computer Science Linked Lists

18

slide-19
SLIDE 19

Add Element - List Not Empty (After)

h d il i 2 head tail size Node Node Node myData myNext Node myData myNext ll null String String

CS 307 Fundamentals of Computer Science Linked Lists

19

slide-20
SLIDE 20

Code for default add

8public void add(Object obj)

CS 307 Fundamentals of Computer Science Linked Lists

20

slide-21
SLIDE 21

Attendance Question 2

8What is the worst case Big O for adding to the end of an array based list and a linked list? The lists already contains N items. Array based Linked

  • A. O(1)

O(1) B O(N) O(N)

  • B. O(N)

O(N)

  • C. O(logN)

O(1) D O(1) O(N)

  • D. O(1)

O(N)

  • E. O(N)

O(1)

CS 307 Fundamentals of Computer Science Linked Lists

21

slide-22
SLIDE 22

Code for addFront

8add to front of list 8public void addFront(Object obj) 8How does this compare to adding at the front

  • f an array based list?
  • a

a ay based st

CS 307 Fundamentals of Computer Science Linked Lists

22

slide-23
SLIDE 23

Attendance Question 3

8What is the Big O for adding to the front of an array based list and a linked list? The lists already contains N items. Array based Linked

  • A. O(1)

O(1) B O(N) O(1)

  • B. O(N)

O(1)

  • C. O(logN)

O(1) D O(1) O(N)

  • D. O(1)

O(N)

  • E. O(N)

O(N)

CS 307 Fundamentals of Computer Science Linked Lists

23

slide-24
SLIDE 24

Code for Insert

8public void insert(int pos, Object obj) 8Must be careful not to break the chain! 8Where do we need to go? 8Special cases? Special cases?

CS 307 Fundamentals of Computer Science Linked Lists

24

slide-25
SLIDE 25

Attendance Question 4

8What is the Big O for inserting an element into the middle of an array based list and a linked list? The lists contains N items. Array based Linked

  • A. O(N)

O(N) B O(N) O(1)

  • B. O(N)

O(1)

  • C. O(logN)

O(1) D O(l N) O(l N))

  • D. O(logN)

O(logN))

  • E. O(1)

O(N)

CS 307 Fundamentals of Computer Science Linked Lists

25

slide-26
SLIDE 26

Attendance Question 5

8What is the Big O for getting an element based on position from an array based list and a linked list? The lists contain N items. Array based Linked

  • A. O(1)

O(N) B O(N) O(1)

  • B. O(N)

O(1)

  • C. O(logN)

O(1) D O(l N) O(N)

  • D. O(logN)

O(N)

  • E. O(N)

O(N)

CS 307 Fundamentals of Computer Science Linked Lists

26

slide-27
SLIDE 27

Code for get

8public Object get(int pos) 8The downside of Linked Lists

CS 307 Fundamentals of Computer Science Linked Lists

27

slide-28
SLIDE 28

Code for remove

8public Object remove(int pos)

CS 307 Fundamentals of Computer Science Linked Lists

28

slide-29
SLIDE 29

Why Use Linked List

8What operations with a Linked List faster than the version from ArrayList?

CS 307 Fundamentals of Computer Science Linked Lists

29

slide-30
SLIDE 30

Remove Back Method

8public Object removeBack() 8Big O?

CS 307 Fundamentals of Computer Science Linked Lists

30

Big O?

slide-31
SLIDE 31

Iterators for Linked Lists

8What is the Big O of the following code?

LinkedList<Integer> list; list = new LinkedList<Integer>(); list new LinkedList Integer (); // code to fill list with N elements //Big O of following code? for(int i = 0; i < list.size(); i++) System.out.println( list.get(i) );

CS 307 Fundamentals of Computer Science Linked Lists

31

slide-32
SLIDE 32

Attendance Question 6

8What is the Big O of the code on the previous slide?

  • A. O(N)
  • B. O(2N)

O( )

  • C. O(NlogN)

D O(N2)

  • D. O(N2)
  • E. O(N3)

CS 307 Fundamentals of Computer Science Linked Lists

32

slide-33
SLIDE 33

Other Possible Features of Li k d Li t Linked Lists

8Doubly Linked 8Doubly Linked 8Circular 8Dummy Nodes for first and last node in list

public class DLNode<E> { private E myData; p y private DLNode<E> myNext; private DLNode<E> myPrevious; }

CS 307 Fundamentals of Computer Science Linked Lists

33

slide-34
SLIDE 34

Dummy Nodes

8Use of Dummy Nodes for a Doubly Linked List removes most special cases 8Also could make the Double Linked List circular

CS 307 Fundamentals of Computer Science Linked Lists

34

slide-35
SLIDE 35

Doubly Linked List addFront addFront

8public void addFront(Object obj) p ( j j)

CS 307 Fundamentals of Computer Science Linked Lists

35

slide-36
SLIDE 36

Insert for Doubly Linked List

8public void insert(int pos, Object obj)

CS 307 Fundamentals of Computer Science Linked Lists

36