270 likes | 332 Views
Fall 2005 Data Structure. Linked List – Single Linked List. Agenda. Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End Delete node Delete First Node General Delete Node. Agenda. Insert node Insert into Empty List Insert at Beginning
E N D
Fall 2005 Data Structure Linked List – Single Linked List
Agenda • Insert node • Insert into Empty List • Insert at Beginning • Insert in Middle • Insert at End • Delete node • Delete First Node • General Delete Node W.F. Hu@ant.comm.ccu
Agenda • Insert node • Insert into Empty List • Insert at Beginning • Insert in Middle • Insert at End • Delete node • Delete First Node • General Delete Node W.F. Hu@ant.comm.ccu
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. W.F. Hu@ant.comm.ccu
Agenda • Insert node • Insert into Empty List • Insert at Beginning • Insert in Middle • Insert at End • Delete node • Delete First Node • General Delete Node W.F. Hu@ant.comm.ccu
Insert into Empty List • Creat a new empty list : • Define the node’s structure • Creat a new empty list list_pointer ptr = NULL; typedef struct list_node *list_pointer; typedef struct list_node{ char data[4]; list_pointer link; } list_node; ptr NULL W.F. Hu@ant.comm.ccu
Insert into Empty List • Insert a new node into empty list temp = (list_pointer) malloc (sizeof(list_node)); *ptr = temp; Address of first node ptr->data ptr->link NULL NULL ptr temp W.F. Hu@ant.comm.ccu
Agenda • Insert node • Insert into Empty List • Insert at Beginning • Insert in Middle • Insert at End • Delete node • Delete First Node • General Delete Node W.F. Hu@ant.comm.ccu
Insert at Beginning (1/2) ptr 20 30 NULL 10 • Allocate memory for the new node and insert data temp Before insert After insert ptr 20 30 NULL 10 • Point the new node to its successor. • Point the new node’s predecessor to it. W.F. Hu@ant.comm.ccu
Insert at Beginning (2/2) ptr 20 30 NULL 10 temp #include <stdlib.h> //page 141 #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 } W.F. Hu@ant.comm.ccu
Agenda • Insert node • Insert into Empty List • Insert at Beginning • Insert in Middle • Insert at End • Delete node • Delete First Node • General Delete Node W.F. Hu@ant.comm.ccu
Insert in Middle (1/2) ptr 10 30 NULL Insert 20 between 10 and 30 20 temp W.F. Hu@ant.comm.ccu
Insert in Middle (2/2) ptr 10 30 NULL node 20 temp void insert (list_pointer *ptr, list_pointer node) { if(*ptr){ temp->link = node->link; node->link = temp; } else{ temp->link = NULL; *ptr = temp } } W.F. Hu@ant.comm.ccu
Agenda • Insert node • Insert into Empty List • Insert at Beginning • Insert in Middle • Insert at End • Delete node • Delete First Node • General Delete Node W.F. Hu@ant.comm.ccu
Insert at End ptr 10 20 NULL node void insert (…, …) { … if(*ptr){ temp->link = NULL; node->link = temp; } … } 30 NULL temp W.F. Hu@ant.comm.ccu
Agenda • Insert node • Insert into Empty List • Insert at Beginning • Insert in Middle • Insert at End • Delete node • Delete First Node • General Delete Node W.F. Hu@ant.comm.ccu
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 delete • trail : points to the predecessor trail node ptr 10 20 30 NULL W.F. Hu@ant.comm.ccu
Delete node (2/2) • There are only two case: • Delete the first node • Delete any other node W.F. Hu@ant.comm.ccu
Agenda • Insert node • Insert into Empty List • Insert at Beginning • Insert in Middle • Insert at End • Delete node • Delete First Node • General Delete Node W.F. Hu@ant.comm.ccu
Delete First Node (1/2) NULL trail node ptr 10 20 30 NULL Free (node); W.F. Hu@ant.comm.ccu
Delete First Node (2/2) NULL trail node ptr 10 20 30 NULL void delete(list_pointer *ptr, list_pointer trail, list_pointer node) { if (trail) trail->link = node->link; else *ptr = (*ptr)->link; free(node); } W.F. Hu@ant.comm.ccu
Agenda • Insert node • Insert into Empty List • Insert at Beginning • Insert in Middle • Insert at End • Delete node • Delete First Node • General Delete Node W.F. Hu@ant.comm.ccu
General Delete Node (1/4) • Case I : delete node between first node and last node. trail node ptr 10 20 30 NULL W.F. Hu@ant.comm.ccu
General Delete Node (2/3) trail node ptr 10 20 30 NULL void delete(list_pointer *ptr, list_pointer trail, list_pointer node) { if (trail) trail->link = node->link; else *ptr = (*ptr)->link; free(node); } W.F. Hu@ant.comm.ccu
General Delete Node (3/4) • Case II : delete last node trail node ptr 10 20 30 NULL NULL W.F. Hu@ant.comm.ccu
General Delete Node (4/4) trail node ptr 10 20 30 NULL NULL void delete(list_pointer *ptr, list_pointer trail, list_pointer node) { if (trail) trail->link = NULL; else *ptr = (*ptr)->link; free(node); } W.F. Hu@ant.comm.ccu
Q & A W.F. Hu@ant.comm.ccu