CS 171: Introduction to Computer Science II Linked List Li Xiong - - PowerPoint PPT Presentation

cs 171 introduction to computer science ii linked list
SMART_READER_LITE
LIVE PREVIEW

CS 171: Introduction to Computer Science II Linked List Li Xiong - - PowerPoint PPT Presentation

CS 171: Introduction to Computer Science II Linked List Li Xiong What we have learned so far Basic data structure Arrays Abstract data types Stacks Last-In-First-Out (LIFO) Operations: push, pop Queues


slide-1
SLIDE 1

CS 171: Introduction to Computer Science II Linked List

Li Xiong

slide-2
SLIDE 2

What we have learned so far

Basic data structure

Arrays

Abstract data types

Stacks

Last-In-First-Out (LIFO) Operations: push, pop

Queues

First-In-First-Out (FIFO) Operations: enqueue, dequeue

slide-3
SLIDE 3

Arrays

Arrays have certain disadvantages:

Search is slow in unordered array Insertion is slow in ordered array Deletion is slow in both cases Deletion is slow in both cases Both insertion into ordered array and deletion require moving elements Difficult to support dynamic size

slide-4
SLIDE 4

A Different Data Structure

Linked List

A general-purpose storage structure Can replace arrays in many cases Insertion and deletion are fast Insertion and deletion are fast Truly supports dynamic size

slide-5
SLIDE 5

Linked list

Linked list concept Linked list operations Different versions of linked list Re-implementing stacks and queues using linked Re-implementing stacks and queues using linked list

slide-6
SLIDE 6

Linked List

A Linked List is a sequence of nodes chained together. Each node, element, or link contains a data item, and a reference to next node

slide-7
SLIDE 7

Node

  • Data

Reference to the next node

  • This is called self-referential.

A class containing a reference to itself. the next node

slide-8
SLIDE 8

Self-Referential

In Java, an object type variable stores a referencea pointer, to an object, it does not contain the object. A reference is a memory address A reference is a memory address to the actual object. All references are of the same size: (regardless of what they point to)

4 bytes in a 32-bit program 8 bytes in a 64-bit program

slide-9
SLIDE 9

Object vs. Object Reference

  • bject
  • bject reference
slide-10
SLIDE 10

Linked List

slide-11
SLIDE 11

Difference with Arrays

The major difference of Linked List with Array is that Array stores elements continuously in memory while linked list does not. Linked list supports dynamic size There is no simple indexing in Linked List. Linked List incurs some memory overhead, because of the need to store references.

slide-12
SLIDE 12

Building a linked list

Example: to build a linked list that contains the items ”to”, ”be”, and ”or” Create a Node for each item

set the item field to the set the item field to the desired value set the next field to next node

Maintains a link to the first node of the list, also called root, head

slide-13
SLIDE 13

Linked List Operations

Insert

Inserts an element at the front. It’s possible to insert at the end as well.

Find (search) Find (search)

Find an element with a specific key.

Delete

Delete an element at the front Delete an element with a specific key

slide-14
SLIDE 14

Example: insert “not” at the beginning

Insert at the beginning

slide-15
SLIDE 15

Example: insert “not” at the beginning

Insert at the beginning

slide-16
SLIDE 16

Example: remove “to” at the beginning

Remove from the beginning

slide-17
SLIDE 17

Example: remove “to” at the beginning Set the root to the next node in the list

Remove from the beginning

slide-18
SLIDE 18

Example: insert “not” at the end

Insert at the end

slide-19
SLIDE 19

Example: insert “not” at the end Maintain a link to the last node in the list

Insert at the end

slide-20
SLIDE 20

Double-ended Linked List

Similar to an ordinary linked list, but in addition to

keep ‘first’, it also keeps a reference to the ‘last’ element in the list.

What happens when the list is empty? Has only one element?

slide-21
SLIDE 21

Example: print out the values of the linked list

Traversing a linked list

slide-22
SLIDE 22

Example: print out the values of the linked list Traversing a linked list

Traversing a linked list

  • Traversing an array
slide-23
SLIDE 23

Example: search if there is “be” in the linked list Traversing a linked list

Search in a linked list

  • !"#$

!"#$

slide-24
SLIDE 24

Example: remove “be” from the linked list

Remove a given item

slide-25
SLIDE 25

Example: remove “be” from the linked list Search the item in the list, then remove it

Remove a given item

  • !"#$

%&

slide-26
SLIDE 26

Example: remove “be” from the linked list Search the item, then remove it Need to keep the reference to the previous element as well as current element.

Remove a given item

  • %

'( )) !"#$ %

  • % &

%

slide-27
SLIDE 27

Example: remove “be” from the linked list Search the item, then remove it Need to keep the reference to the previous element as well as current element. Need to consider the case when current is first

Remove a given item

first

  • %

'( )) !"#$ %

  • %
  • %
slide-28
SLIDE 28

Doubly Linked List

A doubly linked list has bidirectional references, one pointing to the next link, and

  • ne pointing to the previous link.
slide-29
SLIDE 29

Doubly Linked List

Pros: flexibility Cons: complexity, memory consumption For clarity, we often call the ordinary linked list explicitly as singly linked list. explicitly as singly linked list. Do not confuse Doubly Linked List with Double-ended List!

slide-30
SLIDE 30

Linked List vs. Arrays

Both are general purpose data structures Linked list support faster delete Linked list truly support dynamic size (compares favorably even with expandable arrays) Linked list does occur memory overhead Linked list does not support index based access

slide-31
SLIDE 31

(Singly) linked list Double ended linked list Doubly linked list

slide-32
SLIDE 32

Halloween Costume – Linked List

slide-33
SLIDE 33

Doubly Linked List

slide-34
SLIDE 34

Circularly Linked List

slide-35
SLIDE 35

Binary Tree

slide-36
SLIDE 36

Null Pointer

slide-37
SLIDE 37

Linked list

Linked list concept Linked list operations Different versions of linked list Re-implementing stacks and queues using linked Re-implementing stacks and queues using linked list

slide-38
SLIDE 38

Using Linked List

Linked List is interchangeable with array in many cases, we can re-implement Stacks and Queues using Linked List. Implementing Stack using Linked List Implementing Stack using Linked List

The underlying storage using a linked list instead of an array The stack interface methods are exactly the same with before.

slide-39
SLIDE 39
slide-40
SLIDE 40
slide-41
SLIDE 41
slide-42
SLIDE 42
slide-43
SLIDE 43
slide-44
SLIDE 44
slide-45
SLIDE 45

Linked list stack implementation performance

Every operation takes constant time No array resizing cost

slide-46
SLIDE 46
slide-47
SLIDE 47
slide-48
SLIDE 48
slide-49
SLIDE 49