Top Banner
1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1
124

1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

Jan 02, 2016

Download

Documents

Wilfred Simon
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

1/ 124

1

COP 3503 FALL 2012SHAYAN JAVED

LECTURE 18

Programming Fundamentals using Java

Page 2: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

2/ 124

Data Structures

Page 3: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

3/ 124

So far...

Looked at Arrays and ArrayLists as our data structures

Page 4: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

4/ 124

So far...

Looked at Arrays and ArrayLists as our data structures

Very useful, but not always the best options

Page 5: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

5/ 124

So far...

Looked at Arrays and ArrayLists as our data structures

Very useful, but not always the best options

Going to look at some other data structures

Page 6: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

6/ 124

Data Structures

Stack Queue Linked List Trees Graph Hashtable etc.

Page 7: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

7/ 124

Data Structures

Stack Queue Linked List Trees Graph Hashtable etc.

Page 8: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

8/ 124

Stack

Last-In-First-Out (LIFO) Data Structure

Page 9: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

9/ 124

Stack

Last-In-First-Out (LIFO) Data Structure

Basically...a stack of data.

Page 10: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

10/ 124

Stack

Last-In-First-Out (LIFO) Data Structure

Basically...a stack of data.

Used when you want the oldest added data first.

Page 11: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

11/ 124

Stack

Last-In-First-Out (LIFO) Data Structure

Basically...a stack of data.

Used when you want the oldest added data first.

Abstract data type (can store any kind of data).

Page 12: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

12/ 124

Stack

Three Operations:

Page 13: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

13/ 124

Stack

Three Operations:

push(Object): Pushes an object on top of a stack

Page 14: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

14/ 124

Stack

Three Operations:

push(Object): Pushes an object on top of a stack

pop(): Returns the object at the top of the stack and removes it

Page 15: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

15/ 124

Stack

Three Operations:

push(Object): Pushes an object on top of a stack

pop(): Returns the object at the top of the stack and removes it

peek(): Returns the object at the top without removing it

Page 16: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

16/ 124

Stack

Some uses:

Page 17: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

17/ 124

Stack

Some uses:

“Stack Frame” for method calls.

Page 18: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

18/ 124

Stack

Some uses:

“Stack Frame” for method calls.

Used for evaluating arithmetic expressions: (prefix, postfix, infix)

Page 19: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

19/ 124

Stack

Java provides a Stack class (java.util.Stack)

Page 20: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

20/ 124

Stack

Java provides a Stack class (java.util.Stack)

Has all the operations

Page 21: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

21/ 124

Stack

Java provides a Stack class (java.util.Stack)

Has all the operations

But how does it actually store the data? (What’s the “back-end”?)

Page 22: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

22/ 124

Stack

Java provides a Stack class (java.util.Stack)

Has all the operations

But how does it actually store the data? (What’s the “back-end”?)

Uses the java.util.Vector class (similar to ArrayList)

Page 23: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

23/ 124

Queue

A First-In-First-Out (FIFO) data structure.

Page 24: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

24/ 124

Queue

A First-In-First-Out (FIFO) data structure.

Used when you want the oldest added data first.

Page 25: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

25/ 124

Queue

A First-In-First-Out (FIFO) data structure.

Used when you want the oldest added data first.

Often used for scheduling (handle first in line)

Page 26: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

26/ 124

Queue

Three Operations:

enqueue(Object): Adds an object to the queue

dequeue(): Returns the object at the front of the queue and removes it

peek(): Returns the object at the front without removing it

Page 27: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

27/ 124

Queue

Java provides a Queue interface (java.util.Queue)

Page 28: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

28/ 124

Queue

Java provides a Queue interface (java.util.Queue)

Has all the operations enqueue = add dequeue = poll

Page 29: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

29/ 124

Queue

Java provides a Queue interface (java.util.Queue)

Has all the operations enqueue = add dequeue = poll

Interface implemented in classes like LinkedList

Page 30: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

30/ 124

Queue

Java provides a Queue interface (java.util.Queue)

Has all the operations enqueue = add dequeue = poll

Interface implemented in classes like LinkedList

Queue<Integer> queue = new LinkedList<Integer>();

Page 31: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

31/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Page 32: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

32/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

Page 33: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

33/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

But where do they fall short?

Page 34: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

34/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

But where do they fall short? Data retrieval – excellent O(1)

Page 35: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

35/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

But where do they fall short? Data retrieval – excellent O(1) Adding data

Page 36: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

36/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

But where do they fall short? Data retrieval – excellent O(1) Adding data – inefficient O(n) in some cases

Page 37: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

37/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

But where do they fall short? Data retrieval – excellent O(1) Adding data – inefficient O(n) in some cases

Page 38: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

38/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

But where do they fall short? Data retrieval – excellent O(1) Adding data – inefficient O(n) in some cases Fixed size – have to shift/copy to new array

Page 39: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

39/ 124

Arrays and ArrayLists

What if your application requires a lot of adds but not retrievals?

Page 40: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

40/ 124

Arrays and ArrayLists

What if your application requires a lot of adds but not retrievals?

Use Linked Lists

Page 41: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

41/ 124

Linked List

A list – a collection of linked nodes.

Page 42: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

42/ 124

Linked List

A list – a collection of linked nodes.

Dynamic data structure – size is not fixed, and memory is not contiguous (unlike an array)

Page 43: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

43/ 124

Linked List

A list – a collection of linked nodes.

Dynamic data structure – size is not fixed, and memory is not contiguous (unlike an array)

Insertion to the list is very fast – O(1) in most cases

Page 44: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

44/ 124

Linked List

A list – a collection of linked nodes.

Dynamic data structure – size is not fixed, and memory is not contiguous (unlike an array)

Insertion to the list is very fast – O(1) in most cases

Indexing is slow. Random access also not possible

Page 45: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

45/ 124

Linked List

Many variations:

Singly-Linked List (can only traverse forward) Doubly-Linked List (can traverse in reverse too) Circular Linked Lists Multi-Linked Lists etc.

Page 46: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

46/ 124

Node

Basic structure – collection of linked nodes make a linked list.

Page 47: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

47/ 124

Node

Basic structure – collection of linked nodes make a linked list.

Stores some data and a link to the next Node.

Page 48: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

48/ 124

Node

Basic structure – collection of linked nodes make a linked list.

Stores some data and a link to the next Node.

int null

Page 49: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

49/ 124

Node

Basic structure – collection of linked nodes make a linked list.

Stores some data and a link to the next Node.

int int null

Page 50: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

50/ 124

Singly-Linked List (SLL)

Nodes connected to each other

Page 51: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

51/ 124

Singly-Linked List (SLL)

Nodes connected to each other

int int nullint

Page 52: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

52/ 124

Singly-Linked List (SLL)

Nodes connected to each other

SLL only stores links to two nodes:

int int nullint

Page 53: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

53/ 124

Singly-Linked List (SLL)

Nodes connected to each other

SLL only stores links to two nodes: Head node (front)

int int nullint

head

Page 54: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

54/ 124

Singly-Linked List (SLL)

Nodes connected to each other

SLL only stores links to two nodes: Head node (front) Tail node (end)

int int nullint

head tail

Page 55: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

55/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list

Page 56: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

56/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list append(Object): add to the end

Page 57: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

57/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list append(Object): add to the end insert(Object, index): add at a certain index

Page 58: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

58/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list append(Object): add to the end insert(Object, index): add at a certain index remove(index): remove Object at index remove(Object): remove Object

Page 59: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

59/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list append(Object): add to the end insert(Object, index): add at a certain index remove(index): remove Object at index remove(Object): remove Object get(Object): return index of Object get(index): return Object at index

Page 60: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

60/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list append(Object): add to the end insert(Object, index): add at a certain index remove(index): remove Object at index remove(Object): remove Object get(Object): return index of Object get(index): return Object at index size(): return size of the list

Page 61: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

61/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list append(Object): add to the end insert(Object, index): add at a certain index remove(index): remove Object at index remove(Object): remove Object get(Object): return index of Object get(index): return Object at index size(): return size of the list clear(): empty the list

Page 62: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

62/ 124

Singly-Linked List (SLL)

Create an Empty SLL:

Page 63: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

63/ 124

Singly-Linked List (SLL)

Create an Empty SLL:

head tail

null

Page 64: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

64/ 124

Singly-Linked List (SLL)

Create an Empty SLL:

public SLL() {

head = null;

tail = null;

}

head tail

null

Page 65: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

65/ 124

Singly-Linked List (SLL)

append(Object):

Page 66: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

66/ 124

Singly-Linked List (SLL)

append(Object):

Create a Node with that Object

Obj null

Page 67: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

67/ 124

Singly-Linked List (SLL)

append(Object):

Create a Node with that Object

Obj null

head tail

Page 68: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

68/ 124

Singly-Linked List (SLL)

append(Object): append another object

Obj null

head tail

Page 69: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

69/ 124

Singly-Linked List (SLL)

append(Object): append another object

Create a Node with that Object

Obj null

head tail

Obj null

Page 70: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

70/ 124

Singly-Linked List (SLL)

append(Object): append another object

Create a Node with that Object Make tail point to it

Obj

head tail

Obj null

Page 71: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

71/ 124

Singly-Linked List (SLL)

append(Object): append another object

Create a Node with that Object Make tail point to it Update tail Node

Obj

head tail

Obj null

Page 72: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

72/ 124

Singly-Linked List (SLL)

size():

Page 73: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

73/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

Page 74: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

74/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 75: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

75/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 76: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

76/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 77: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

77/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 78: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

78/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 79: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

79/ 124

Singly-Linked List (SLL)

size():

Keep incrementing until you reach “null”.

Obj

head tail

Obj nullObj Obj

temp

Page 80: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

80/ 124

Singly-Linked List (SLL)

get(Object): Returns index of first Node with that object

Page 81: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

81/ 124

Singly-Linked List (SLL)

get(Object): Returns index of first Node with that object

You should know how to traverse

Page 82: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

82/ 124

Singly-Linked List (SLL)

get(Object): Returns index of first Node with that object

You should know how to traverse

Compare object with equals() method

Page 83: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

83/ 124

Singly-Linked List (SLL)

get(Object): Returns index of first Node with that object

You should know how to traverse

Compare object with equals() method Return index if found -1 if not found

Page 84: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

84/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj Obj

Page 85: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

85/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj Obj

Page 86: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

86/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj Obj

Page 87: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

87/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj

Obj

Page 88: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

88/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj

Page 89: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

89/ 124

Singly-Linked List (SLL)

remove(Object):

remove(index) - remove at a certain index remove(Node) - remove a certain Node

Work the same way

Obj

head tail

Obj nullObj

Page 90: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

90/ 124

Singly-Linked List (SLL)

So now we know how to: append, prepend, insert

Page 91: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

91/ 124

Singly-Linked List (SLL)

So now we know how to: append, prepend, insert find the size

Page 92: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

92/ 124

Singly-Linked List (SLL)

So now we know how to: append, prepend, insert find the size find the index of a specific element

Page 93: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

93/ 124

Singly-Linked List (SLL)

So now we know how to: append, prepend, insert find the size find the index of a specific element remove an object/Node

Page 94: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

94/ 124

Singly-Linked List (SLL)

So now we know how to: append, prepend, insert find the size find the index of a specific element remove an object/Node

What about sorting?

Page 95: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

95/ 124

Singly-Linked List (SLL)

Sorting:

Bubble Sort Selection Sort Insertion Sort

Page 96: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

96/ 124

Singly-Linked List (SLL)

Sorting:

Bubble Sort Selection Sort Insertion Sort

How many of these can you implement for Linked Lists?

Page 97: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

97/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Page 98: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

98/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj nullObj Obj

Page 99: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

99/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj nullObj Obj

Page 100: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

100/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj null

Obj

Obj

Page 101: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

101/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj null

Obj

Obj

Page 102: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

102/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj null

Obj

Obj

Page 103: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

103/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj nullObjObj

Page 104: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

104/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

How many nodes were changed?

Obj

head tail

Obj nullObjObj

Page 105: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

105/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

How many nodes were changed? 3

Obj

head tail

Obj nullObjObj

Page 106: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

106/ 124

Singly-Linked List (SLL)

Swap:

Obj

head tail

Obj nullObj Obj Obj

Page 107: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

107/ 124

Singly-Linked List (SLL)

Swap:

Obj

head tail

Obj nullObj Obj Obj

Page 108: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

108/ 124

Singly-Linked List (SLL)

Swap:

Also have to modify the ones before them

Obj

head tail

Obj nullObj Obj Obj

Page 109: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

109/ 124

Singly-Linked List (SLL)

Swap:

Also have to modify the ones before them

Obj

head tail

Obj nullObj Obj Obj

node1 node2

Page 110: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

110/ 124

Singly-Linked List (SLL)

Swap:

Also have to modify the ones before them

Obj

head tail

Obj nullObj Obj Obj

node1 node2

node1P node2P

Page 111: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

111/ 124

Singly-Linked List (SLL)

Swap: RESULT:

Also have to modify the ones before them We have now seen two cases

Obj

head tail

Obj nullObj Obj Obj

node2 node1

node1P node2P

Page 112: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

112/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1;

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 113: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

113/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1;

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 114: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

114/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1;

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 115: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

115/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1;

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 116: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

116/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1;

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 117: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

117/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1;

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 118: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

118/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1; // the node before node2

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 119: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

119/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1; // the node before node2

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 120: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

120/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1; // the node before node2

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 121: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

121/ 124

Singly-Linked List (SLL)

Sorting: So swap is not straightforward

Page 122: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

122/ 124

Singly-Linked List (SLL)

Sorting: So swap is not straightforward

Once you figure out swap, you can implement Bubble and Selection Sort

Page 123: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

123/ 124

Singly-Linked List (SLL)

Sorting: So swap is not straightforward

Once you figure out swap, you can implement Bubble and Selection Sort

Try to implement the Sorting Methods for Linked Lists

Page 124: 1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1.

124/ 124

Summary

Arrays/ArrayLists: useful data structures but not always optimal. Retrieval very quick, insertion can be slow

Stacks/Queues: Abstract data types useful for LIFO/FIFO storage. Implemented using arrays/SLLs

Linked Lists: Alternative to arrays – insertion is fast but retrieval is slow.