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

Upload: wilfred-simon

Post on 02-Jan-2016

216 views

Category:

Documents


1 download

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.