Transcript
Page 1: COP 3503 FALL 2012 Shayan Javed Lecture  18

1/ 124

1

COP 3503 FALL 2012SHAYAN JAVED

LECTURE 18

Programming Fundamentals using Java

Page 2: COP 3503 FALL 2012 Shayan Javed Lecture  18

2/ 124

Data Structures

Page 3: COP 3503 FALL 2012 Shayan Javed Lecture  18

3/ 124

So far...

Looked at Arrays and ArrayLists as our data structures

Page 4: COP 3503 FALL 2012 Shayan Javed Lecture  18

4/ 124

So far...

Looked at Arrays and ArrayLists as our data structures

Very useful, but not always the best options

Page 5: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

6/ 124

Data Structures

Stack Queue Linked List Trees Graph Hashtable etc.

Page 7: COP 3503 FALL 2012 Shayan Javed Lecture  18

7/ 124

Data Structures

Stack Queue Linked List Trees Graph Hashtable etc.

Page 8: COP 3503 FALL 2012 Shayan Javed Lecture  18

8/ 124

Stack

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

Page 9: COP 3503 FALL 2012 Shayan Javed Lecture  18

9/ 124

Stack

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

Basically...a stack of data.

Page 10: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

12/ 124

Stack

Three Operations:

Page 13: COP 3503 FALL 2012 Shayan Javed Lecture  18

13/ 124

Stack

Three Operations:

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

Page 14: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

16/ 124

Stack

Some uses:

Page 17: COP 3503 FALL 2012 Shayan Javed Lecture  18

17/ 124

Stack

Some uses:

“Stack Frame” for method calls.

Page 18: COP 3503 FALL 2012 Shayan Javed Lecture  18

18/ 124

Stack

Some uses:

“Stack Frame” for method calls.

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

Page 19: COP 3503 FALL 2012 Shayan Javed Lecture  18

19/ 124

Stack

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

Page 20: COP 3503 FALL 2012 Shayan Javed Lecture  18

20/ 124

Stack

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

Has all the operations

Page 21: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

23/ 124

Queue

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

Page 24: COP 3503 FALL 2012 Shayan Javed Lecture  18

24/ 124

Queue

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

Used when you want the oldest added data first.

Page 25: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

27/ 124

Queue

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

Page 28: COP 3503 FALL 2012 Shayan Javed Lecture  18

28/ 124

Queue

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

Has all the operations enqueue = add dequeue = poll

Page 29: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

31/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Page 32: COP 3503 FALL 2012 Shayan Javed Lecture  18

32/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

Page 33: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

39/ 124

Arrays and ArrayLists

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

Page 40: COP 3503 FALL 2012 Shayan Javed Lecture  18

40/ 124

Arrays and ArrayLists

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

Use Linked Lists

Page 41: COP 3503 FALL 2012 Shayan Javed Lecture  18

41/ 124

Linked List

A list – a collection of linked nodes.

Page 42: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

46/ 124

Node

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

Page 47: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

50/ 124

Singly-Linked List (SLL)

Nodes connected to each other

Page 51: COP 3503 FALL 2012 Shayan Javed Lecture  18

51/ 124

Singly-Linked List (SLL)

Nodes connected to each other

int int nullint

Page 52: COP 3503 FALL 2012 Shayan Javed Lecture  18

52/ 124

Singly-Linked List (SLL)

Nodes connected to each other

SLL only stores links to two nodes:

int int nullint

Page 53: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

55/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list

Page 56: COP 3503 FALL 2012 Shayan Javed Lecture  18

56/ 124

Singly-Linked List (SLL)

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

Page 57: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

62/ 124

Singly-Linked List (SLL)

Create an Empty SLL:

Page 63: COP 3503 FALL 2012 Shayan Javed Lecture  18

63/ 124

Singly-Linked List (SLL)

Create an Empty SLL:

head tail

null

Page 64: COP 3503 FALL 2012 Shayan Javed Lecture  18

64/ 124

Singly-Linked List (SLL)

Create an Empty SLL:

public SLL() {

head = null;

tail = null;

}

head tail

null

Page 65: COP 3503 FALL 2012 Shayan Javed Lecture  18

65/ 124

Singly-Linked List (SLL)

append(Object):

Page 66: COP 3503 FALL 2012 Shayan Javed Lecture  18

66/ 124

Singly-Linked List (SLL)

append(Object):

Create a Node with that Object

Obj null

Page 67: COP 3503 FALL 2012 Shayan Javed Lecture  18

67/ 124

Singly-Linked List (SLL)

append(Object):

Create a Node with that Object

Obj null

head tail

Page 68: COP 3503 FALL 2012 Shayan Javed Lecture  18

68/ 124

Singly-Linked List (SLL)

append(Object): append another object

Obj null

head tail

Page 69: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

72/ 124

Singly-Linked List (SLL)

size():

Page 73: COP 3503 FALL 2012 Shayan Javed Lecture  18

73/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

Page 74: COP 3503 FALL 2012 Shayan Javed Lecture  18

74/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 75: COP 3503 FALL 2012 Shayan Javed Lecture  18

75/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 76: COP 3503 FALL 2012 Shayan Javed Lecture  18

76/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 77: COP 3503 FALL 2012 Shayan Javed Lecture  18

77/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 78: COP 3503 FALL 2012 Shayan Javed Lecture  18

78/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 79: COP 3503 FALL 2012 Shayan Javed Lecture  18

79/ 124

Singly-Linked List (SLL)

size():

Keep incrementing until you reach “null”.

Obj

head tail

Obj nullObj Obj

temp

Page 80: COP 3503 FALL 2012 Shayan Javed Lecture  18

80/ 124

Singly-Linked List (SLL)

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

Page 81: COP 3503 FALL 2012 Shayan Javed Lecture  18

81/ 124

Singly-Linked List (SLL)

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

You should know how to traverse

Page 82: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

84/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj Obj

Page 85: COP 3503 FALL 2012 Shayan Javed Lecture  18

85/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj Obj

Page 86: COP 3503 FALL 2012 Shayan Javed Lecture  18

86/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj Obj

Page 87: COP 3503 FALL 2012 Shayan Javed Lecture  18

87/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj

Obj

Page 88: COP 3503 FALL 2012 Shayan Javed Lecture  18

88/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj

Page 89: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

90/ 124

Singly-Linked List (SLL)

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

Page 91: COP 3503 FALL 2012 Shayan Javed Lecture  18

91/ 124

Singly-Linked List (SLL)

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

Page 92: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

95/ 124

Singly-Linked List (SLL)

Sorting:

Bubble Sort Selection Sort Insertion Sort

Page 96: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

97/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Page 98: COP 3503 FALL 2012 Shayan Javed Lecture  18

98/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj nullObj Obj

Page 99: COP 3503 FALL 2012 Shayan Javed Lecture  18

99/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj nullObj Obj

Page 100: COP 3503 FALL 2012 Shayan Javed Lecture  18

100/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj null

Obj

Obj

Page 101: COP 3503 FALL 2012 Shayan Javed Lecture  18

101/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj null

Obj

Obj

Page 102: COP 3503 FALL 2012 Shayan Javed Lecture  18

102/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj null

Obj

Obj

Page 103: COP 3503 FALL 2012 Shayan Javed Lecture  18

103/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj nullObjObj

Page 104: COP 3503 FALL 2012 Shayan Javed Lecture  18

104/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

How many nodes were changed?

Obj

head tail

Obj nullObjObj

Page 105: COP 3503 FALL 2012 Shayan Javed Lecture  18

105/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

How many nodes were changed? 3

Obj

head tail

Obj nullObjObj

Page 106: COP 3503 FALL 2012 Shayan Javed Lecture  18

106/ 124

Singly-Linked List (SLL)

Swap:

Obj

head tail

Obj nullObj Obj Obj

Page 107: COP 3503 FALL 2012 Shayan Javed Lecture  18

107/ 124

Singly-Linked List (SLL)

Swap:

Obj

head tail

Obj nullObj Obj Obj

Page 108: COP 3503 FALL 2012 Shayan Javed Lecture  18

108/ 124

Singly-Linked List (SLL)

Swap:

Also have to modify the ones before them

Obj

head tail

Obj nullObj Obj Obj

Page 109: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

121/ 124

Singly-Linked List (SLL)

Sorting: So swap is not straightforward

Page 122: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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: COP 3503 FALL 2012 Shayan Javed Lecture  18

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.


Top Related