M180: Data Structures & Algorithms in Java

19
M180: Data Structures & Algorithms in Java Linked Lists – Part 1 Arab Open University 1

description

M180: Data Structures & Algorithms in Java. Linked Lists – Part 1. Arab Open University. Outline. Linked list nodes Linked list operations Insertion Append Deletion Other types of linked lists Doubly-linked Circular. Limitation of Arrays. An array has a limited number of elements - PowerPoint PPT Presentation

Transcript of M180: Data Structures & Algorithms in Java

Page 1: M180: Data Structures & Algorithms in Java

1

M180: Data Structures & Algorithms in Java

Linked Lists – Part 1

Arab Open University

Page 2: M180: Data Structures & Algorithms in Java

Outline• Linked list nodes• Linked list operations

– Insertion– Append– Deletion

• Other types of linked lists– Doubly-linked– Circular

Page 3: M180: Data Structures & Algorithms in Java

Limitation of Arrays

• An array has a limited number of elements– routines inserting a new value have to check that there

is room

• Can partially solve this problem by reallocating the array as needed (how much memory to add?)– adding one element at a time could be costly– one approach - double the current size of the array

• A better approach: use a Linked List

Page 4: M180: Data Structures & Algorithms in Java

Dynamically Allocating Elements

• Allocate elements one at a time as needed, have each element keep track of the next element

• Result is referred to as linked list of elements, track next element with a pointer

Array of Elements in Memory

Linked List

Jane AnneBob

Jane Anne Bob

Page 5: M180: Data Structures & Algorithms in Java

5

Anatomy of a linked list• A linked list consists of:

– A sequence of nodes

a b c d

Each node contains a valueand a link (reference) to some other node

The last node contains a null link

The list may have a header

myList

Page 6: M180: Data Structures & Algorithms in Java

6

More terminology• A node’s successor is the next node in the sequence

– The last node has no successor• A node’s predecessor is the previous node in the

sequence– The first node has no predecessor

• A list’s length is the number of elements in it– A list may be empty (contain no elements)

Page 7: M180: Data Structures & Algorithms in Java

ListNode

Linked Lists• Stores a collection of items non-contiguously.• Each item in the list is stored with an indication of where the

next item is.• Must know where first item is.• The list will be a chain of objects, called nodes, of type ListNode that contain the data and a reference to the next ListNode in the list.

• Allows addition or deletion of items in the middle of collection with only a constant amount of data movement. Contrast this with array.

A0 A1 A2 A3first ListNode ListNodeListNode

Page 8: M180: Data Structures & Algorithms in Java

ListNode: Definitionpublic class ListNode <DataType>{ DataType data; ListNode<DataType> next;

// constructors ListNode(DataType d, ListNode<DataType> n) { data = d; next = n; }

ListNode(DataType d) { this (d, null); }

ListNode() { this (null); }}

Page 9: M180: Data Structures & Algorithms in Java

a

Linked List: Insertion

• Insert X immediately after current position

a

current

current

b c d

b c d

x

Page 10: M180: Data Structures & Algorithms in Java

Implementing Insertion: Step By Step• Insertion immediately after current position

// create a new node

tmp = new ListNode<DataType>();

a

current

b

tmp

Page 11: M180: Data Structures & Algorithms in Java

Implementing Insertion: Step By Step• Insertion immediately after current position

// create a new node

tmp = new ListNode<DataType>();

// place x in the element field

tmp.data = x;

a

current

b

tmp

Page 12: M180: Data Structures & Algorithms in Java

Implementing Insertion: Step By Step• Insertion immediately after current position

// create a new node

tmp = new ListNode<DataType>();

// place x in the element field

tmp.data = x;

a

current

b

tmp

x

Page 13: M180: Data Structures & Algorithms in Java

Implementing Insertion: Step By Step• Insertion immediately after current position

// create a new node

tmp = new ListNode<DataType>();

// place x in the element field

tmp.data = x;

// x’s next node is b

tmp.next = current.next;

// a’s next node is x

current.next = tmp;

a

current

b

tmp

x

Page 14: M180: Data Structures & Algorithms in Java

Implementing Insertion: Shorter Version• A shorter version:

// create a new node

tmp = new ListNode<DataType>(x,current.next);

// a’s next node is x

current.next = tmp;

a

current

b

tmp

x

Page 15: M180: Data Structures & Algorithms in Java

Implementing Insertion: Shorter Version• A shorter version:

// create a new node

tmp = new ListNode<DataType>(x,current.next);

// a’s next node is x

current.next = tmp;

a

current

b

tmp

x

Page 16: M180: Data Structures & Algorithms in Java

• Insert X immediately at the end of the list // last refers to the last node in the linked listlast.next = new ListNode<DataType>();last = last.next; // adjust lastlast.data = x; // place x in the nodelast.next = null; // adjust next

• Most efficient approachlast = last.next = new ListNode (x, null);

Implementing Append

a b c d

last

a b c X

last

d

Page 17: M180: Data Structures & Algorithms in Java

Implementing Basic Deletion• Delete an item immediately after current position

• Basic deletion is a bypass in the linked list.

a b x

a b

current

current

Page 18: M180: Data Structures & Algorithms in Java

current.next = current.next.next;

Implementing Basic Deletion

• Need a reference to node prior to the one to be deleted.

a b x

a b x

a b

current

current

current

Page 19: M180: Data Structures & Algorithms in Java

Iterate Through The Linked List

• If items are stored in contiguous array://step through array, outputting each item

for (int index = 0; index < a.length; index++)

System.out.println (a[index]);

• If items are stored in a linked list:// step through list, outputting each item

for(ListNode p=l.first; p!=null; p=p.next)

System.out.println (p.data);

A0 A1 A2 A3

first