/
Linked List Linked List

Linked List - PowerPoint Presentation

ellena-manuel
ellena-manuel . @ellena-manuel
Follow
512 views
Uploaded On 2016-12-20

Linked List - PPT Presentation

Data Structure Marcus Biel Software Craftsman httpwwwmarcusbielcom Terminology First of all lets have a look at the term Linked List Why is Linked List actually called Linked List ID: 503922

linked list element node list linked node element singly doubly public link queue item ended scenarios deque application private previous head add

Share:

Link:

Embed:

Download Presentation from below link

Download Presentation The PPT/PDF document "Linked List" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

Linked ListData Structure

Marcus Biel, Software

Craftsman

http://www.marcus-biel.comSlide2

Terminology

First of all, let’s have a look at the term “Linked List”.

Why

is Linked List actually called Linked List?Slide3

Terminology

Link

For the term “Link” - as an analogy - think of a

weblink

when

you click on it, it brings you from one website to the next.Slide4

Terminology

List

A list is a collection of related objects.

Think

of a shopping list - it contains every item that you plan to buy.Slide5

Terminology

Linked List

So a Linked List is a collection of related objects,

where

a link will bring you from one item to the next item

.Slide6

Terminology

Linked List

Technically, in our Linked List, an item or entry of the list…Slide7

Node

… is stored in a so called “Node

”.Slide8

23

Node

In our simple example, this entry is the number twenty three

.Slide9

Node

23

Each node has a link or pointer to the next element of the list,

the

next node

.Slide10

Singly Linked List

23

For every item that we want to add to the Linked List,

we

create a node and store the item in it

.Slide11

Singly Linked List

23

The first item of the list is usually called the head,

the

last item of the list the tail of the list

.Slide12

Singly Linked List

23

3

For every new item, we create a new node

…Slide13

Singly Linked List

23

9

3

… and link to it from the last element of the list

.Slide14

Singly Linked List

23

9

3

42

So a Linked List is a dynamic data

structure,

that

can hold any number of elements,

as

long as enough memory is available

.Slide15

Singly Linked List

next ( )

23

9

3

42

After the list is created, to navigate through the list

we

call a function like next()

which

uses the link to go from one item to the next. Slide16

Singly Linked List

23

9

3

42

This type of a Linked List is called a Singly Linked List

because

the links only go in one direction

-Slide17

Singly Linked List

23

9

3

42

from the head of the list - Slide18

Singly Linked List

23

9

3

42

- to the tail. Slide19

Singly Linked List

23

9

3

42

So to navigate to the previous element,

for

example from the element 42 - Slide20

Singly Linked List

23

9

3

42

to the element

9Slide21

Singly Linked List

23

9

3

42

you

have to go back to the head of the list

-Slide22

Singly Linked List

next ( )

23

9

3

42

and you have to call the function next() -Slide23

Singly Linked List

23

9

3

42

on every single element

-Slide24

Singly Linked List

next ( )

23

9

3

42

until you reach the element 9

.Slide25

Singly Linked List

23

9

3

42

If the list contains a lot of elements, this may take some time

.Slide26

Singly Linked List

23

9

3

42

Inserting an element after the

current

element is relatively easy

with

a Singly Linked List. Slide27

Singly Linked List

17

23

9

3

42

You create a new Node containing the new element

.Slide28

Singly Linked List

17

23

9

3

42

You link to the new element „17“ from the current element „9

”.Slide29

Singly Linked List

17

23

9

3

42

You add a link pointing from the new “17” element

to

the existing “42” element

.Slide30

Singly Linked List

23

9

3

17

42

And

you’r

done

.Slide31

Singly Linked List

23

9

3

42

Inserting the same element BEFORE

the

current element

is

possible in a Singly Linked List,

but

usually not very efficient

.Slide32

Singly Linked List

23

9

3

42

It will require to navigate to the previous element,

starting

from the beginning of the list, as I showed you before

.Slide33

Singly Linked List

23

9

3

42

Removing an element from a Singly Linked List

has

the same issue

it is possible, but generally not very efficient.Slide34

Node

23

These operations get much

easier,

when you add a second link to each node,

pointing

to the previous element. Slide35

Node

23

This way you can navigate in both directions of the list

.Slide36

Node

23

However the extra link comes at a cost, of extra memory,

as

well as time to build the more complex structure

.Slide37

Node

23

If this overhead is justified, I cannot generally answer,

as

it will differ for each use case

.

If performance is an issue, I advise you to test different options. Slide38

Doubly Linked List

23

so a Linked List that contains nodes that provide a link to the next

and

the previous node is

called

a “Doubly Linked List

”.Slide39

Doubly Linked List

23

3

For every element that you add to a Doubly Linked List,

you

need to create two links,

so

creating a Doubly Linked List is somewhat more complicated. Slide40

Doubly Linked List

23

3

9

Navigation in both directions in a Doubly Linked List is easier,

but

at the cost of a more complex structure

.Slide41

Doubly Linked List

23

3

9

42

Based on the two way link structure

…Slide42

Doubly Linked List

23

3

9

42

17

adding or removing an element before

or

after

the current element is relatively easy

.Slide43

Doubly Linked List

23

3

9

42

17

Here we will add the element “17” before the current element “9

”.Slide44

Doubly Linked List

23

3

9

42

17

The back link from element “9” to element “3” is removed

…Slide45

Doubly Linked List

23

3

9

42

17

and replaced by a back link to the new element “17

”.Slide46

Doubly Linked List

23

3

9

42

17

From the new element “17” we link to the next element “9

”.Slide47

Doubly Linked List

23

3

9

42

17

…next, we place a back link from 17 to 3

…Slide48

Doubly Linked List

23

3

9

42

17

The old link from element 3 to 9 is replaced by a link from 3 to 17

.Slide49

Doubly Linked List

23

3

17

9

42

Removing an element from a Doubly Linked List has

the

same steps

as

inserting an element to the list, just in reverse order. Slide50

public class Node<E> {

private

E

item

;

private Node<

E

>

next

;

public

Node(

E

element, Node<

E

> next) {

this

.

item

= element;

this

.

next

= next;

}

public

E

item() {

return

item

;

}

public

Node<

E

> next() {

return

next

;

}

[…]

}

Node

Let‘s look at a code excerpt of a Node in a Singly Linked List

.

So you have a method to retrieve the item of a Node,

and

a method to go to the next Node. Slide51

Node

public class

Node<

E

> {

private

E

item

;

private Node<

E

>

previous

;

private Node<

E

>

next

;

public

Node(Node<

E

> previous,

E

element, Node<

E

> next) {

this

.

item

= element;

this

.

next

= next;

this

.

previous

= previous;

}

public

E

item() {

return

item

;

}

public

Node<

E

> previous() {

return

previous

;

}

public

Node<

E

> next() {

return

next

;

}

[…]

}

The Node of a Doubly Linked List is very similar,

but

a bit more complex.

Additionally

, you have a reference to the previous Node

.Slide52

public class

LinkedList

<

E

>

{

private Node<

E

>

currentNode

;

private Node<

E

> head

;

public

E

get(

int

index) {…}

public

boolean

add(

E

e) {…}

public

E

remove(

int

index) {…}

[…]

}

LinkedList

A

LinkedList

usually contains a link to the head of the List.

The

methods of the Node class

will

be used to navigate through the list

.Slide53

public class

LinkedList

<

E

>

{

private Node<

E

>

currentNode

;

private Node<

E

> head

;

public

E

get(

int

index) {…}

public

boolean

add(

E

e) {…}

public

E

remove(

int

index) {…}

[…]

}

LinkedList

The concrete implementation of methods to get,

add

or remove an element from the list,

depends

on the type of the node,

but

such an implementation detail is

usually

hidden from a user of the list. Slide54

public class

LinkedList

<

E

>

{

private Node<

E

>

currentNode

;

private Node<

E

> head;

private Node<

E

> tail

;

public

E

get(

int

index) {…}

public

boolean

add(

E

e) {…}

public

E

remove(

int

index) {…}

[…]

}

LinkedList

Besides the direct link to the current node

of

the list and the head of the list,

a

Linked List may also provide a direct link to the tail of the list.

This

is common for a Doubly Linked List,

but

may also be beneficial for a Singly Linked List

.Slide55

Application Scenarios

List

Queue

Stack

Double Ended Queue (

Deque

)

Let’s have a look at different application scenarios for a Linked List.

A

Linked List can be used to implement data structures like

List

, Queue, Stack or Double Ended Queue

.Slide56

Application Scenarios

List

Queue

Stack

Double Ended Queue (

Deque

)

When comparing implementations

based

on a Singly- or a Doubly Linked

List,

there

is no overall winner

.Slide57

Application Scenarios

List

Queue

Stack

Double Ended Queue (

Deque

)

Both have advantages and disadvantages that

make

them useful for different application scenarios

.Slide58

Application Scenarios

List

Queue

Stack

Double Ended Queue (

Deque

)

Using the example of

List

, Queue, Stack and Double Ended

Queue

we will in each case decide for a

Singly-

or a Doubly Linked based implementation

.Slide59

Application Scenarios

List

Queue

Stack

Double Ended Queue (

Deque

)

An implementation with other data structures,

for

example an array,

is

also possible, but that’s a different story. Slide60

List

Queue

Stack

Double Ended Queue (

Deque

)

Application Scenarios

A list usually requires random access to any element of the list,

so

I would recommend

an

implementation based on a Doubly Linked List

.Slide61

List

Queue

Stack

Double Ended Queue (

Deque

)

Application Scenarios

In a so called “first in first out” Queue,

new

elements are inserted at the tail of the queue and

removed

from the head of the queue

.Slide62

List

Queue

Stack

Double Ended Queue (

Deque

)

Application Scenarios

Random access is not required,

so

I would recommend

an

implementation based on a Singly Linked List

.Slide63

List

Queue

Stack

Double Ended Queue (

Deque

)

Application Scenarios

A Stack provides a so called “Last in First out” order.

Elements

are added and removed from the head of the Stack,

which

makes it even more simple then a Queue

.Slide64

List

Queue

Stack

Double Ended Queue (

Deque

)

Application Scenarios

Therefore a Singly Linked List is usually sufficient

.Slide65

List

Queue

Stack

Double Ended Queue (

Deque

)

Application Scenarios

A Double Ended Queue or

Deque

is a very dynamic data structure.

It

allows to access, add or remove elements from both ends.

Therefore

I would use a Doubly Linked List to implement a

Deque

.