linked lists

25
Linked Lists • list elements are stored, in memory, in an arbitrary order explicit information (called a link) is used to go from one element to the next

Upload: alisa

Post on 06-Jan-2016

26 views

Category:

Documents


0 download

DESCRIPTION

Linked Lists. list elements are stored, in memory, in an arbitrary order explicit information ( called a link) is used to go from one element to the next. a. b. c. d. e. c. a. e. d. b. Memory Layout. Layout of L = (a,b,c,d,e) using an array representation. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Linked Lists

Linked Lists

• list elements are stored, in memory, in an arbitrary order

• explicit information (called a link) is used to go from one element to the next

Page 2: Linked Lists

Memory Layout

a b c d e

c a e d b

A linked representation uses an arbitrary layout.

Layout of L = (a,b,c,d,e) using an array representation.

Page 3: Linked Lists

Linked Representation

pointer (or link) in e is NULL

c a e d b

use a variable first to get to the first element a

first

Page 4: Linked Lists

Normal Way To Draw A Linked List

link or pointer field of node

data field of node

a b c d e

NULL

first

Page 5: Linked Lists

Chain

•A chain is a linked list in which each node represents one element.

• There is a link or pointer from one element to the next.

• The last node has a NULL (or 0) pointer.

a b c d e

NULL

first

Page 6: Linked Lists

Node Representation

typedef struct listNode *listPointer;

typedef struct {

char data;

listPointer link;

} listNode;

link

data

Page 7: Linked Lists

get(0)

desiredNode = first; // gets you to first node

return desiredNodedata;

a b c d e

NULL

first

Page 8: Linked Lists

get(1)

desiredNode = firstlink; // gets you to second node

return desiredNodedata;

a b c d e

NULL

first

Page 9: Linked Lists

get(2)

desiredNode = firstlinklink; // gets you to third node

return desiredNodedata;

a b c d e

NULL

first

Page 10: Linked Lists

get(5)

desiredNode = firstlinklinklinklinklink;

// desiredNode = NULL

return desiredNodedata; // NULL.element

a b c d e

NULL

first

Page 11: Linked Lists

Delete An Element

delete(0)

a b c d e

NULL

first

deleteNode = first;

first = firstlink;

free(deleteNode);

Page 12: Linked Lists

a b d e

NULL

first

c

delete(2)

first get to node just before node to be removed

cc

beforeNode = firstlink;

b

beforeNode

Page 13: Linked Lists

delete(2)

save pointer to node that will be deleted deleteNode = beforeNodelink;

beforeNode

a b c d enull

first

Page 14: Linked Lists

delete(2)

now change pointer in beforeNode beforeNodelink = beforeNodelinklink;

free(deleteNode);

beforeNode

a b c d enull

first

Page 15: Linked Lists

insert(0,’f’)

a b c d e

NULL

first

f

newNode

Step 1: get a node, set its data and link fields

MALLOC( newNode, sizeof(*newNode));

newNode->data = ‘f’;

newNode->link = NULL;

Page 16: Linked Lists

insert(0,’f’)

a b c d e

NULL

first

f

newNode

Step 2: update first

first = newNode;

Page 17: Linked Lists

insert(3,’f’)

• first find node whose index is 2

a b c d e

NULL

first

fnewNode

beforeNode

c

• next create a new node and set its data and link fields

• finally link beforeNode to newNode

Page 18: Linked Lists

insert(3,’f’)

beforeNode = firstlinklink;

MALLOC( newNode, sizeof(*newNode));

newNode->data = ‘f’;

newNode->link = beforeNode->link;

beforeNodelink = newNode;

a b c d e

NULL

first

fnewNode

beforeNode

c

Page 19: Linked Lists

Chain With Header Node

a b c d e

NULL

headerNode

Page 20: Linked Lists

Empty Chain With Header Node

headerNode

NULL

Page 21: Linked Lists

Circular List

a b c d e

firstNode

Page 22: Linked Lists

Doubly Linked List

a b c d e

NULL

firstNode

NULL

lastNode

Page 23: Linked Lists

Doubly Linked Circular List

a b c d e

firstNode

Page 24: Linked Lists

Doubly Linked Circular List With Header Node

a b c e

headerNode

d

Page 25: Linked Lists

Empty Doubly Linked Circular List With Header Node

headerNode