# CSEB324 Data Structures & Algorithms

## Presentation on theme: "CSEB324 Data Structures & Algorithms"— Presentation transcript:

CSEB324 Data Structures & Algorithms
Chapter 2 Pointer & Linked List CSEB324 Data Structures & Algorithms

Introduction If we have a set of data, we can keep it in an array. But the problem with array is, the size is fixed Overflow Size can’t be extended Wasted if unused To overcome this – we use linked list. To understand linked list, we must first understand the fundamentals – the pointer.

Pointer ? Variable concept Pointer ? Linked List?
Declaring a variable Memory allocation Pointer ? A variable which give location of other variable. Linked List? Put a pointer in a structure, giving the next location of the next structure. Static variable vs. Dynamic variable Static variable – declared and named in program Dynamic – created during program execution.

Understanding Pointers
Declare a pointer int *aPtr; int *aPtr = null; Assigning a pointer aPtr = &aVar; Read the pointer value printf(“%d “, *aPtr);

Exercise Declare an integer variable a and b
Declare pointer variables aPtr and bPtr Assign a to has a value of 100, and b to has a value of 200 Assign aPtr to points to a Assign bPtr to points to aPtr By using bPtr, change value of a to be the same as b.

Linked List a pointer in a structure, giving the next location of the next structure. 123 A C

Temp Item Next Llist NULL Linked List consist of structure Llist – is a pointer, pointing to a linked list structure Next is a pointer in the linked list structure

Structure Declaration
typedef char item; typedef struct node{ item data; struct node *next; } Node;

Item Next Llist NULL To declare a linked list Node *Llist; //Llist –pointer pointing to a node type

Linked List Operation Create a Nod Verify for an empty list
Traversal along the linked nodes Insert new nodes Delete a node

Creating New Node Node *newnode (item c) { Node *n; n = (Node *) malloc (sizeof (Node)); if ( n != NULL) { n-> data = c; n->next = NULL; } return n;

Insert New Node at the begining
Item Next Temp NULL Llist X

Inserting node in the middle
Item Next Temp NULL Llist CurrPtr Item Next Temp Llist NULL CurrPtr

Insert New Node - implementation
void InsertNode( Node *Llist, Node *temp, Node *CurrPtr){ { if (CurrPtr ==NULL) { temp->next = Llist; Llist = temp; } else { temp->next = CurrPtr->next; CurrPtr –>next = temp;

Traverse The List Item Next Llist NULL Item Next Llist NULL Temp void Traversal ( Node *Llist) { Node *Temp; Temp = Llist; while ( Temp != NULL) { printf (“data = %c", Temp->data); Temp = Temp-> next; }

Deleting first node Temp Item Next NULL Llist Temp X Item Next NULL

Deleting middle or last node
Temp Item Next Llist NULL CurrPtr Temp Item Next Llist NULL CurrPtr

Deleting Node - implementation
void DeleteNode( Node *Llist, Node *CurrPtr) { Node *temp; if (CurrPtr ==NULL) { temp = Llist; Llist = temp->next; } else { temp = CurrPtr->next; CurrPtr –>next = temp->next; free(temp)

Type of Linked List Simple one-way linked list x1 x4 x2 x3 L

Formed by having the link in the l ast node of a one way linked list point back to the first node. x1 x4 x2 x3 L

Formed from nodes that have pointers to both their left and right neighbours in the list L x1 x2 x3

Header points to the first node As a marker / stopping place Ease the deletion process of a node Header Node x1 x4 L x2 x3 L

Exercise 2 Indicate whether the statement is TRUE or FALSE
typedef struct bmi { int age; float weight; struct bmi *next; } BMI; BMI *mybmi; Indicate whether the statement is TRUE or FALSE The following code segment is to traverse and display all data from the linked list. while (mybmi != NULL) printf(“%d %.2f”, mybmi->age, mybmi->weight);

Exercise 2 (cont..) Indicate whether the statement is TRUE or FALSE
typedef struct bmi { int age; float weight; struct bmi *next; } BMI; BMI *mybmi; Indicate whether the statement is TRUE or FALSE Assume q has been declared as a pointer of type BMI, then the statement to create a dynamic storage of type BMI is as follows: q = (BMI*) malloc (sizeof(BMI));

Exercise 3 Write code segment to delete a node with value 15.00.
Given, ListGame *temp; temp = (ListGame*) malloc (sizeof(ListGame)); temp -> data = 12.0 ; temp->link = NULL; Write a code segment to insert this node after the first node in above linked list.

Exercise 4 Given, struct Student { char name [20]; float cgpa; Student *next; }; Refer to the diagram, write code segment to delete the node Siew Chee.

Older and widely used computer language (COBOL, Fortran, BASIC) do not provide facilities for dynamic storage allocation (pointers) Workspace (several arrays hold different part of a logical record) is used for programming languages which do not support records.

Implementation of linked list using array is preferred if: Number of entries is known in advance Few insertions or deletions Data are sometimes best treated as a linked list and other times as a contiguous

typedef char ListEntry; typedef int ListIndex; typedef struct listnode{ ListEntry entry; ListIndex next; } ListNode; typedef int Position; typedef struct list{ ListIndex head; int count; }List; ListIndex avail,lastused; ListNode workspace[10]

Array Linked List – New Node
ListIndex NewNode (void) { ListIndex newindex = -1; if(avail != -1) { newindex = avail; avail = workspace[avail].next; workspace[newindex].next = 0; } else if (lastused < MAXLIST - 1) { newindex = ++lastused; else printf (“ Error Overflow : workspace for linked list is full”); return newindex;

void InsertList ( Position p, ListEntry x, List *list) { ListIndex newindex, previous; if ( p <0 || p > list->count) printf(“ Error inserting into a nonexistent position”); else { newindex = NewNode(); workspace[newindex].entry = x; if (p == 0) { workspace[newindex].next = list->head; list->head = newindex; } else { SetPosition(p-1, &previous, list); workspace[newindex].next=workspace[previous].next; workspace[previous].next = newindex; list->count ++;

void DisposeNode (ListIndex oldindex, List *list) { ListIndex previous; if( oldindex == -1) printf(“Error : Disposing a nonexistent node”); else { if ( oldindex == list-> head) list->head = workspace[oldindex].next; SetPosition(CurrentPosition(oldindex,list)– 1, &previous, list); workspace[previous].next=workspace[oldindex].next; } workspace[oldindex].next = avail; avail = oldindex;