Fall 2005 Data Structure Linked List – Single Linked List

Preview:

Citation preview

Fall 2005 Data Structure

Linked List – Single Linked List

Fall 2005 W.F. Hu@ant.comm.ccu 2

Agenda

Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End

Delete node Delete First Node General Delete Node

Fall 2005 W.F. Hu@ant.comm.ccu 3

Agenda

Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End

Delete node Delete First Node General Delete Node

Fall 2005 W.F. Hu@ant.comm.ccu 4

Insert Node

Three steps to the insertion Allocate memory for the new node and

insert data Point the new node to its successor. Point the new node’s predecessor to it.

Fall 2005 W.F. Hu@ant.comm.ccu 5

Agenda

Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End

Delete node Delete First Node General Delete Node

Fall 2005 W.F. Hu@ant.comm.ccu 6

Insert into Empty List

Creat a new empty list : Define the node’s structure

Creat a new empty listlist_pointer ptr = NULL;

typedef struct list_node *list_pointer;

typedef struct list_node{

char data[4];

list_pointer link;

} list_node; ptr

NULL

Fall 2005 W.F. Hu@ant.comm.ccu 7

Insert into Empty List

Insert a new node into empty listtemp = (list_pointer) malloc (sizeof(list_node));

ptr = temp;

ptr

Address of first node

NULLNULL

ptr->data ptr->link

NULL

temp

Fall 2005 W.F. Hu@ant.comm.ccu 8

Agenda

Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End

Delete node Delete First Node General Delete Node

Fall 2005 W.F. Hu@ant.comm.ccu 9

Insert at Beginning (1/2)

2020

ptr3030 NULLNULL

1010

temp

2020

ptr3030 NULLNULL

1010

Allocate memory for the new node and insert data

Point the new node to its successor.Point the new node’s

predecessor to it.

Before insertAfter insert

Fall 2005 W.F. Hu@ant.comm.ccu 10

Insert at Beginning (2/2)

#include <alloc.h>list_pointer temp;temp = (list_pointer) malloc (sizeof(list_node));temp->data = 10;if(*ptr){ temp->link = *ptr; *ptr = temp;}else{ temp->link = NULL; *ptr = temp}

temp

3030 NULLNULL2020

ptr

10

#include <stdlib.h> //page 144

Fall 2005 W.F. Hu@ant.comm.ccu 11

Agenda

Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End

Delete node Delete First Node General Delete Node

Fall 2005 W.F. Hu@ant.comm.ccu 12

Insert in Middle (1/2)

2020

3030 NULLNULL

ptr1010

temp

Insert 20 between 10 and 30

Fall 2005 W.F. Hu@ant.comm.ccu 13

Insert in Middle (2/2)

ptr1010

temp2020

3030 NULLNULL

node

void insert (list_pointer *ptr, list_pointer node){

if(*ptr){ temp->link = node->link; node->link = temp;

}else{

temp->link = NULL; *ptr = temp

}}

Fall 2005 W.F. Hu@ant.comm.ccu 14

Agenda

Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End

Delete node Delete First Node General Delete Node

Fall 2005 W.F. Hu@ant.comm.ccu 15

Insert at End

2020

ptr1010

3030

temp

NULL

NULL

nodevoid insert (…, …) { …

if(*ptr){ temp->link = NULL; node->link = temp; } …}

Fall 2005 W.F. Hu@ant.comm.ccu 16

Agenda

Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End

Delete node Delete First Node General Delete Node

Fall 2005 W.F. Hu@ant.comm.ccu 17

Delete node (1/2)

Delete node : locate the node first. Assume we have three points

ptr : point to the start of the list node : points to the node that we wish to del

ete trail : points to the predecessor

2020 3030 NULLNULL

ptr1010

nodetrail

Fall 2005 W.F. Hu@ant.comm.ccu 18

Delete node (2/2)

There are only two case: Delete the first node Delete any other node

Fall 2005 W.F. Hu@ant.comm.ccu 19

Agenda

Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End

Delete node Delete First Node General Delete Node

Fall 2005 W.F. Hu@ant.comm.ccu 20

Delete First Node (1/2)

2020 3030 NULLNULL

ptr1010

trail

node

NULLNULL

Free (node);

Fall 2005 W.F. Hu@ant.comm.ccu 21

Delete First Node (2/2)

ptr

1010

trail NULLNULL

2020 3030 NULLNULL

node

void delete(list_pointer *ptr, list_pointer trail, list_pointer node)

{

if (trail)

trail->link = node->link;

else

*ptr = (*ptr)->link; free(node); }

Fall 2005 W.F. Hu@ant.comm.ccu 22

Agenda

Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End

Delete node Delete First Node General Delete Node

Fall 2005 W.F. Hu@ant.comm.ccu 23

General Delete Node (1/4)

Case I : delete node between first node and last node.

2020 3030 NULLNULL

ptr1010

trail node

Fall 2005 W.F. Hu@ant.comm.ccu 24

General Delete Node (2/3)

ptr

1010

trail

2020 3030 NULLNULL

node

void delete(list_pointer *ptr, list_pointer trail, list_pointer node)

{

if (trail)

trail->link = node->link; else

*ptr = (*ptr)->link; free(node); }

Fall 2005 W.F. Hu@ant.comm.ccu 25

General Delete Node (3/4)

Case II : delete last node

2020 3030 NULLNULL

ptr1010

nodetrail

NULL

Fall 2005 W.F. Hu@ant.comm.ccu 26

General Delete Node (4/4)

ptr

1010

trail

2020 3030 NULLNULL

node

void delete(list_pointer *ptr, list_pointer trail, list_pointer node)

{

if (trail)

trail->link = NULL; else

*ptr = (*ptr)->link; free(node); }

NULL

Fall 2005 W.F. Hu@ant.comm.ccu 27

Q & A

Recommended