data structure in c (lab programs)

120
Data Structure in C (Lab. Programs) Programs are complete in best of my knowledge with zero compilation error in IDE Bloodshed Dev-C++. These can be easily portable to any versions of Visual Studio or Qt. If you need any guidance please let me know via comments and Always Enjoy Programming. 2013 Saket Kr. Pathak Software Developer 3D Graphics

Upload: saket-pathak

Post on 11-May-2015

3.755 views

Category:

Education


3 download

DESCRIPTION

Programs are complete in best of my knowledge with zero compilation error in IDE Bloodshed Dev-C++. These can be easily portable to any versions of Visual Studio or Qt. If you need any guidance please let me know via comments and Always Enjoy Programming.

TRANSCRIPT

Page 1: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)Programs are complete in best of my knowledge with zero compilation error in IDE Bloodshed Dev-C++. These can be easily portable to any versions of Visual Studio or Qt. If you need any guidance please let me know via comments and Always Enjoy Programming.

2013

Saket Kr. Pathak Software Developer 3D Graphics

Page 2: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

Content (Programs List)

S. No. Subject Date Sign Remark1. WAP in C for following Sorting Methods

Bubble Sort Merge Sort Insertion Sort Selection Sort Quick Sort

2. WAP in C for following Searching Methods Linear Search Binary Search

3. WAP in C for array implementation of Stack Queue Circular Queue Linked List

4. WAP in C using dynamic memory allocation of Stack Queue Circular Queue Linked List

5. WAP in C for implementation of Binary Tree.

6. WAP in C for Tree Traversal Pre-Order In-Order Post-Order

7. WAP in C for Graph Traversal Breadth First Search Depth First Search

8. WAP in C for Minimum Cost Spanning Tree

9. WAP in C for Shortest Path Problem

Saket Kr. Pathak Page 2

Page 3: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

1. WAP in C for following Sorting Methods Bubble Sort Merge Sort Insertion Sort Selection Sort Quick Sort

Program:Bubble Sort:

Algorithm –

[1]Compare each pair of adjacent elements from the beginning of an array and, if they are in reversed order, swap them.

[2]If at least one swap has been done, repeat step 1.

Time Complexity –

Best case: O (n) timeAverage case: O (n2) timeWorst case: O (n2) time

Code – Snippet:

#include <stdio.h>

int* bubble_sort(int i_store[], int i_size);int* get_elem(int i_size);void disp_elem(int i_store[], int i_size);

int main(){ printf("\n\n\n"); printf("\t\t\tWAP of Bubble sort."); printf("\n\n\n"); int i_store_size; printf("Enter the total number of items to store: "); scanf("%d", &i_store_size); int* ip_store = get_elem(i_store_size); ip_store = bubble_sort(ip_store, i_store_size);

Saket Kr. Pathak Page 3

Page 4: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

printf("\n\nResult: \n"); disp_elem(ip_store, i_store_size); printf("\n\n\n"); system("pause"); return 0;}

int* get_elem(int i_size){ int* ip_store = malloc(sizeof(int) * i_size); int i_count = 0; int i_temp_size = i_size; while (i_temp_size) { printf("\nEnter item for index - %d : ", i_count); scanf("%d", (ip_store+i_count)); i_count++; i_temp_size--; } disp_elem(ip_store, i_size); return ip_store;}

int* bubble_sort(int i_store[], int i_size){ int i_temp; int i_count_0, i_count_1;

printf("\n\nSwapping Steps: \n");

for (i_count_0 = (i_size - 1); i_count_0 > 0; --i_count_0) { for (i_count_1 = 1; i_count_1 <= i_count_0; ++i_count_1) { if (i_store[i_count_1 - 1] > i_store[i_count_1]) { i_temp = i_store[i_count_1 - 1]; i_store[i_count_1 - 1] = i_store[i_count_1]; i_store[i_count_1] = i_temp; disp_elem(i_store, i_size); } } }

Saket Kr. Pathak Page 4

Page 5: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

return i_store;}

void disp_elem(int i_store[], int i_size){ printf("\n-------------------------------------------------------\n"); printf("Elements stored in order: "); int i_ndx = 0; while (i_size) { printf("| %d |",i_store[i_ndx]); i_ndx++; i_size--; } printf("\n-------------------------------------------------------");}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~

Merge Sort:

Algorithm –

[1]If the input sequence has fewer than two elements, return.[2]Partition the input sequence into two halves.[3]Sort the two subsequences using the same algorithm.[4]Merge the two sorted subsequences to form the output

sequence.

Time Complexity –

Best case: O (n * log (n)) timeAverage case: O (n * log (n)) timeWorst case: O (n * log (n)) time

Code – Snippet:

#include<stdio.h>#include<stdbool.h> #define ARRAY_SIZE 1024

Saket Kr. Pathak Page 5

Page 6: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int i_size;

int* get_elements(void);void disp_elements(int*);void divide_(int* i_store, int i_low, int i_high, bool b_flag);void conquer_(int* ip_storage, int i_low, int i_mid, int i_high);void combine_(int* storage, int* temp_arr_1, int* temp_arr_2, int i_low, int i_height); int main(){ printf("\n\n\n"); printf("\t\t\tWAP of Merge sort."); printf("\n\n\n"); int* i_store; i_store = get_elements(); divide_(i_store, 0, i_size-1, 0); disp_elements(i_store);

getch(); return 0;}

void divide_(int* i_store, int i_low, int i_high, bool b_flag){ printf("\nDivide low(%d) | high(%d) | flag(%d): ", i_low, i_high, b_flag); int i_count; for (i_count = i_low; i_count <= i_high; ++i_count) { printf("%d", *(i_store + i_count)); } int i_mid = (i_low + i_high) / 2; if (i_low < i_high) { divide_(i_store, i_low, i_mid, 1); divide_(i_store, i_mid + 1, i_high, 0); conquer_(i_store, i_low, i_mid, i_high); }}

Saket Kr. Pathak Page 6

Page 7: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

void conquer_(int* ip_storage, int i_low, int i_mid, int i_high){ int* ip_temp_store_1 = malloc(sizeof(int) * ARRAY_SIZE); int* ip_temp_store_2 = malloc(sizeof(int) * ARRAY_SIZE); int n1,n2,i,j,k; n1 = i_mid - i_low + 1; n2 = i_high - i_mid;

printf("\n\tMerge low(%d) | mid(%d) | high(%d): ", i_low, i_mid, i_high); printf("\n\tip_temp_store_1: "); for(i=0; i<n1; i++) { ip_temp_store_1[i] = ip_storage[i_low+i]; printf("%d", i, ip_temp_store_1[i]); } printf("\n\tip_temp_store_2: "); for(j=0; j<n2; j++) { ip_temp_store_2[j] = ip_storage[i_mid+j+1]; printf("%d", j, ip_temp_store_2[j]); } // To mark the end of each temporary array ip_temp_store_1[i] = 10000000; ip_temp_store_2[j] = 10000000; combine_(ip_storage, ip_temp_store_1, ip_temp_store_2, i_low, i_high);}

void combine_(int* storage, int* temp_arr_1, int* temp_arr_2, int i_low, int i_height){ int i=0; int j=0; int k; printf("\nResult: "); for (k=i_low; k<=i_height; k++) { if (temp_arr_1[i] <= temp_arr_2[j]) storage[k] = temp_arr_1[i++]; else storage[k]=temp_arr_2[j++];

Saket Kr. Pathak Page 7

Page 8: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

printf("%d", storage[k]); } printf("\n");}

void disp_elements(int* i_storage){ printf("\n\n\n"); int i_count; printf("Elements: "); for (i_count = 0; i_count < i_size; ++i_count) { printf("%d",*(i_storage + i_count)); } printf("\n\n\n");}

int* get_elements(void){ int i_count; printf("Enter the size of array: "); scanf("%d",&i_size); int* i_storage = (int*) malloc(sizeof(int) * i_size); for(i_count = 0; i_count < i_size; i_count++) { printf("Enter the element at pos[%d]: ", i_count); scanf("%d",(i_storage + i_count)); } return i_storage;}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~

Insertion Sort:

Algorithm –

Saket Kr. Pathak Page 8

Page 9: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

[1]Start with the result as the first element of the input.[2]Loop over the input until it is empty, "removing" the first

remaining (leftmost) element.[3]Compare the removed element against the current result,

starting from the highest (rightmost) element, and working left towards the lowest element.

[4]If the removed input element is lower than the current result element, copy that value into the following element to make room for the new element below, and repeat with the next lowest result element.

[5]Otherwise, the new element is in the correct location; save it in the cell left by copying the last examined result up, and start again from (2) with the next input element.

Time Complexity –

Best case: O (n) timeAverage case: O (n2) timeWorst case: O (n2) time

Code – Snippet:

#include <stdio.h>

int* insertion_sort(int i_store[], int i_size);int* get_elem(int i_size);void disp_elem(int i_store[], int i_size);

int main(){ printf("\n\n\n"); printf("\t\t\tWAP of Insertion sort."); printf("\n\n\n"); int i_store_size; printf("Enter the total number of items to store: "); scanf("%d", &i_store_size); int* ip_store = get_elem(i_store_size); ip_store = insertion_sort(ip_store, i_store_size); disp_elem(ip_store, i_store_size); printf("\n\n\n"); system("pause"); return 0;}

Saket Kr. Pathak Page 9

Page 10: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int* get_elem(int i_size){ int* ip_store = malloc(sizeof(int) * i_size); int i_count = 0; while (i_size) { printf("\nEnter item for index - %d : ", i_count); scanf("%d", (ip_store+i_count)); i_count++; i_size--; } return ip_store;}

int* insertion_sort(int i_store[], int i_size){ int i_temp; int i_count_0, i_count_1, i_count_2; for (i_count_0 = 1; i_count_0 <= (i_size-1); ++i_count_0) { for (i_count_1 = 0; i_count_1 < i_count_0; ++i_count_1)

{if (i_store[i_count_1] > i_store[i_count_0]){

i_temp = i_store[i_count_1] ;i_store[i_count_1] = i_store[i_count_0] ;

for (i_count_2 = i_count_0; i_count_2 > i_count_1; i_count_2--)

i_store[i_count_2] = i_store[i_count_2 - 1] ;

i_store[i_count_2 + 1] = i_temp ;}

} } return i_store;}

void disp_elem(int i_store[], int i_size){ printf("\nDisplaying Elements of store: "); int i_ndx = 0; while (i_size) {

Saket Kr. Pathak Page 10

Page 11: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

printf("%d", i_store[i_ndx]); i_ndx++; i_size--; }}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~

Selection Sort:

Algorithm –

[1]Get a hand of unsorted cards/numbers.[2]Set a marker for the sorted section after the first card of the

hand.[3]Repeat steps 4 through 6 until the unsorted section is empty.[4]Select the first unsorted card.[5]Swap this card to the left until it arrives at the correct sorted

position.[6]Advance the marker to the right one card.[7]Stop

Time Complexity –

Best case: O (n2) timeAverage case: O (n2) timeWorst case: O (n2) time

Code – Snippet:

#include <stdio.h>

int* selection_sort(int i_store[], int i_size);int* get_elem(int i_size);void disp_elem(int i_store[], int i_size);

int main(){ printf("\n\n\n"); printf("\t\t\tWAP of Selection sort."); printf("\n\n\n"); int i_store_size; printf("Enter the total number of items to store: "); scanf("%d", &i_store_size);

Saket Kr. Pathak Page 11

Page 12: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int* ip_store = get_elem(i_store_size); ip_store = selection_sort(ip_store, i_store_size); disp_elem(ip_store, i_store_size); printf("\n\n\n"); system("pause"); return 0;}

int* get_elem(int i_size){ int* ip_store = malloc(sizeof(int) * i_size); int i_count = 0; while (i_size) { printf("\nEnter item for index - %d : ", i_count); scanf("%d", (ip_store+i_count)); i_count++; i_size--; } return ip_store;}

int* selection_sort(int i_store[], int i_size){ int i_temp; int i_count_0, i_count_1; for (i_count_0 = 0; i_count_0 < (i_size-1); ++i_count_0) { for (i_count_1 = (i_count_0+1); i_count_1 < i_size; ++i_count_1) { if (i_store[i_count_0] > i_store[i_count_1]) { i_temp = i_store[i_count_0]; i_store[i_count_0] = i_store[i_count_1]; i_store[i_count_1] = i_temp; } } } return i_store;}

void disp_elem(int i_store[], int i_size)

Saket Kr. Pathak Page 12

Page 13: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

{ printf("\nDisplaying Elements of store: "); int i_ndx = 0; while (i_size) { printf("%d", i_store[i_ndx]); i_ndx++; i_size--; }}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~

Quick Sort:

Algorithm –

[1]Choosing the pivot.[2]Partitioning.[3]Recursively quick-sort the left and the right parts.

Time Complexity –

Best case: O (n * log (n)) timeAverage case: O (n * log (n)) timeWorst case: O (n2) time

Code – Snippet:

#include <stdio.h>

int* quick_sort(int i_store[], int i_start, int i_end);int* get_elem(int i_size);void disp_elem(int i_store[], int i_size);

int main(){ printf("\n\n\n"); printf("\t\t\tWAP of Quick sort."); printf("\n\n\n"); int i_store_size; printf("Enter the total number of items to store: "); scanf("%d", &i_store_size);

Saket Kr. Pathak Page 13

Page 14: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int* ip_store = get_elem(i_store_size); ip_store = quick_sort(ip_store, 0, i_store_size); disp_elem(ip_store, i_store_size); printf("\n\n\n"); system("pause"); return 0;}

int* get_elem(int i_size){ int* ip_store = malloc(sizeof(int) * i_size); int i_count = 0; while (i_size) { printf("\nEnter item for index - %d : ", i_count); scanf("%d", (ip_store+i_count)); i_count++; i_size--; } return ip_store;}

int* quick_sort(int i_store[], int i_start, int i_end){ int i_begin, i_finish, i_pivot, i_temp; if (i_finish > i_begin) { i_begin = i_start; i_finish = i_end; i_pivot = i_begin; while (i_begin < i_finish) { while ((i_store[i_begin] <= i_store[i_pivot]) && (i_begin < i_end)) { ++i_begin; } while (i_store[i_finish] > i_store[i_pivot]) { --i_finish; }

Saket Kr. Pathak Page 14

Page 15: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

if (i_begin < i_finish) { i_temp = i_store[i_begin]; i_store[i_begin] = i_store[i_finish]; i_store[i_finish] = i_temp; } } i_temp = i_store[i_pivot]; i_store[i_pivot] = i_store[i_finish]; i_store[i_finish] = i_temp; quick_sort(i_store, i_start, i_finish - 1); quick_sort(i_store, i_finish + 1, i_end); } return i_store;}

void disp_elem(int i_store[], int i_size){ printf("\nDisplaying Elements of store: "); int i_ndx = 0; while (i_size) { printf("%d", i_store[i_ndx]); i_ndx++; i_size--; }}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~

Saket Kr. Pathak Page 15

Page 16: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

2. WAP in C for following Searching Methods Linear Search Binary Search

Program:

Linear Search:

Algorithm –

[1]Input: Array D of Business objects, phone number key.[2]Output: first index where key’s phone number matches D, or -1

if not found

Time Complexity –

Best case: O (1) timeAverage case: O (n) timeWorst case: O (n) time

Code – Snippet:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdbool.h>#include <math.h>

void linear_search(int* i_storage, int i_srch_item, int i_num_item){ int i_count; bool b_flag = false; for (i_count = 0; i_count < i_num_item; ++i_count) { if (i_storage[i_count] == i_srch_item) { b_flag = true; printf("Item (%d) is found at position: %d", i_srch_item, i_count); break;

Saket Kr. Pathak Page 16

Page 17: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

} } if (!b_flag) printf("Item not found.");}

void get_input(int* i_storage, int i_num_item){

printf("Your Storage Items are: \n\t");

int i_loop_count;for(i_loop_count = 0; i_loop_count < i_num_item; +

+i_loop_count){

printf("%d, ", i_storage[i_loop_count]);}

printf("\n\n\n");

int i_srch_item;printf("Please Enter the item (number) to search: ");scanf("%d", &i_srch_item);

printf("\n\n\n");linear_search(i_storage, i_srch_item, i_num_item);

}

void set_argument(void){

printf("WAP for Linear - Search."); printf("\nLimitation: \n\t-> Items are restrickted with integer number.\n\t-> Starting index of storage is 0.");

printf("\n\n\n");

int i_storage[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

get_input(i_storage, (sizeof(i_storage)/sizeof(int)));}

int main(){

set_argument();

printf("\n\n\n");getch();return 0;

Saket Kr. Pathak Page 17

Page 18: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~Binary Search:

Algorithm –

[1]Get the middle element;[2]If the middle element equals to the searched value, the

algorithm stops;[3]Otherwise, two cases are possible:

Searched value is less, than the middle element. In this case, go to the step 1 for the part of the array, before middle element.

Searched value is greater, than the middle element. In this case, go to the step 1 for the part of the array, after middle element.

Time Complexity –

Best case: O (1) timeAverage case: O (log (n)) timeWorst case: O (n) time

Code – Snippet:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdbool.h>#include <math.h>

bool check_item_order(int* i_storage){ //Function to check the Item - List is in Sorted order.

return true;}

void recursive_bin_search(int* i_storage, int i_srch_item, int i_low, int i_mid, int i_hi){

if(i_low < i_hi){

if(i_storage[i_mid] == i_srch_item){

printf("Item (%d) is found at position: %d", i_srch_item, i_mid);

Saket Kr. Pathak Page 18

Page 19: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

}else if(i_storage[i_mid] > i_srch_item){

i_hi = i_mid;i_mid = (i_low + i_hi)/2;

recursive_bin_search(i_storage, i_srch_item, i_low, i_mid, i_hi);}else if(i_storage[i_mid] < i_srch_item){

i_low = i_mid;i_mid = (i_low + i_hi)/2;

recursive_bin_search(i_storage, i_srch_item, i_low, i_mid, i_hi);}

}

}

void recursive_binary_search(int* i_storage, int i_num_item){

bool b_check = check_item_order(i_storage);

printf("Your Storage Items are: \n\t");

int i_loop_count;for(i_loop_count = 0; i_loop_count < i_num_item; +

+i_loop_count){

printf("%d, ", i_storage[i_loop_count]);}

printf("\n\n\n");

int i_srch_item;printf("Please Enter the item (number) to search: ");scanf("%d", &i_srch_item);

printf("\n\n\n");int i_low = 0;int i_hi = i_num_item;int i_mid = (i_low + i_hi)/2;

if(b_check)recursive_bin_search(i_storage, i_srch_item, i_low,

i_mid, i_hi);else

printf("\nItems are not in Order.\n");

Saket Kr. Pathak Page 19

Page 20: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

}

void binary_search(void){

printf("WAP for Binary - Search.");printf("\nLimitation: \n\t-> Items are restrickted with integer number.\n\t-> Starting index of storage is 0.");

printf("\n\n\n");

int i_storage[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

recursive_binary_search(i_storage, (sizeof(i_storage)/sizeof(int)));}

int main(){

binary_search();

printf("\n\n\n");getch();return 0;

}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~

Saket Kr. Pathak Page 20

Page 21: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

3. WAP in C for array implementation of Stack Queue Circular Queue Linked List

Program:

Stack:

Code – Snippet:

#include <stdio.h>#include <stdbool.h>

#define STACK_SIZE 1024

int i_top = -1;int stack[STACK_SIZE];

int select_choice(void){

{printf("\n\tTo Push Item: \t\t(Press) 1");printf("\n\tTo Pop Item: \t\t(Press) 2");printf("\n\tTo Display Item: \t(Press) 3");printf("\n\tTo Exit: \t\t(Press) 4");

}

int i_choice;printf("\n\n\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

int push_item(int i_item){

Saket Kr. Pathak Page 21

Page 22: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

if(i_top == (STACK_SIZE - 1)){

printf("\n\tStack Overflow.");return 0;

}else{

stack[++i_top] = i_item;printf("\n\tItem - %d, has successfully pushed into

Stack.", i_item);return 1;

}}

int pop_item(int i_item){

if(i_top == -1){

printf("\n\tStack is Underflow.");return 0;

}else{

bool b_flag = false;int i_count;for(i_count = 0; i_count <= i_top; ++i_count){

if((stack[i_count] == i_item)&&(!b_flag)){

stack[i_count] = stack[i_count+1];b_flag = true;

}else if(b_flag){

stack[i_count] = stack[i_count+1];}

}i_top = (i_count - 2);

//Substracting: 2 = (additional loop increment + 1 deleted item)

return 1;}

}

int disp_item(void){

if(i_top == -1)

Saket Kr. Pathak Page 22

Page 23: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

{printf("\n\tStack is Empty.");return 0;

}else{

int i_count;printf("\n\tElements of Stack are:");for(i_count = 0; i_count <= i_top; ++i_count){

printf("\n\tIndex: %d | Item: %d", i_count, stack[i_count]);

}return 1;

}}

int process_stack(int i_choice){

switch(i_choice){

case 1:{

printf("\n\tTo Push Item into Stack.");int i_item = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);int i_check = push_item(i_item);if(i_check == 1)

return 1;else

return 0;break;

}case 2:{

printf("\n\tTo Pop Item from Stack.");int i_item = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);int i_check = pop_item(i_item);if(i_check == 1)

return 1;else

return 0;break;

}

Saket Kr. Pathak Page 23

Page 24: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

case 3:{

printf("\n\tTo Display Item of Stack.");int i_check = disp_item();if(i_check == 1)

return 1;else

return 0;break;

}case 4:{

printf("\n\tTo Exit.");return 0;break;

}default:{

return 0;break;

}}

}

int set_Argument(void){

printf("\n\t--------------------------------------------------\n");

printf("\n\t\t\t Array - Container.\n");printf("\n\

t--------------------------------------------------\n\n");int i_check = select_choice();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else

;

return i_check;}

int main(){

int i_check = set_Argument();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else {

Saket Kr. Pathak Page 24

Page 25: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int i_state;do{

i_state = process_stack(i_check);i_check = set_Argument();if(i_check == 4) //Check for Exit.

i_state = 0;}while(i_state == 1);

}

printf("\n\n\n");getch();return 0;

}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

Queue:

Code – Snippet:

#include <stdio.h>#include <stdbool.h>

#define QUEUE_SIZE 1024

int i_front = -1;int i_rear = -1;int queue[QUEUE_SIZE];

int main(){

int i_check = set_Argument();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else {

int i_state;do{

i_state = process_stack(i_check);i_check = set_Argument();

Saket Kr. Pathak Page 25

Page 26: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

if(i_check == 4) //Check for Exit.

i_state = 0;}while(i_state == 1);

}

printf("\n\n\n");getch();return 0;

}

int set_Argument(void){

printf("\n\t--------------------------------------------------\n");

printf("\n\t\t\t Array - Container.\n");printf("\n\

t--------------------------------------------------\n\n");int i_check = select_choice();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else

;

return i_check;}

int select_choice(void){

{printf("\n\tTo Push Item: \t\t(Press) 1");printf("\n\tTo Pop Item: \t\t(Press) 2");printf("\n\tTo Display Item: \t(Press) 3");printf("\n\tTo Exit: \t\t(Press) 4");

}

int i_choice;printf("\n\n\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

Saket Kr. Pathak Page 26

Page 27: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int push_item(int i_item){

if(i_rear == (QUEUE_SIZE - 1)){

printf("\n\tQueue Overflow.");return 0;

}else{

i_front = 0;queue[++i_rear] = i_item;printf("\n\tItem - %d, has successfully pushed into

Stack.", i_item);return 1;

}}

int pop_item(int i_item){

if((i_front == -1)||(i_front > i_rear)){

printf("\n\tQueue is Underflow.");return 0;

}else{

bool b_flag = false;int i_count;for(i_count = i_front; i_count <= i_rear; ++i_count){

if((queue[i_count] == i_item)&&(!b_flag)){

queue[i_count] = queue[i_count+1];b_flag = true;

}else if(b_flag){

queue[i_count] = queue[i_count+1];}

}i_rear = (i_count - 2);

//Substracting: 2 = (additional loop increment + 1 deleted item)

return 1;}

}

Saket Kr. Pathak Page 27

Page 28: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int disp_item(void){

if(i_front == -1){

printf("\n\tQueue is Empty.");return 0;

}else{

printf("\n\tElements of Queue are:");int i_count;for(i_count = i_front; i_count <= i_rear; ++i_count){

printf("\n\tIndex: %d | Item: %d", i_count, queue[i_count]);

}return 1;

}}

int process_stack(int i_choice){

switch(i_choice){

case 1:{

printf("\n\tTo Push Item into Queue.");int i_item = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);int i_check = push_item(i_item);if(i_check == 1)

return 1;else

return 0;break;

}case 2:{

printf("\n\tTo Pop Item from Queue.");int i_item = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);int i_check = pop_item(i_item);if(i_check == 1)

return 1;else

Saket Kr. Pathak Page 28

Page 29: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

return 0;break;

}case 3:{

printf("\n\tTo Display Item of Queue.");int i_check = disp_item();if(i_check == 1)

return 1;else

return 0;break;

}case 4:{

printf("\n\tTo Exit.");return 0;break;

}default:{

return 0;break;

}}

}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

Circular Queue:

Code – Snippet:

#include <stdio.h>#include <stdbool.h>

#define QUEUE_SIZE 1024

int i_front = -1;int i_rear = -1;int circular_queue[QUEUE_SIZE];

int select_choice(void){

Saket Kr. Pathak Page 29

Page 30: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

{printf("\n\tTo Push Item: \t\t(Press) 1");printf("\n\tTo Pop Item: \t\t(Press) 2");printf("\n\tTo Display Item: \t(Press) 3");printf("\n\tTo Exit: \t\t(Press) 4");

}

int i_choice;printf("\n\n\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

int push_item(int i_item){

if(((i_front == 0) && (i_rear == (QUEUE_SIZE - 1))) || (i_front == i_rear + 1))

{printf("\n\tQueue Overflow.");return 0;

}else{

if(i_rear == -1){

i_rear = 0;i_front = 0;

}else if(i_rear == QUEUE_SIZE-1)

i_rear = 0;else

i_rear++;circular_queue[i_rear] = i_item;printf("\n\tItem - %d, has successfully pushed into

Stack.", i_item);return 1;

}}

int pop_item(int i_item){

if(i_front == -1){

Saket Kr. Pathak Page 30

Page 31: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

printf("\n\tQueue is Underflow.");return 0;

}else{

bool b_flag = false;int i_count;for(i_count = i_front; i_count <= i_rear; ++i_count){

if((circular_queue[i_count] == i_item)&&(!b_flag)){

circular_queue[i_count] = circular_queue[i_count+1];

b_flag = true;}else if(b_flag){

circular_queue[i_count] = circular_queue[i_count+1];

}}i_rear = (i_count - 2);

//Substracting: 2 = (additional loop increment + 1 deleted item)

return 1;}

}

int disp_item(void){

if((i_front == -1) || (i_front == i_rear + 1)){

printf("\n\tQueue is Empty.");return 0;

}else{

printf("\n\tElements of Queue are:");int i_count;for(i_count = i_front; i_count <= i_rear; ++i_count){

printf("\n\tIndex: %d | Item: %d", i_count, circular_queue[i_count]);

}return 1;

}}

Saket Kr. Pathak Page 31

Page 32: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int process_stack(int i_choice){

switch(i_choice){

case 1:{

printf("\n\tTo Push Item into Queue.");int i_item = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);int i_check = push_item(i_item);if(i_check == 1)

return 1;else

return 0;break;

}case 2:{

printf("\n\tTo Pop Item from Queue.");int i_item = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);int i_check = pop_item(i_item);if(i_check == 1)

return 1;else

return 0;break;

}case 3:{

printf("\n\tTo Display Item of Queue.");int i_check = disp_item();if(i_check == 1)

return 1;else

return 0;break;

}case 4:{

printf("\n\tTo Exit.");return 0;break;

}

Saket Kr. Pathak Page 32

Page 33: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

default:{

return 0;break;

}}

}

int set_Argument(void){

printf("\n\t--------------------------------------------------\n");

printf("\n\t\t\t Array - Container.\n");printf("\n\

t--------------------------------------------------\n\n");int i_check = select_choice();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else

;

return i_check;}

int main(){

int i_check = set_Argument();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else {

int i_state;do{

i_state = process_stack(i_check);i_check = set_Argument();if(i_check == 4) //Check for Exit.

i_state = 0;}while(i_state == 1);

}

printf("\n\n\n");getch();return 0;

}

Saket Kr. Pathak Page 33

Page 34: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

Linked List:

Code – Snippet: (Singly Linked List)

#include <stdio.h>#include <stdbool.h>

#define LINKED_LIST_SIZE 1024

int set_argument(void);int select_choice(void);int process_stack(int i_choice);int push_node(int i_item, int i_indx);int disp_node(void);int pop_node(int i_option);

struct node{ int i_val; int i_next_idx;}ll_node[LINKED_LIST_SIZE];

int i_ll_size = 0;

int main(){ int i_check = set_argument();

if(i_check == 0)printf("\n\n\n\tInvalid input.");

else {

int i_state;do{

i_state = process_stack(i_check);i_check = set_argument();if(i_check == 4) //Check for Exit.

i_state = 0;}while(i_state == 1);

}

Saket Kr. Pathak Page 34

Page 35: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

printf("\n\n\n");getch();

return 0;}

int set_argument(void){

printf("\n\t--------------------------------------------------\n");

printf("\n\t\t\t Array - Singly Linked-List.\n");printf("\n\

t--------------------------------------------------\n\n");int i_check = select_choice();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else

;

return i_check;}

int select_choice(void){

{printf("\n\tTo Push Item: \t\t(Press) 1");printf("\n\tTo Pop Item: \t\t(Press) 2");printf("\n\tTo Display Item: \t(Press) 3");printf("\n\tTo Exit: \t\t(Press) 4");

}

int i_choice;printf("\n\n\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

int process_stack(int i_choice){

switch(i_choice){

case 1:{

printf("\n\tTo Push Item into Linked-List.\n");

Saket Kr. Pathak Page 35

Page 36: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int i_item = 0;int i_indx = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);printf("\n\tPlease Enter the index: ");scanf("%d", &i_indx);int i_check = push_node(i_item, i_indx);if(i_check == 1)

return 1;else

return 0;break;

}case 2:{

printf("\n\tTo Pop Item from Queue.");int i_check = del_option();{

if (i_check == 0) printf("\n\n\n\tInvalid input.");

else ; } i_check = pop_node(i_check);

if(i_check == 1)return 1;

elsereturn 0;

break;}case 3:{

printf("\n\tTo Display Item of Queue.");int i_check = disp_node();if(i_check == 1)

return 1;else

return 0;break;

}case 4:{

printf("\n\tTo Exit.");return 0;break;

}default:

Saket Kr. Pathak Page 36

Page 37: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

{return 0;break;

}}

}

int del_option(void){ printf("\n\t\t---------------------------"); {

printf("\n\t\tBy Item: \t\t(Press) 1");printf("\n\t\tBy Reference: \t\t(Press) 2");

}

int i_choice;printf("\n\n\t\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

printf("\n\t\t---------------------------");

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

int pop_node(int i_option){ if (i_option == 1) { int i_del_item; printf("\n\tItem to delete: "); scanf("%d", &i_del_item); int i_count = 0; int i_size = 0; bool b_flag = false; for (i_count = 0; i_count < (LINKED_LIST_SIZE-1), i_size < i_ll_size; ) { if ((ll_node[i_count].i_next_idx != 0)&&(!b_flag)) { if (ll_node[i_count].i_val == i_del_item) { int i_nxt_idx = ll_node[i_count].i_next_idx;

Saket Kr. Pathak Page 37

Page 38: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

ll_node[i_count].i_val = ll_node[i_nxt_idx].i_val; ll_node[i_count].i_next_idx = ll_node[i_nxt_idx].i_next_idx; i_count = i_nxt_idx; i_size++; b_flag = true; } else if (b_flag) { int i_nxt_idx = ll_node[i_count].i_next_idx; ll_node[i_count].i_val = ll_node[i_nxt_idx].i_val; ll_node[i_count].i_next_idx = ll_node[i_nxt_idx].i_next_idx; i_count = i_nxt_idx; i_size++; } else { i_count = ll_node[i_count].i_next_idx; i_size++; } } else break; } } else if (i_option == 2) { int i_del_idx; printf("\n\tIndex to delete: "); scanf("%d", &i_del_idx); int i_count = 0; int i_size = 0; bool b_flag = false; for (i_count = 0; i_count < (LINKED_LIST_SIZE-1), i_size < i_ll_size; ) { if ((ll_node[i_count].i_next_idx != 0)&&(!b_flag)) { if (ll_node[i_count].i_next_idx == i_del_idx) { int i_nxt_idx = ll_node[i_count].i_next_idx; ll_node[i_count].i_val = ll_node[i_nxt_idx].i_val;

Saket Kr. Pathak Page 38

Page 39: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

ll_node[i_count].i_next_idx = ll_node[i_nxt_idx].i_next_idx; i_count = i_nxt_idx; i_size++; b_flag = true; } else if (b_flag) { int i_nxt_idx = ll_node[i_count].i_next_idx; ll_node[i_count].i_val = ll_node[i_nxt_idx].i_val; ll_node[i_count].i_next_idx = ll_node[i_nxt_idx].i_next_idx; i_count = i_nxt_idx; i_size++; } else { i_count = ll_node[i_count].i_next_idx; i_size++; } } else break; } } return 1;}

int push_node(int i_item, int i_indx){ if (i_indx < (LINKED_LIST_SIZE-1)) { ll_node[i_ll_size].i_val = i_item; ll_node[i_ll_size].i_next_idx = i_indx; i_ll_size = i_indx; //For Last Node ll_node[i_ll_size].i_val = 100001; ll_node[i_ll_size].i_next_idx = 0; //------------- return 1; } else

Saket Kr. Pathak Page 39

Page 40: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

return 0;}

int disp_node(void){ int i_count = 0; int i_size = 0; for (i_count = 0; i_count < (LINKED_LIST_SIZE-1), i_size < i_ll_size; ) { if (ll_node[i_count].i_next_idx != 0) { printf("\n\tItem: %d", ll_node[i_count].i_val); printf("\n\tNext Index: %d", ll_node[i_count].i_next_idx); i_count = ll_node[i_count].i_next_idx; i_size++; printf("\n\t************************\n"); } else break; } return 1;}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

Code – Snippet: (Doubly Linked List)

#include <stdio.h>#include <stdbool.h>

#define LINKED_LIST_SIZE 1024

int set_argument(void);int select_choice(void);int process_stack(int i_choice);int push_node(int i_item, int i_indx);int disp_node(void);int pop_node(int i_option);

struct node

Saket Kr. Pathak Page 40

Page 41: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

{ int i_prev_idx; int i_val; int i_next_idx;}ll_node[LINKED_LIST_SIZE];

int i_ll_size = 0;

int main(){ int i_check = set_argument();

if(i_check == 0)printf("\n\n\n\tInvalid input.");

else {

int i_state;do{

i_state = process_stack(i_check);i_check = set_argument();if(i_check == 4) //Check for Exit.

i_state = 0;}while(i_state == 1);

}

printf("\n\n\n");getch();

return 0;}

int set_argument(void){

printf("\n\t--------------------------------------------------\n");

printf("\n\t\t\t Array - Singly Linked-List.\n");printf("\n\

t--------------------------------------------------\n\n");int i_check = select_choice();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else

;

return i_check;}

Saket Kr. Pathak Page 41

Page 42: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int select_choice(void){

{printf("\n\tTo Push Item: \t\t(Press) 1");printf("\n\tTo Pop Item: \t\t(Press) 2");printf("\n\tTo Display Item: \t(Press) 3");printf("\n\tTo Exit: \t\t(Press) 4");

}

int i_choice;printf("\n\n\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

int process_stack(int i_choice){

switch(i_choice){

case 1:{

printf("\n\tTo Push Item into Linked-List.\n");int i_item = 0;int i_indx = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);printf("\n\tPlease Enter the index: ");scanf("%d", &i_indx);int i_check = push_node(i_item, i_indx);if(i_check == 1)

return 1;else

return 0;break;

}case 2:{

printf("\n\tTo Pop Item from Queue.");int i_check = del_option();{

if (i_check == 0) printf("\n\n\n\tInvalid input.");

else

Saket Kr. Pathak Page 42

Page 43: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

; } i_check = pop_node(i_check);

if(i_check == 1)return 1;

elsereturn 0;

break;}case 3:{

printf("\n\tTo Display Item of Queue.");int i_check = disp_node();if(i_check == 1)

return 1;else

return 0;break;

}case 4:{

printf("\n\tTo Exit.");return 0;break;

}default:{

return 0;break;

}}

}

int del_option(void){ printf("\n\t\t---------------------------"); {

printf("\n\t\tBy Item: \t\t(Press) 1");printf("\n\t\tBy Reference: \t\t(Press) 2");

}

int i_choice;printf("\n\n\t\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

printf("\n\t\t---------------------------");

Saket Kr. Pathak Page 43

Page 44: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

int pop_node(int i_option){ if (i_option == 1) { int i_del_item; printf("\n\tItem to delete: "); scanf("%d", &i_del_item); int i_count = 0; int i_size = 0; bool b_flag = false; for (i_count = 0; i_count < (LINKED_LIST_SIZE-1), i_size < i_ll_size; ) { if ((ll_node[i_count].i_next_idx != 0)&&(!b_flag)) { if (ll_node[i_count].i_val == i_del_item) { int i_nxt_idx = ll_node[i_count].i_next_idx; ll_node[i_count].i_prev_idx = ll_node[i_nxt_idx].i_prev_idx; ll_node[i_count].i_val = ll_node[i_nxt_idx].i_val; ll_node[i_count].i_next_idx = ll_node[i_nxt_idx].i_next_idx; i_count = i_nxt_idx; i_size++; b_flag = true; } else if (b_flag) { int i_nxt_idx = ll_node[i_count].i_next_idx; ll_node[i_count].i_prev_idx = ll_node[i_nxt_idx].i_prev_idx; ll_node[i_count].i_val = ll_node[i_nxt_idx].i_val; ll_node[i_count].i_next_idx = ll_node[i_nxt_idx].i_next_idx; i_count = i_nxt_idx; i_size++; }

Saket Kr. Pathak Page 44

Page 45: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

else { i_count = ll_node[i_count].i_next_idx; i_size++; } } else break; } } else if (i_option == 2) { int i_del_idx; printf("\n\tIndex to delete: "); scanf("%d", &i_del_idx); int i_count = 0; int i_size = 0; bool b_flag = false; for (i_count = 0; i_count < (LINKED_LIST_SIZE-1), i_size < i_ll_size; ) { if ((ll_node[i_count].i_next_idx != 0)&&(!b_flag)) { if (ll_node[i_count].i_next_idx == i_del_idx) { int i_nxt_idx = ll_node[i_count].i_next_idx; ll_node[i_count].i_val = ll_node[i_nxt_idx].i_val; ll_node[i_count].i_next_idx = ll_node[i_nxt_idx].i_next_idx; i_count = i_nxt_idx; i_size++; b_flag = true; } else if (b_flag) { int i_nxt_idx = ll_node[i_count].i_next_idx; ll_node[i_count].i_val = ll_node[i_nxt_idx].i_val; ll_node[i_count].i_next_idx = ll_node[i_nxt_idx].i_next_idx; i_count = i_nxt_idx; i_size++; } else

Saket Kr. Pathak Page 45

Page 46: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

{ i_count = ll_node[i_count].i_next_idx; i_size++; } } else break; } } return 1;}

int push_node(int i_item, int i_indx){ if (i_indx < (LINKED_LIST_SIZE-1)) { if (i_ll_size == 0) { ll_node[i_ll_size].i_prev_idx = 0; ll_node[i_ll_size].i_val = i_item; ll_node[i_ll_size].i_next_idx = i_indx; i_ll_size = i_indx; } else { ll_node[i_ll_size].i_prev_idx = ll_node[i_ll_size].i_prev_idx; ll_node[i_ll_size].i_val = i_item; ll_node[i_ll_size].i_next_idx = i_indx; i_ll_size = i_indx; //For Last Node ll_node[i_ll_size].i_prev_idx = i_indx; ll_node[i_ll_size].i_val = 100001; ll_node[i_ll_size].i_next_idx = 0; //------------- } return 1; } else return 0;}

int disp_node(void){

Saket Kr. Pathak Page 46

Page 47: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int i_count = 0; int i_size = 0; for (i_count = 0; i_count < (LINKED_LIST_SIZE-1), i_size < i_ll_size; ) { if (ll_node[i_count].i_next_idx != 0) { printf("\n\tPrev Index: %d", ll_node[i_count].i_prev_idx); printf("\n\tItem: %d", ll_node[i_count].i_val); printf("\n\tNext Index: %d", ll_node[i_count].i_next_idx); i_count = ll_node[i_count].i_next_idx; i_size++; printf("\n\t************************\n"); } else break; } return 1;}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

Saket Kr. Pathak Page 47

Page 48: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

4. WAP in C using dynamic memory allocation of Stack Queue Circular Queue Linked List

Program:

Stack:

Code – Snippet:

#include <stdio.h>#include <stdbool.h>

#define STACK_SIZE 1024

int i_top = -1;int *stack;

int main(){

int i_check = set_Argument();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else {

int i_state;stack = (int*)malloc(sizeof(int) * STACK_SIZE);

do{

i_state = process_stack(i_check);i_check = set_Argument();

Saket Kr. Pathak Page 48

Page 49: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

if(i_check == 4) //Check for Exit.

i_state = 0;}while(i_state == 1);

}

printf("\n\n\n");getch();return 0;

}

int set_Argument(void){

printf("\n\t--------------------------------------------------\n");

printf("\n\t\t\t Array - Container.\n");printf("\n\

t--------------------------------------------------\n\n");int i_check = select_choice();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else

;

return i_check;}

int select_choice(void){

{printf("\n\tTo Push Item: \t\t(Press) 1");printf("\n\tTo Pop Item: \t\t(Press) 2");printf("\n\tTo Display Item: \t(Press) 3");printf("\n\tTo Exit: \t\t(Press) 4");

}

int i_choice;printf("\n\n\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

Saket Kr. Pathak Page 49

Page 50: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int process_stack(int i_choice){

switch(i_choice){

case 1:{

printf("\n\tTo Push Item into Stack.");int i_item = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);int i_check = push_item(i_item);if(i_check == 1)

return 1;else

return 0;break;

}case 2:{

printf("\n\tTo Pop Item from Stack.");int i_item = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);int i_check = pop_item(i_item);if(i_check == 1)

return 1;else

return 0;break;

}case 3:{

printf("\n\tTo Display Item of Stack.");int i_check = disp_item();if(i_check == 1)

return 1;else

return 0;break;

}case 4:{

printf("\n\tTo Exit.");return 0;break;

}default:

Saket Kr. Pathak Page 50

Page 51: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

{return 0;break;

}}

}

int push_item(int i_item){

if(i_top == (STACK_SIZE - 1)){

printf("\n\tStack Overflow.");return 0;

}else{

*(stack + (++i_top)) = i_item;printf("\n\tItem - %d, has successfully pushed into

Stack.", i_item);return 1;

}}

int pop_item(int i_item){

if(i_top == -1){

printf("\n\tStack is Underflow.");return 0;

}else{

bool b_flag = false;int i_count;for(i_count = 0; i_count <= i_top; ++i_count){

if((*(stack + i_count) == i_item)&&(!b_flag)){

*(stack + i_count) = *(stack + (i_count+1));b_flag = true;

}else if(b_flag){

*(stack + i_count) = *(stack + (i_count+1));}

}

Saket Kr. Pathak Page 51

Page 52: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

i_top = (i_count - 2);//Substracting: 2 = (additional loop increment + 1 deleted

item) return 1;

}}

int disp_item(void){

if(i_top == -1){

printf("\n\tStack is Empty.");return 0;

}else{

int i_count;printf("\n\tElements of Stack are:");for(i_count = 0; i_count <= i_top; ++i_count){

printf("\n\tIndex: %d | Item: %d", i_count, *(stack + i_count));

}return 1;

}}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

Queue:

Code – Snippet:

#include <stdio.h>#include <stdbool.h>

#define QUEUE_SIZE 1024

int i_front = -1;int i_rear = -1;int *queue;

int main()

Saket Kr. Pathak Page 52

Page 53: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

{int i_check = set_Argument();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else {

int i_state;queue = (int*)malloc(sizeof(int) * QUEUE_SIZE);

do{

i_state = process_stack(i_check);i_check = set_Argument();if(i_check == 4) //Check for Exit.

i_state = 0;}while(i_state == 1);

}

printf("\n\n\n");getch();return 0;

}

int set_Argument(void){

printf("\n\t--------------------------------------------------\n");

printf("\n\t\t\t Array - Container.\n");printf("\n\

t--------------------------------------------------\n\n");int i_check = select_choice();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else

;

return i_check;}

int select_choice(void){

{printf("\n\tTo Push Item: \t\t(Press) 1");printf("\n\tTo Pop Item: \t\t(Press) 2");printf("\n\tTo Display Item: \t(Press) 3");printf("\n\tTo Exit: \t\t(Press) 4");

Saket Kr. Pathak Page 53

Page 54: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

}

int i_choice;printf("\n\n\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

int push_item(int i_item){

if(i_rear == (QUEUE_SIZE - 1)){

printf("\n\tQueue Overflow.");return 0;

}else{

i_front = 0;*(queue + (++i_rear)) = i_item;printf("\n\tItem - %d, has successfully pushed into

Stack.", i_item);return 1;

}}

int pop_item(int i_item){

if((i_front == -1)||(i_front > i_rear)){

printf("\n\tQueue is Underflow.");return 0;

}else{

bool b_flag = false;int i_count;for(i_count = i_front; i_count <= i_rear; ++i_count){

if((*(queue + i_count) == i_item)&&(!b_flag)){

*(queue + i_count) = *(queue + (i_count+1));b_flag = true;

}

Saket Kr. Pathak Page 54

Page 55: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

else if(b_flag){

*(queue + i_count) = *(queue + (i_count+1));}

}i_rear = (i_count - 2);

//Substracting: 2 = (additional loop increment + 1 deleted item)

return 1;}

}

int disp_item(void){

if(i_front == -1){

printf("\n\tQueue is Empty.");return 0;

}else{

printf("\n\tElements of Queue are:");int i_count;for(i_count = i_front; i_count <= i_rear; ++i_count){

printf("\n\tIndex: %d | Item: %d", i_count, *(queue + i_count));

}return 1;

}}

int process_stack(int i_choice){

switch(i_choice){

case 1:{

printf("\n\tTo Push Item into Queue.");int i_item = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);int i_check = push_item(i_item);if(i_check == 1)

return 1;else

return 0;

Saket Kr. Pathak Page 55

Page 56: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

break;}case 2:{

printf("\n\tTo Pop Item from Queue.");int i_item = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);int i_check = pop_item(i_item);if(i_check == 1)

return 1;else

return 0;break;

}case 3:{

printf("\n\tTo Display Item of Queue.");int i_check = disp_item();if(i_check == 1)

return 1;else

return 0;break;

}case 4:{

printf("\n\tTo Exit.");return 0;break;

}default:{

return 0;break;

}}

}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

Circular Queue:

Code – Snippet:

Saket Kr. Pathak Page 56

Page 57: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

#include <stdio.h>#include <stdbool.h>

#define QUEUE_SIZE 1024

int i_front = -1;int i_rear = -1;int *circular_queue;

int main(){

int i_check = set_Argument();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else {

int i_state;circular_queue = (int*)malloc(sizeof(int) *

QUEUE_SIZE);do{

i_state = process_stack(i_check);i_check = set_Argument();if(i_check == 4) //Check for Exit.

i_state = 0;}while(i_state == 1);

}

printf("\n\n\n");getch();return 0;

}

int set_Argument(void){

printf("\n\t--------------------------------------------------\n");

printf("\n\t\t\t Array - Container.\n");printf("\n\

t--------------------------------------------------\n\n");int i_check = select_choice();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else

;

Saket Kr. Pathak Page 57

Page 58: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

return i_check;}

int select_choice(void){

{printf("\n\tTo Push Item: \t\t(Press) 1");printf("\n\tTo Pop Item: \t\t(Press) 2");printf("\n\tTo Display Item: \t(Press) 3");printf("\n\tTo Exit: \t\t(Press) 4");

}

int i_choice;printf("\n\n\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

int push_item(int i_item){

if(((i_front == 0) && (i_rear == (QUEUE_SIZE - 1))) || (i_front == i_rear + 1))

{printf("\n\tQueue Overflow.");return 0;

}else{

if(i_rear == -1){

i_rear = 0;i_front = 0;

}else if(i_rear == QUEUE_SIZE-1)

i_rear = 0;else

i_rear++;*(circular_queue + i_rear) = i_item;printf("\n\tItem - %d, has successfully pushed into

Stack.", i_item);return 1;

}

Saket Kr. Pathak Page 58

Page 59: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

}

int pop_item(int i_item){

if(i_front == -1){

printf("\n\tQueue is Underflow.");return 0;

}else{

bool b_flag = false;int i_count;for(i_count = i_front; i_count <= i_rear; ++i_count){

if((*(circular_queue + i_count) == i_item)&&(!b_flag))

{*(circular_queue + i_count) =

*(circular_queue + (i_count+1));b_flag = true;

}else if(b_flag){

*(circular_queue + i_count) = *(circular_queue + (i_count+1));

}}i_rear = (i_count - 2);

//Substracting: 2 = (additional loop increment + 1 deleted item)

return 1;}

}

int disp_item(void){

if((i_front == -1) || (i_front == i_rear + 1)){

printf("\n\tQueue is Empty.");return 0;

}else{

printf("\n\tElements of Queue are:");int i_count;for(i_count = i_front; i_count <= i_rear; ++i_count)

Saket Kr. Pathak Page 59

Page 60: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

{printf("\n\tIndex: %d | Item: %d", i_count,

*(circular_queue + i_count));}return 1;

}}

int process_stack(int i_choice){

switch(i_choice){

case 1:{

printf("\n\tTo Push Item into Queue.");int i_item = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);int i_check = push_item(i_item);if(i_check == 1)

return 1;else

return 0;break;

}case 2:{

printf("\n\tTo Pop Item from Queue.");int i_item = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);int i_check = pop_item(i_item);if(i_check == 1)

return 1;else

return 0;break;

}case 3:{

printf("\n\tTo Display Item of Queue.");int i_check = disp_item();if(i_check == 1)

return 1;else

return 0;break;

Saket Kr. Pathak Page 60

Page 61: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

}case 4:{

printf("\n\tTo Exit.");return 0;break;

}default:{

return 0;break;

}}

}~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~

~~~Linked List:

Code – Snippet: (Singly Linked List)

#include <stdio.h>#include <stdbool.h>

#define LINKED_LIST_SIZE 1024

int set_argument(void);int select_choice(void);int process_stack(int i_choice);int push_node(int i_item, int i_indx);int disp_node(void);int pop_node(int i_option);

struct node{ int i_val; int i_next_idx;}*ll_node;

int i_ll_size = 0;

int main(){ int i_check = set_argument();

if(i_check == 0)printf("\n\n\n\tInvalid input.");

else {

Saket Kr. Pathak Page 61

Page 62: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int i_state;ll_node = (struct node*)malloc(sizeof(int) *

LINKED_LIST_SIZE);do{

i_state = process_stack(i_check);i_check = set_argument();if(i_check == 4) //Check for Exit.

i_state = 0;}while(i_state == 1);

}

printf("\n\n\n");getch();

return 0;}

int set_argument(void){

printf("\n\t--------------------------------------------------\n");

printf("\n\t\t\t Array - Singly Linked-List.\n");printf("\n\

t--------------------------------------------------\n\n");int i_check = select_choice();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else

;

return i_check;}

int select_choice(void){

{printf("\n\tTo Push Item: \t\t(Press) 1");printf("\n\tTo Pop Item: \t\t(Press) 2");printf("\n\tTo Display Item: \t(Press) 3");printf("\n\tTo Exit: \t\t(Press) 4");

}

int i_choice;printf("\n\n\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

Saket Kr. Pathak Page 62

Page 63: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

int process_stack(int i_choice){

switch(i_choice){

case 1:{

printf("\n\tTo Push Item into Linked-List.\n");int i_item = 0;int i_indx = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);printf("\n\tPlease Enter the index: ");scanf("%d", &i_indx);int i_check = push_node(i_item, i_indx);if(i_check == 1)

return 1;else

return 0;break;

}case 2:{

printf("\n\tTo Pop Item from Queue.");int i_check = del_option();{

if (i_check == 0) printf("\n\n\n\tInvalid input.");

else ; } i_check = pop_node(i_check);

if(i_check == 1)return 1;

elsereturn 0;

break;}case 3:{

printf("\n\tTo Display Item of Queue.");int i_check = disp_node();

Saket Kr. Pathak Page 63

Page 64: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

if(i_check == 1)return 1;

elsereturn 0;

break;}case 4:{

printf("\n\tTo Exit.");return 0;break;

}default:{

return 0;break;

}}

}

int del_option(void){ printf("\n\t\t---------------------------"); {

printf("\n\t\tBy Item: \t\t(Press) 1");printf("\n\t\tBy Reference: \t\t(Press) 2");

}

int i_choice;printf("\n\n\t\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

printf("\n\t\t---------------------------");

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

int pop_node(int i_option){ if (i_option == 1) { int i_del_item; printf("\n\tItem to delete: "); scanf("%d", &i_del_item);

Saket Kr. Pathak Page 64

Page 65: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int i_count = 0; int i_size = 0; bool b_flag = false; for (i_count = 0; i_count < (LINKED_LIST_SIZE-1), i_size < i_ll_size; ) { if (((*(ll_node + i_count)).i_next_idx != 0)&&(!b_flag)) { if ((*(ll_node + i_count)).i_val == i_del_item) { int i_nxt_idx = (*(ll_node + i_count)).i_next_idx; (*(ll_node + i_count)).i_val = (*(ll_node + i_nxt_idx)).i_val; (*(ll_node + i_count)).i_next_idx = (*(ll_node + i_nxt_idx)).i_next_idx; i_count = i_nxt_idx; i_size++; b_flag = true; } else if (b_flag) { int i_nxt_idx = (*(ll_node + i_count)).i_next_idx; (*(ll_node + i_count)).i_val = (*(ll_node + i_nxt_idx)).i_val; (*(ll_node + i_count)).i_next_idx = (*(ll_node + i_nxt_idx)).i_next_idx; i_count = i_nxt_idx; i_size++; } else { i_count = (*(ll_node + i_count)).i_next_idx; i_size++; } } else break; } } else if (i_option == 2) { int i_del_idx; printf("\n\tIndex to delete: ");

Saket Kr. Pathak Page 65

Page 66: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

scanf("%d", &i_del_idx); int i_count = 0; int i_size = 0; bool b_flag = false; for (i_count = 0; i_count < (LINKED_LIST_SIZE-1), i_size < i_ll_size; ) { if (((*(ll_node + i_count)).i_next_idx != 0)&&(!b_flag)) { if ((*(ll_node + i_count)).i_next_idx == i_del_idx) { int i_nxt_idx = (*(ll_node + i_count)).i_next_idx; (*(ll_node + i_count)).i_val = (*(ll_node + i_nxt_idx)).i_val; (*(ll_node + i_count)).i_next_idx = (*(ll_node + i_nxt_idx)).i_next_idx; i_count = i_nxt_idx; i_size++; b_flag = true; } else if (b_flag) { int i_nxt_idx = (*(ll_node + i_count)).i_next_idx; (*(ll_node + i_count)).i_val = (*(ll_node + i_nxt_idx)).i_val; (*(ll_node + i_count)).i_next_idx = (*(ll_node + i_nxt_idx)).i_next_idx; i_count = i_nxt_idx; i_size++; } else { i_count = (*(ll_node + i_count)).i_next_idx; i_size++; } } else break; } } return 1;

Saket Kr. Pathak Page 66

Page 67: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

}

int push_node(int i_item, int i_indx){ if (i_indx < (LINKED_LIST_SIZE-1)) { (*(ll_node + i_ll_size)).i_val = i_item; (*(ll_node + i_ll_size)).i_next_idx = i_indx; i_ll_size = i_indx; //For Last Node (*(ll_node + i_ll_size)).i_val = 100001; (*(ll_node + i_ll_size)).i_next_idx = 0; //------------- return 1; } else return 0;}

int disp_node(void){ int i_count = 0; int i_size = 0; for (i_count = 0; i_count < (LINKED_LIST_SIZE-1), i_size < i_ll_size; ) { if ((*(ll_node + i_count)).i_next_idx != 0) { printf("\n\tItem: %d", (*(ll_node + i_count)).i_val); printf("\n\tNext Index: %d", (*(ll_node + i_count)).i_next_idx); i_count = (*(ll_node + i_count)).i_next_idx; i_size++; printf("\n\t************************\n"); } else break; } return 1;}

Saket Kr. Pathak Page 67

Page 68: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

Code – Snippet: (Doubly Linked List)

#include <stdio.h>#include <stdbool.h>

#define LINKED_LIST_SIZE 1024

int set_argument(void);int select_choice(void);int process_stack(int i_choice);int push_node(int i_item, int i_indx);int disp_node(void);int pop_node(int i_option);

struct node{ int i_prev_idx; int i_val; int i_next_idx;}*ll_node;

int i_ll_size = 0;

int main(){ int i_check = set_argument();

if(i_check == 0)printf("\n\n\n\tInvalid input.");

else {

int i_state;ll_node = (struct node*)malloc(sizeof(int) *

LINKED_LIST_SIZE);do{

i_state = process_stack(i_check);i_check = set_argument();if(i_check == 4) //Check for Exit.

i_state = 0;}while(i_state == 1);

}

Saket Kr. Pathak Page 68

Page 69: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

printf("\n\n\n");getch();

return 0;}

int set_argument(void){

printf("\n\t--------------------------------------------------\n");

printf("\n\t\t\t Array - Singly Linked-List.\n");printf("\n\

t--------------------------------------------------\n\n");int i_check = select_choice();if(i_check == 0)

printf("\n\n\n\tInvalid input.");else

;

return i_check;}

int select_choice(void){

{printf("\n\tTo Push Item: \t\t(Press) 1");printf("\n\tTo Pop Item: \t\t(Press) 2");printf("\n\tTo Display Item: \t(Press) 3");printf("\n\tTo Exit: \t\t(Press) 4");

}

int i_choice;printf("\n\n\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

int process_stack(int i_choice){

switch(i_choice){

case 1:{

printf("\n\tTo Push Item into Linked-List.\n");

Saket Kr. Pathak Page 69

Page 70: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int i_item = 0;int i_indx = 0;printf("\n\tPlease Enter the item: ");scanf("%d", &i_item);printf("\n\tPlease Enter the index: ");scanf("%d", &i_indx);int i_check = push_node(i_item, i_indx);if(i_check == 1)

return 1;else

return 0;break;

}case 2:{

printf("\n\tTo Pop Item from Queue.");int i_check = del_option();{

if (i_check == 0) printf("\n\n\n\tInvalid input.");

else ; } i_check = pop_node(i_check);

if(i_check == 1)return 1;

elsereturn 0;

break;}case 3:{

printf("\n\tTo Display Item of Queue.");int i_check = disp_node();if(i_check == 1)

return 1;else

return 0;break;

}case 4:{

printf("\n\tTo Exit.");return 0;break;

}default:

Saket Kr. Pathak Page 70

Page 71: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

{return 0;break;

}}

}

int del_option(void){ printf("\n\t\t---------------------------"); {

printf("\n\t\tBy Item: \t\t(Press) 1");printf("\n\t\tBy Reference: \t\t(Press) 2");

}

int i_choice;printf("\n\n\t\tPlease Enter Your Choice: ");scanf("%d", &i_choice);

printf("\n\t\t---------------------------");

if((i_choice > 0) && (i_choice < 5))return i_choice;

elsereturn 0;

}

int pop_node(int i_option){ if (i_option == 1) { int i_del_item; printf("\n\tItem to delete: "); scanf("%d", &i_del_item); int i_count = 0; int i_size = 0; bool b_flag = false; for (i_count = 0; i_count < (LINKED_LIST_SIZE-1), i_size < i_ll_size; ) { if (((*(ll_node + i_count)).i_next_idx != 0)&&(!b_flag)) { if ((*(ll_node + i_count)).i_val == i_del_item) {

Saket Kr. Pathak Page 71

Page 72: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int i_nxt_idx = (*(ll_node + i_count)).i_next_idx; (*(ll_node + i_count)).i_prev_idx = (*(ll_node + i_nxt_idx)).i_prev_idx; (*(ll_node + i_count)).i_val = (*(ll_node + i_nxt_idx)).i_val; (*(ll_node + i_count)).i_next_idx = (*(ll_node + i_nxt_idx)).i_next_idx; i_count = i_nxt_idx; i_size++; b_flag = true; } else if (b_flag) { int i_nxt_idx = (*(ll_node + i_count)).i_next_idx; (*(ll_node + i_count)).i_prev_idx = (*(ll_node + i_nxt_idx)).i_prev_idx; (*(ll_node + i_count)).i_val = (*(ll_node + i_nxt_idx)).i_val; (*(ll_node + i_count)).i_next_idx = (*(ll_node + i_nxt_idx)).i_next_idx; i_count = i_nxt_idx; i_size++; } else { i_count = (*(ll_node + i_count)).i_next_idx; i_size++; } } else break; } } else if (i_option == 2) { int i_del_idx; printf("\n\tIndex to delete: "); scanf("%d", &i_del_idx); int i_count = 0; int i_size = 0; bool b_flag = false; for (i_count = 0; i_count < (LINKED_LIST_SIZE-1), i_size < i_ll_size; ) {

Saket Kr. Pathak Page 72

Page 73: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

if (((*(ll_node + i_count)).i_next_idx != 0)&&(!b_flag)) { if ((*(ll_node + i_count)).i_next_idx == i_del_idx) { int i_nxt_idx = (*(ll_node + i_count)).i_next_idx; (*(ll_node + i_count)).i_val = (*(ll_node + i_nxt_idx)).i_val; (*(ll_node + i_count)).i_next_idx = (*(ll_node + i_nxt_idx)).i_next_idx; i_count = i_nxt_idx; i_size++; b_flag = true; } else if (b_flag) { int i_nxt_idx = (*(ll_node + i_count)).i_next_idx; (*(ll_node + i_count)).i_val = (*(ll_node + i_nxt_idx)).i_val; (*(ll_node + i_count)).i_next_idx = (*(ll_node + i_nxt_idx)).i_next_idx; i_count = i_nxt_idx; i_size++; } else { i_count = (*(ll_node + i_count)).i_next_idx; i_size++; } } else break; } } return 1;}

int push_node(int i_item, int i_indx){ if (i_indx < (LINKED_LIST_SIZE-1)) { if (i_ll_size == 0) {

Saket Kr. Pathak Page 73

Page 74: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

(*(ll_node + i_ll_size)).i_prev_idx = 0; (*(ll_node + i_ll_size)).i_val = i_item; (*(ll_node + i_ll_size)).i_next_idx = i_indx; i_ll_size = i_indx; } else { (*(ll_node + i_ll_size)).i_prev_idx = (*(ll_node + i_ll_size)).i_prev_idx; (*(ll_node + i_ll_size)).i_val = i_item; (*(ll_node + i_ll_size)).i_next_idx = i_indx; i_ll_size = i_indx; //For Last Node (*(ll_node + i_ll_size)).i_prev_idx = i_indx; (*(ll_node + i_ll_size)).i_val = 100001; (*(ll_node + i_ll_size)).i_next_idx = 0; //------------- } return 1; } else return 0;}

int disp_node(void){ int i_count = 0; int i_size = 0; for (i_count = 0; i_count < (LINKED_LIST_SIZE-1), i_size < i_ll_size; ) { if (ll_node[i_count].i_next_idx != 0) { printf("\n\tPrev Index: %d", (*(ll_node + i_count)).i_prev_idx); printf("\n\tItem: %d", (*(ll_node + i_count)).i_val); printf("\n\tNext Index: %d", (*(ll_node + i_count)).i_next_idx); i_count = (*(ll_node + i_count)).i_next_idx; i_size++; printf("\n\t************************\n"); } else break;

Saket Kr. Pathak Page 74

Page 75: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

} return 1;}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

5. WAP in C for implementation of Binary Tree.

Program:

Code – Snippet:

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>

struct node{

int i_data;struct node *right_node;struct node *left_node;

};

struct node* get_tree_element(int i_no_elem);struct node* crea_tree(struct node *root, int i_data);bool insert_node(struct node **root, struct node *nw_node);void disp_tree(struct node *root);struct node* delete_node(struct node *current_node, int i_data);

int main(){ printf("\n\n\n"); printf("\t\t\tWAP for implementation of Binary Tree.."); printf("\n\n\n");

Saket Kr. Pathak Page 75

Page 76: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

int i_tree_elem; printf("Enter the total number of elements: "); scanf("%d", &i_tree_elem); struct node *root = (struct node*)malloc(sizeof(struct node)); root = get_tree_element(i_tree_elem); printf("\n\n\n"); printf("\tWAP of Selection sort.\n"); disp_tree(root); printf("\n\n\n"); system("pause"); return 0;}

struct node* get_tree_element(int i_no_elem){ struct node *root = (struct node*)malloc(sizeof(struct node)); root = NULL; int i_count; for (i_count = 0; i_count < i_no_elem; ++i_count) { int i_temp; printf("\n\tEnter Element:%d: ", i_count); scanf("%d", &i_temp); root = crea_tree(root, i_temp); } return root;}

struct node* crea_tree(struct node *root, int i_data){

struct node *current_node = (struct node*) malloc(sizeof(struct node));

current_node->i_data = i_data;current_node->left_node = current_node->right_node = NULL;

insert_node(&root, current_node);

return root;

Saket Kr. Pathak Page 76

Page 77: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

}

bool insert_node(struct node **root, struct node *nw_node){

//Check for Null Root-Nodeif(!(*root)){

*root = nw_node;return true;

}else{

//If ITEM is less that the ITEM in Root Node //Traverse the node in LEFT - SIDE.if(nw_node->i_data < (*root)->i_data)

insert_node(&(*root)->left_node, nw_node);//If ITEM is greater that the ITEM in Root Node //Traverse the node in RIGHT - SIDE.else if(nw_node->i_data > (*root)->i_data)

insert_node(&(*root)->right_node, nw_node);

return false;}

}

void disp_tree(struct node *root){

//Check for NULL in LEFT - Nodeif(root->left_node)

disp_tree(root->left_node);

printf("\nNode- Left: %d \t Right: %d \t Item: %d\n", root->left_node, root->right_node, root->i_data);

//Check for NULL in RIGHT - Nodeif(root->right_node)

disp_tree(root->right_node);}

struct node* delete_node(struct node *current_node, int i_data){ struct node *parent_node = (struct node*)malloc(sizeof(struct node*)); parent_node = NULL; struct node *child_node = (struct node*)malloc(sizeof(struct node*)); child_node = NULL;

Saket Kr. Pathak Page 77

Page 78: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

struct node *temp_node = (struct node*)malloc(sizeof(struct node*)); temp_node = NULL; struct node *del_node = (struct node*)malloc(sizeof(struct node*)); del_node = NULL; while (current_node != NULL) { if (current_node->i_data > i_data) { parent_node = current_node; current_node = current_node->left_node; } else if (current_node->i_data < i_data) { parent_node = current_node; current_node = current_node->right_node; } else if (i_data == current_node->i_data) { del_node = current_node; //Node to delete is Leaf-Node if ((del_node->left_node == NULL) && (del_node->right_node == NULL)) { //If the node to delete is on the left-side if (parent_node->left_node == del_node) { printf("\n\tNode deleting with value (%d), left of the parent.", del_node->i_data); parent_node->left_node = NULL; free(del_node); break; } //If the node to delete is on the right-side else if (parent_node->right_node == del_node) { printf("\n\tNode deleting with value (%d), right of the parent.", del_node->i_data); parent_node->right_node = NULL; free(del_node); break; } } //Node to delete has one child

Saket Kr. Pathak Page 78

Page 79: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

else if ((del_node->left_node == NULL) || (del_node->right_node == NULL)) { //If the node to delete is on the left-side if (parent_node->left_node == del_node) { if (del_node->left_node != NULL) { printf("\n\tNode deleting with value (%d), left of the parent.", del_node->i_data); parent_node->left_node = del_node->left_node; free(del_node); break; } else if (del_node->right_node != NULL) { printf("\n\tNode deleting with value (%d), left of the parent.", del_node->i_data); parent_node->left_node = del_node->right_node; free(del_node); break; } } else if (parent_node->right_node == del_node) { if (del_node->left_node != NULL) { printf("\n\tNode deleting with value (%d), right of the parent.", del_node->i_data); parent_node->right_node = del_node->left_node; free(del_node); } else if (del_node->right_node != NULL) { printf("\n\tNode deleting with value (%d), right of the parent.", del_node->i_data); parent_node->right_node = del_node->right_node; free(del_node); } } } //Node to delete has two child

Saket Kr. Pathak Page 79

Page 80: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

else if ((del_node->left_node != NULL) && (del_node->right_node != NULL)) {

printf("\n\tNode to delete has two children\n");

temp_node = del_node; //If the node to delete is Root if (parent_node == NULL)

{ child_node = del_node-

>right_node; if (child_node->left_node ==

NULL) {

child_node->left_node = del_node->left_node;

free(del_node); break;

} else

{ while (child_node-

>left_node != NULL) {

parent_node = child_node;

child_node = parent_node->left_node;

} temp_node->i_data =

child_node->i_data; parent_node->left_node =

child_node->right_node; del_node = child_node; free(del_node); break;

} }

//If the node to delete is on the Left

else if (parent_node->left_node == del_node) {

child_node = del_node->right_node;

if (child_node->left_node == NULL)

Saket Kr. Pathak Page 80

Page 81: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

{ parent_node->left_node =

child_node; child_node->left_node =

del_node->left_node; free(del_node); break;

} else

{ while (child_node-

>left_node != NULL) {

parent_node = child_node;

child_node = parent_node->left_node;

} temp_node->i_data =

child_node->i_data; parent_node->left_node =

child_node->right_node; del_node = child_node; free(del_node); break;

} }

//If the node to delete is on the Right

else if (parent_node->right_node == del_node) {

child_node = del_node->right_node;

if (child_node->left_node == NULL) {

parent_node->right_node = child_node;

child_node->left_node = del_node->left_node;

free(del_node); break;

} else

{while (child_node->left_node != NULL)

Saket Kr. Pathak Page 81

Page 82: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

{parent_node = child_node;child_node = parent_node-

>left_node;}temp_node->i_data = child_node->i_data;parent_node->left_node = child_node-

>right_node;del_node = child_node;free(del_node);break;}

} } } }

return current_node;}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

Saket Kr. Pathak Page 82

Page 83: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

6. WAP in C for Tree Traversal Pre-Order In-Order Post-Order

Program:

Code – Snippet:

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>

struct node{

int i_data;struct node *right_node;struct node *left_node;

};

struct node* get_tree_element(int i_no_elem);struct node* crea_tree(struct node *root, int i_data);bool insert_node(struct node **root, struct node *nw_node);int disp_menu(void);void disp_tree(struct node *root);void traverse_tree(int i_choice, struct node* root);

Saket Kr. Pathak Page 83

Page 84: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

void inorder(struct node *tree_node);void preorder(struct node *tree_node);void postorder(struct node *tree_node);

int main(){ printf("\n\n\n"); printf("\t\t\tWAP for implementation of Binary Tree.."); printf("\n\n\n"); int i_tree_elem; printf("Enter the total number of elements: "); scanf("%d", &i_tree_elem); struct node *root = (struct node*)malloc(sizeof(struct node)); root = get_tree_element(i_tree_elem); printf("\n\n\n"); printf("\tWAP of Selection sort.\n"); disp_tree(root); int i_choice = disp_menu(); traverse_tree(i_choice, root); printf("\n\n\n"); system("pause"); return 0;}

struct node* get_tree_element(int i_no_elem){ struct node *root = (struct node*)malloc(sizeof(struct node)); root = NULL; int i_count; for (i_count = 0; i_count < i_no_elem; ++i_count) { int i_temp; printf("\n\tEnter Element:%d: ", i_count); scanf("%d", &i_temp); root = crea_tree(root, i_temp); } return root;

Saket Kr. Pathak Page 84

Page 85: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

}

struct node* crea_tree(struct node *root, int i_data){

struct node *current_node = (struct node*) malloc(sizeof(struct node));

current_node->i_data = i_data;current_node->left_node = current_node->right_node = NULL;

insert_node(&root, current_node);

return root;}

bool insert_node(struct node **root, struct node *nw_node){

//Check for Null Root-Nodeif(!(*root)){

*root = nw_node;return true;

}else{

//If ITEM is less that the ITEM in Root Node //Traverse the node in LEFT - SIDE.if(nw_node->i_data < (*root)->i_data)

insert_node(&(*root)->left_node, nw_node);//If ITEM is greater that the ITEM in Root Node //Traverse the node in RIGHT - SIDE.else if(nw_node->i_data > (*root)->i_data)

insert_node(&(*root)->right_node, nw_node);

return false;}

}

void disp_tree(struct node *root){

//Check for NULL in LEFT - Nodeif(root->left_node)

disp_tree(root->left_node);

printf("\nNode- Left: %d \t Right: %d \t Item: %d\n", root->left_node, root->right_node, root->i_data);

Saket Kr. Pathak Page 85

Page 86: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

//Check for NULL in RIGHT - Nodeif(root->right_node)

disp_tree(root->right_node);}

int disp_menu(void){ printf("\n\n\n"); printf("\tTree Traversal: In-Order - 1\n"); printf("\tTree Traversal: Post-Order - 2\n"); printf("\tTree Traversal: Pre-Order - 3\n"); int i_choice; printf("\n\tPlease Enter your choice: "); scanf("%d", &i_choice); return i_choice;}

void traverse_tree(int i_choice, struct node* root){ switch(i_choice) { case 1: inorder(root); break; case 2: postorder(root); break; case 3: preorder(root); break; }}

void inorder(struct node *tree_node){ if (tree_node!=NULL) { inorder(tree_node->left_node); printf("\nData :%d",tree_node->i_data); inorder(tree_node->right_node); }} void preorder(struct node *tree_node)

Saket Kr. Pathak Page 86

Page 87: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

{ if (tree_node!=NULL) { printf("\nData :%d",tree_node->i_data); preorder(tree_node->left_node); preorder(tree_node->right_node); }}

void postorder(struct node *tree_node){ if (tree_node!=NULL) { postorder(tree_node->left_node); postorder(tree_node->right_node); printf("\nData :%d",tree_node->i_data); }}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

7. WAP in C for Graph Traversal Breadth First Search Depth First Search

Program:

Breadth First Search:

Algorithm –

[1]Enqueue the root node.[2]Dequeue a node and examine it

a. If the element sought is found in this node, quit the search and return a result.

b. Otherwise enqueue any successors (the direct child nodes) that have not yet been discovered.

[3]If the queue is empty, every node on the graph has been examined – quit the search and return "not found".

[4]If the queue is not empty, repeat from Step 2

Time Complexity –

Saket Kr. Pathak Page 87

Page 88: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

The total time for initializing is O (n) and the total time for the queuing operations is O (n) because each node is put on the queue exactly once. The total time in the main loop is O (e) because we look at each edge at most twice, once from each direction. This gives a time complexity of O (n + e).

Code – Snippet:

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>

int **i_adjacency_matrix;int *i_nodes_visit;int *i_bfs_path;int i_no_nodes;int flag, n_flag = -1;

bool get_graph_input(void);bool initialize_nodes(void);void breadth_first_search(void);void check_node(int);

int main(){ printf("\n\n\n"); printf("\t\t\tWAP for Graph Traversal (Depth First Search)."); printf("\n\n\n"); bool b_check; b_check = get_graph_input(); if (b_check) b_check = initialize_nodes(); printf("\n\n\n"); printf("Depth First Path within the given graph:\n"); breadth_first_search(); printf("\n\n\n"); system("pause"); return 0;}

bool get_graph_input(void){

Saket Kr. Pathak Page 88

Page 89: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

printf("Enter Number of Nodes: "); scanf("%d", &i_no_nodes); i_adjacency_matrix = malloc(sizeof(int) * i_no_nodes); i_nodes_visit = malloc(sizeof(int) * i_no_nodes); i_bfs_path = malloc(sizeof(int) * i_no_nodes); int i_temp = 0; int i_count, j_count; for (i_count = 0; i_count < i_no_nodes; ++i_count) { *(i_adjacency_matrix + i_count) = (int*)malloc(sizeof(int) * i_no_nodes); for (j_count = 0; j_count < i_no_nodes; ++j_count) { printf("\nConection of node %d to node %d is: ", i_count, j_count); scanf("%d", &i_temp); if ((i_temp == 1)||(i_temp == 0)) i_adjacency_matrix[i_count][j_count] = i_temp; else { printf("Input is invalid."); return false; } } } printf("\n\n\nAdjacency Matrix, so formed:"); for (i_count = 0; i_count < i_no_nodes; ++i_count) { printf("\n"); for (j_count = 0; j_count < i_no_nodes; ++j_count) printf("\t%d", i_adjacency_matrix[i_count][j_count]); } return true;}

bool initialize_nodes(void){ int i_count; for (i_count = 0; i_count < i_no_nodes; ++i_count) i_nodes_visit[i_count] = 0; return true;

Saket Kr. Pathak Page 89

Page 90: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

}

void breadth_first_search(void){ int i_count; int i_start_node; printf("\n\tPlease Enter Starting Node: "); scanf("%d", &i_start_node); check_node(i_start_node); for (i_count = 1; i_count <= i_no_nodes; ++i_count) if (i_nodes_visit[i_count]) printf("%d\t",i_count); else printf("\n Bfs is not possible");}

void check_node(int i_start_node){ int i_count; for (i_count = 0; i_count <= i_no_nodes; ++i_count) if ((i_adjacency_matrix[i_start_node][i_count]) && (!i_nodes_visit[i_count])) i_bfs_path[++n_flag] = i_count; if (flag <= n_flag) { i_nodes_visit[i_bfs_path[flag]] = 1; check_node(i_bfs_path[flag++]); }

return;}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

Depth First Search:

Algorithm –

[1]If the initial state is a goal state, quit and return success.

Saket Kr. Pathak Page 90

Page 91: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

[2]Otherwise, loop until success or failure is signaled. Generate a state, say E, and let it be the successor of the

initial state. If there is no successor, signal failure. Call Depth-First Search with E as the initial state. If success is returned, signal success. Otherwise continue

in this loop.

Time Complexity –

The time complexity is O (E + V).

Code – Snippet:

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>

#define MAX_NUM_NODES 1024

int **i_adjacency_matrix;int *i_nodes_visit;int i_no_nodes;

bool get_graph_input(void);bool initialize_nodes(void);void depth_first_search(void);void check_node(int);

int main(){ printf("\n\n\n"); printf("\t\t\tWAP for Graph Traversal (Depth First Search)."); printf("\n\n\n"); bool b_check; b_check = get_graph_input(); if (b_check) b_check = initialize_nodes(); printf("\n\n\n"); printf("Depth First Path within the given graph:\n"); depth_first_search(); printf("\n\n\n"); system("pause");

Saket Kr. Pathak Page 91

Page 92: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

return 0;}

bool get_graph_input(void){ printf("Enter Number of Nodes: "); scanf("%d", &i_no_nodes); i_adjacency_matrix = malloc(sizeof(int) * i_no_nodes); i_nodes_visit = malloc(sizeof(int) * i_no_nodes); int i_temp = 0; int i_count, j_count; for (i_count = 0; i_count < i_no_nodes; ++i_count) { *(i_adjacency_matrix + i_count) = (int*)malloc(sizeof(int) * i_no_nodes); for (j_count = 0; j_count < i_no_nodes; ++j_count) { printf("\nConection of node %d to node %d is: ", i_count, j_count); scanf("%d", &i_temp); if ((i_temp == 1)||(i_temp == 0)) i_adjacency_matrix[i_count][j_count] = i_temp; else { printf("Input is invalid."); return false; } } } printf("\n\n\nAdjacency Matrix, so formed:"); for (i_count = 0; i_count < i_no_nodes; ++i_count) { printf("\n"); for (j_count = 0; j_count < i_no_nodes; ++j_count) printf("\t%d", i_adjacency_matrix[i_count][j_count]); } return true;}

bool initialize_nodes(void){ int i_count;

Saket Kr. Pathak Page 92

Page 93: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

for (i_count = 0; i_count < i_no_nodes; ++i_count) i_nodes_visit[i_count] = 0; return true;}

void depth_first_search(void){ int i_count; printf("\n\t"); for (i_count = 0; i_count < i_no_nodes; ++i_count) if(i_nodes_visit[i_count] == 0) check_node(i_count);}

void check_node(int i_node){

int i_count;

printf("Node(%d)\t", i_node);i_nodes_visit[i_node] = 1;

for (i_count = 0; i_count < i_no_nodes; ++i_count) if (i_nodes_visit[i_count] == 0) check_node(i_count);

return;}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

Saket Kr. Pathak Page 93

Page 94: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

8. WAP in C for Minimum Cost Spanning Tree

Program:

Algorithm (Prim’s) –

[1]create a tree containing a single vertex, chosen arbitrarily from the graph

[2]create a set containing all the edges in the graph[3]loop until every edge in the set connects two vertices in the tree

remove from the set an edge with minimum weight that connects a vertex in the tree with a vertex not in the tree

add that edge to the tree

Time Complexity –O (E * log (V)) where E is the number of edges and V is the

number of vertices.

Code – Snippet:

#include <stdio.h>

Saket Kr. Pathak Page 94

Page 95: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

#include <stdlib.h>#include <stdbool.h>

#define MIN_COST 3000

int **i_adjacency_matrix;int *i_nodes_visit;int i_no_nodes;

bool get_tree_input(void);int calc_cost_prims_algo(void);

int main(){ printf("\n\n\n"); printf("\t\t\tWAP for Minimum Cost Spanning Tree (Prim's algorithm)."); printf("\n\n\n"); bool b_check; b_check = get_tree_input(); int i_min_cost_spanning_tree = calc_cost_prims_algo(); printf("\n Minimun cost = %d", i_min_cost_spanning_tree); printf("\n\n\n"); system("pause"); return 0;}

bool get_tree_input(void){ printf("Enter Number of Nodes: "); scanf("%d", &i_no_nodes); i_adjacency_matrix = malloc(sizeof(int) * i_no_nodes); i_nodes_visit = malloc(sizeof(int) * i_no_nodes); int i_temp = 0; int i_count, j_count; for (i_count = 0; i_count < i_no_nodes; ++i_count) { *(i_adjacency_matrix + i_count) = (int*)malloc(sizeof(int) * i_no_nodes); for (j_count = 0; j_count < i_no_nodes; ++j_count) {

Saket Kr. Pathak Page 95

Page 96: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

printf("\nCost of node %d to node %d is: ", i_count, j_count); scanf("%d", &i_temp); if ((i_temp != 0)) i_adjacency_matrix[i_count][j_count] = i_temp; else i_adjacency_matrix[i_count][j_count] = MIN_COST; } } printf("\n\n\nAdjacency Matrix, so formed:"); for (i_count = 0; i_count < i_no_nodes; ++i_count) { printf("\n"); for (j_count = 0; j_count < i_no_nodes; ++j_count) printf("\t%d", i_adjacency_matrix[i_count][j_count]); } return true;}

int calc_cost_prims_algo(void){ int i_min_cost, i_total_cost; int i_count, j_count; int i_node_1, i_node_2; i_nodes_visit[0] = 1; int i_new_node = 0; while (i_new_node < i_no_nodes) { for (i_count = 0, i_min_cost = MIN_COST; i_count <= i_no_nodes; ++i_count) for (j_count = 0; j_count <= i_no_nodes; ++j_count) if ((i_adjacency_matrix[i_count][j_count] < i_min_cost) && (i_nodes_visit[i_count] != 0)) { i_min_cost = i_adjacency_matrix[i_count][j_count]; i_node_1 = i_count; i_node_2 = j_count; } if ((i_nodes_visit[i_node_1] == 0) || (i_nodes_visit[i_node_2] == 0)) {

Saket Kr. Pathak Page 96

Page 97: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

printf("\n Edge %d:(%d %d) cost:%d",i_new_node++, i_node_1, i_node_2, i_min_cost); i_total_cost += i_min_cost; i_nodes_visit[i_node_2] = 1; } i_adjacency_matrix[i_node_1][i_node_2] = i_adjacency_matrix[i_node_2][i_node_1] = MIN_COST; } return i_total_cost;}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

9. WAP in C for Shortest Path Problem

Program:

Algorithm (Dijkstra’s) –

[1]Assign to every node a tentative distance value: set it to zero for our initial node and to infinity for all other nodes.

[2]Mark all nodes unvisited. Set the initial node as current. Create a set of the unvisited nodes called the unvisited set consisting of all the nodes except the initial node.

[3]For the current node, consider all of its unvisited neighbors and calculate their tentative distances.

[4]When we are done considering all of the neighbors of the current node, mark the current node as visited and remove it from the unvisited set. A visited node will never be checked again.

[5]If the destination node has been marked visited (when planning a route between two specific nodes) or if the smallest tentative

Saket Kr. Pathak Page 97

Page 98: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

distance among the nodes in the unvisited set is infinity (when planning a complete traversal), then stop. The algorithm has finished.

[6]Select the unvisited node that is marked with the smallest tentative distance, and set it as the new "current node" then go back to step 3.

Time Complexity –Time complexity of the following algorithm is O (M * log (N)),

where M is number of edges and N is number of vertices.

Code – Snippet:

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>

#define UNDEFINED_COST 3000

int **i_adjacency_matrix;int *i_nodes_visit;int i_no_nodes;

int get_tree_input(void);void calc_cost_Dijkstra_algo(int);

int main(){ printf("\n\n\n"); printf("\t\t\tWAP for Shortest Path Problem (Dijkstra's algorithm)."); printf("\n\n\n"); int i_source; i_source = get_tree_input(); calc_cost_Dijkstra_algo(i_source); printf("\n\n\n"); system("pause"); return 0;}

int get_tree_input(void){

Saket Kr. Pathak Page 98

Page 99: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

printf("Enter Number of Nodes: "); scanf("%d", &i_no_nodes); i_adjacency_matrix = malloc(sizeof(int) * i_no_nodes); i_nodes_visit = malloc(sizeof(int) * i_no_nodes); int i_temp = 0; int i_count, j_count; for (i_count = 0; i_count < i_no_nodes; ++i_count) { *(i_adjacency_matrix + i_count) = (int*)malloc(sizeof(int) * i_no_nodes); for (j_count = 0; j_count < i_no_nodes; ++j_count) { printf("\nCost of node %d to node %d is: ", i_count, j_count); scanf("%d", &i_temp); if ((i_temp != 0)) i_adjacency_matrix[i_count][j_count] = i_temp; else i_adjacency_matrix[i_count][j_count] = UNDEFINED_COST; } } printf("\n\n\nAdjacency Matrix, so formed:"); for (i_count = 0; i_count < i_no_nodes; ++i_count) { printf("\n"); for (j_count = 0; j_count < i_no_nodes; ++j_count) printf("\t%d", i_adjacency_matrix[i_count][j_count]); } int i_source_node; printf("\nEnter the source node: "); scanf("%d", &i_source_node); return i_source_node;}

void calc_cost_Dijkstra_algo(int i_source_node){ int i_count, j_count; int i_counter, i_flag; int i_init = 1; int flag[i_no_nodes];

Saket Kr. Pathak Page 99

Page 100: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

i_nodes_visit[0] = 1; for (i_count = 0; i_count < i_no_nodes; ++i_count) { flag[i_count] = 0; i_nodes_visit[i_count] = i_adjacency_matrix[i_source_node][j_count]; } i_flag = 1; while (i_init < i_no_nodes) { int i_undef_cost = UNDEFINED_COST; for (i_count = 0; i_count < i_no_nodes; ++i_count) { if ((i_nodes_visit[i_count] < i_undef_cost) && (!flag[i_count])) { i_undef_cost = i_nodes_visit[i_count]; i_counter = i_count; } flag[i_counter] = 1; i_flag++; for (i_count = 0; i_count < i_no_nodes; ++i_count) if ((i_nodes_visit[i_counter] + i_adjacency_matrix[i_counter][i_count] < i_nodes_visit[i_count]) && (!flag[i_count])) i_nodes_visit[i_count] = i_nodes_visit[i_counter] + i_adjacency_matrix[i_counter][i_count]; } } printf("\n Shortest path so obtained :\n"); for (i_count = 0; i_count < i_no_nodes; ++i_count) if (i_count != i_source_node) printf("Source: %d to %d,cost=%d\n",i_source_node, i_count, i_nodes_visit[i_count]);}

~~~~~~~~~~~~~~~~~~~~~************~~~~~~~~~~~~~~~~~~~~~

Saket Kr. Pathak Page 100

Page 101: Data Structure in C (Lab Programs)

Data Structure in C (Lab. Programs)

Saket Kr. Pathak Page 101