Post on 30-Mar-2015
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