cs 307 fundamentals of computer science 1 linked lists many slides taken from mike scott, ut austin
Post on 20-Dec-2015
220 views
TRANSCRIPT
CS 307 Fundamentals of Computer Science
1
Linked Lists
many slides taken from Mike Scott, UT Austin
CS 307 Fundamentals of Computer Science
2
Recursive Data Structures Linked Lists are dynamic data structures
– They grow and shrink one element at a time, normally without some of the inefficiencies of arrays
Big 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
If accesses are all at beginning or end of list, a linked structure offers improvements
Linked Lists could be used as the underlying storage container for higher level ADTs (stack, queue)
CS 307 Fundamentals of Computer Science
3
Nodes and Lists A different way of implementing a list Each element of a Linked List is a separate
Node object. Each Node tracks a single piece of data plus
a reference (pointer) to the next Create a new Node every time we add
something to the List Remove nodes when item removed from list
and allow garbage collector to reclaim that memory
CS 307 Fundamentals of Computer Science
4
Elements of Linked Listspublic class Node{ private Object myData;
private Node myNext;
public Node(){ myData = null; myNext = null; }
public Node(Object data, Node next){ myData = data; myNext = next; }
public Object getData(){ return myData; }
public Node getNext(){ return myNext; }
public void setData(Object data){ myData = data; }
public void setNext(Node next){ myNext = next; }
}
CS 307 Fundamentals of Computer Science
5
One Implementation of a Linked List The Nodes shown on the previous slide are
singly linked– a node refers only to the next node in the
structure– 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 as well
How is the end of the list indicated– myNext = null for last node– a separate dummy node class / object
CS 307 Fundamentals of Computer Science
6
A Simple List Interfacepublic interface IList{
void add(Object item);
void add(Object item, int pos);
Object set(Object item, int pos);
void add(List other);
Object get(int pos);
Object remove(int pos);
int size();}
CS 307 Fundamentals of Computer Science
7
A Linked List Implementationpublic class LinkedList implements Ilist{ private Node myHead;
private Node myTail;private int iMySize;
public LinkedList(){ myHead = null;
myTail = null;iMySize = 0;
}}LinkedList list = new LinkedList();
LinkedList
myHead iMySize
myTail
null
null
0
CS 307 Fundamentals of Computer Science
8
Add Element - List Empty (Before)
myHead myTail iMySize
null null 0
Object
item
CS 307 Fundamentals of Computer Science
9
Add Element - List Empty (After)
myHead myTail iMySize
1
ObjectNode
myData myNext
null
CS 307 Fundamentals of Computer Science
10
Add Element - List Not Empty (Before)
1
Object
Node
myData myNext
null
myHead myTail iMySize
Objectitem
CS 307 Fundamentals of Computer Science
11
Add Element - List Not Empty (After)
2
Object
Node
myData myNext
myHead myTail iMySize
Object
Node
myData myNext
null
CS 307 Fundamentals of Computer Science
12
Code for default add public void add(Object item)
CS 307 Fundamentals of Computer Science
13
Code for arbitrary add public void add(Object item, int pos)
CS 307 Fundamentals of Computer Science
14
Code for get public Object get(int pos)
CS 307 Fundamentals of Computer Science
15
Code for remove public Object remove(int pos)
CS 307 Fundamentals of Computer Science
16
Why Linked List Are any operations with a Linked List faster
than the version from ArrayList?
What about this: public void addFront(Object item)
Big O? Array version Big O? Fast performance for removeFront as well?
CS 307 Fundamentals of Computer Science
17
Remove Back Method public Object removeBack()
Big O?
CS 307 Fundamentals of Computer Science
18
Other Possible Features of Linked Lists
Doubly Linked
Circular Dummy Nodes for first and last node in list
public class DLNode{ private Object myData;
private DLNode myNext;private DLNode myPrevious;
}
CS 307 Fundamentals of Computer Science
19
Default add for Doubly Linked List public void add(Object item)
CS 307 Fundamentals of Computer Science
20
Code for arbitrary add - Doubly Linked List
public void remove(Object item, int pos)
CS 307 Fundamentals of Computer Science
21
Code for removeDoubly Linked List
public Object remove(int pos)