From 9e7b367ff52854f1f2fcb50e4113c5a531c7d748 Mon Sep 17 00:00:00 2001 From: Hizenberg Date: Wed, 7 Feb 2024 00:40:19 +0530 Subject: [PATCH] Assignment about professionally Programming a library --- Assignment1/diff.c | 48 +++++++++++ Assignment1/diff.o | Bin 0 -> 4128 bytes Assignment1/dll.c | 40 ++++++++++ Assignment1/dll.h | 23 ++++++ Assignment1/dll.o | Bin 0 -> 4840 bytes Assignment1/evaluation.c | 167 +++++++++++++++++++++++++++++++++++++++ Assignment1/evaluation.o | Bin 0 -> 9016 bytes Assignment1/exeapp | Bin 0 -> 21072 bytes Assignment1/readme | 55 +++++++++++++ 9 files changed, 333 insertions(+) create mode 100644 Assignment1/diff.c create mode 100644 Assignment1/diff.o create mode 100644 Assignment1/dll.c create mode 100644 Assignment1/dll.h create mode 100644 Assignment1/dll.o create mode 100644 Assignment1/evaluation.c create mode 100644 Assignment1/evaluation.o create mode 100755 Assignment1/exeapp create mode 100644 Assignment1/readme diff --git a/Assignment1/diff.c b/Assignment1/diff.c new file mode 100644 index 0000000..950f625 --- /dev/null +++ b/Assignment1/diff.c @@ -0,0 +1,48 @@ +#include + +/*Step 5 : */ + +/*Return 0 if ds1 and ds2 are clones, + * else return -1*/ +int +diff (void *root1, /*pointer to Data structure 1*/ + void *root2, /*pointer to data structure 2*/ + void *(*iterator(void *)), /*Iterator function callback*/ + int comparator(void *, void *), + void *(*get_app_data(void *))){ /*Comparison function callback*/ + + /*Write your code here*/ + + void *data1; + void *data2; + + void *temp1 = root1 , *temp2 = root2; + + if( !root1 && root2 ) + return -1; + else if( root1 && !root2 ) + return -1; + + if( comparator(get_app_data(temp1),get_app_data(temp2))) + return -1; + + while( temp1 != NULL && temp2 != NULL ){ + + data1 =get_app_data(temp1); + data2 = get_app_data(temp2); + + if( comparator(data1,data2) == -1 ){ + return -1; + } + + temp1 = iterator(temp1); + temp2 = iterator(temp2); + } + + if( temp1 == NULL && temp2 != NULL ) + return -1; + else if( temp1 != NULL && temp2 == NULL ) + return -1; + + return 0; +} diff --git a/Assignment1/diff.o b/Assignment1/diff.o new file mode 100644 index 0000000000000000000000000000000000000000..2131186e953afb7ffcdabfab245f59a760b9f1c7 GIT binary patch literal 4128 zcmbtWU2IfE6rS1J+3t4f_8%!A-6{km?v^%{|DTewumms_EP)ua?zXqP8@hL!yZ1ti z0*O`QrU|je2OmsC;sZVyNqlKE(JBwZg9#dgBpT(#1cDEWFBlW+Idji!Z-?@ro@D2o z@0;^8Gk5N}doFo!Z-8^AgtMJ&9x0ZwSY+PrlV%@lWi4zlRr%#eYVy}(smhtFsfs(B zstnGgDu*r~tRyd`rjo!VZ-WLtc`G$}<|=cWK+Q6zZe|YT&L5CW@{Y&5#Q%W&6vRvo zUP@KIn)^0YxdIq+Rq>aAFQ+O$r7GXgU4M1fvAm4$d69n4iPTE zt{jG=7L13Gsm0+@9Q?A=_b_-!`h;pk!EzuJC|v^5GaTZCy*zbZ zIDZN?i7Ln6c^nD{kPX!rVKk;^&Pf<1c-ez>4V%Exn7-t}NMu053m#lTvu~d>Fjb?B z4NRvbY9iDpQ467C9$JM(1JeU6*aHdiSAz@_I0{@`5Z8^>TZ!3h+wfWJrbw9T5&1^^Rz-W{A3C z)jT*U`0+pxRyta;axppJC3UTGA!nJxF$8w0561et zH^sVp5+@sUha;PpnXFBQ3*jRcv<78ODF};X#zGOSG1uLW- z%4l@%X1L}ahISA00&x4og^>|CB!*a5zEm{3@`cl;l{M{L*B-Nc!YPe)9V}Sxc>2gh zIXz&Pa$UR2n7n90^uLe5dQgfK+t=T}HMVY#nJr{2I>&f-?-OLoO9VqJ8T|BN#>X4^ ziY2w7H{iyt27V>Y$(y@7+W1l#jUNrd-g_pL5{XVzYw6W+H2VPZ(SWFBi z+u8$D1`9vHAz?7z$IItouq8g^nYfK+-+HQVsqZw=Q*9TUsDG99I0=G0uJR}XkY-Ow zUiN0fOEq52Ehiq&t@>Vrja>l+^UJO-5o6t?Ro%6OcWL}A;k_D9kR8(a4+%f3@jnxO zPUE5HO37;cJ;DWzZvFynb#MH2)QZKhpS4!k=mU z4Z>e*{6)e)YWy|AcQyWR!hdRf9j(8Xw0e#MJ;!k*R!M#F%^_;fRyq-TsJl6ErWr^}c5gIUP$M$qyS&ljGu!QWhiEO#d z61F*-Ner7=H>fAiU7_Muv_&lxu KW93L%kN*b +#include + +/* Public Function Implementation to create and return + * new empty doubly linked list*/ + +dll_t * +get_new_dll(){ + + dll_t *dll = calloc(1, sizeof(dll_t)); + dll->head = NULL; + return dll; +} + +/* Public Function Implementation to add a new application + * * data to DLL */ +int +add_data_to_dll (dll_t *dll, void *app_data){ + + if(!dll || !app_data) return -1; + + dll_node_t *dll_new_node = calloc(1, sizeof(dll_node_t)); + dll_new_node->left = NULL; + dll_new_node->right = NULL; + dll_new_node->data = app_data; + + /*Now add this to the front of DLL*/ + if(!dll->head){ + dll->head = dll_new_node; + return 0; + } + + dll_node_t *first_node = dll->head; + dll_new_node->right = first_node; + first_node->left = dll_new_node; + dll->head = dll_new_node; + return 0; +} + diff --git a/Assignment1/dll.h b/Assignment1/dll.h new file mode 100644 index 0000000..3737610 --- /dev/null +++ b/Assignment1/dll.h @@ -0,0 +1,23 @@ +/*Header file for Doubly Linked List*/ + +typedef struct dll_node_{ + + void *data; + struct dll_node_ *left; + struct dll_node_ *right; +} dll_node_t; + +typedef struct dll_{ + dll_node_t *head; +} dll_t; + + +/* Public Function declaration to create and return + * a new empty doubly linked list*/ +dll_t * +get_new_dll(); + +/* Public Function declaration to add the appication + * data to DLL*/ +int +add_data_to_dll(dll_t *dll, void *appn_data); diff --git a/Assignment1/dll.o b/Assignment1/dll.o new file mode 100644 index 0000000000000000000000000000000000000000..3c11763b9a0396f8d212dde3b90d974882d03206 GIT binary patch literal 4840 zcmbVPU1%It6h1SPNjBMJv&q&bX)W25s56>wsm9rv!O*oCD1<9?PPbdyX|H+ z?#|jDEeiFA5KxOx)*^i>6%J5m*7^shM9=XZ{FZ3n2Ivc`lGP zHM9GEY8HRDNCIMS-(cHlYUcDpYNk4$I&*pf+$J36q1tlw0n%@8q4l+HeAJ7Tq$DC( z>Q*vb<7da`Q!`=Av5=aD)En2UogP1aAK|NH_WNe3o!Nbtib>6m-%ZVokrT>fI2KTy zZr?bE^D#jaS;b=w1@qI-KEWiu+js$=Iu<~Yk?+wf~Je1rNJyXE@)b#00SbV#)CH%t-*6( z6P-;27$mQTje3Y`Z^!vJoJjCMXOVh3Bj*m(@R4uZj*K?AesZD549 z_32Lsw+2TeTW}IaI|TazqY<3UO40>A6~2{-W`u%4&$utFp+%z!WY{z)f@o;j*D)H= zu?qto+GC+e(CA&=+o5$fg}VTnF)+q&;pEsB!MOHJk4Rx|4L;E`8rj}MQCn*;7DX^c zNOr#>lx-#$0a+Af3L#Ldl7M!<`=T>I7|UGZ3baO|T|hLcTsrVKXAMN=68=oI9mY}9 zw0}ZvG|-~s51C#A*&69uuih?Nqy~A6cuTq&f@Uu{qN~i#*Uk1o!fd@_YWvLCX0z#@ z*#>%p?wV_HFkCZw!R$tZo;kC7&TRd}Y;w)WAv1i%>^N@rTrpS9neB+9`ypM&Vu~dv z7Znfc>Po&;cB56NQph=WHY%XPDLd^#(VlbxJ0uO|LN4z@-nO!kv)!~~A5T-~Sku$# ztmRrTStwT!E@f?4489~Jg>hl;bK}vG{->h-1Mz|Qrf6)+tvdFOobA}voXPJv zv1KSWG#HKLqOnPx8jFWo(vS;9_ zmOW`xG{9dEmMIW0>fWq`*V|r%i$ii*C<9uSVFVc73B62bfba5VEk*A1)g#YYJh(vI ztV)zsY%lHPxzC;9-)Y>HYU6qVDLxThX3hBfmu`KeG=WGeE>AR?vA6(*72Y&F5>7YW zDV95ZIL&c@<&_G~BG9~u=)KjBG2}N8h(z)IZzmy852w8Q#3=}{O~LQ5yhp*;vwT3o zWu21>zK-LU6+FiBX$9ZH@;eIdviyO9_p$tug8#|#rwT5vbi}SH_#UqFYX$$61mp4P^{K1l_a?+fCUlT&yrB zI4$H%X-eF%ai`?kas23rRa`4`jDy(u^kmtZvUxTSKSa@$)=u_~jFe1AfU0qCO+s->amM`;K@&srl*sQOt++A3|R>Cgqd)KU9>8 z2>obVZ~hl}qTO5=&7bZIb^gyHrp81F=D2B_6{RA=`2YCdZjV(`U`bpA_Vt1zueb^5vlpJh}Fx#!1;d=Ui3}k-K}c=D#w&{vN>F!ph)9N zLMh7eHMAjK_5YhM_nWBmlk}70yQr+^|0QpzsNb1w36lQr`*^}7{itq8R!Bc-_c1br z`Oi4g&9nbO5_}}rPeOFR*IWPVt)7Kk7h3-?{-nR$zx8sH=NA4%4RFEqeMi2ke=}n0 f-bDzKY$)#=!id!QcOX{J|1Q^mRd_8vRR8|~cd-bR literal 0 HcmV?d00001 diff --git a/Assignment1/evaluation.c b/Assignment1/evaluation.c new file mode 100644 index 0000000..d6065a2 --- /dev/null +++ b/Assignment1/evaluation.c @@ -0,0 +1,167 @@ +#include "dll.h" +#include +#include +#include + +extern int +diff (void *root1, /*pointer to first node of data struture 1*/ + void *root2, /*pointer to first node of data struture 2*/ + void *(*iterator)(void *), /*Iterator function callback*/ + int (*comparator)(void *, void *), + void *(*get_app_data)(void *)); /*Comparison function callback*/ + + +/*Application specific data structures*/ +typedef struct student_{ + char name[32]; + unsigned int year_of_birth; + unsigned int height; + unsigned int weight; + unsigned int total_marks; +} student_t; + + +/*Step 2 : Implement list iterator function here*/ +void* list_iterator (void *list_node){ + + /*write your code here*/ + + dll_node_t *_node = (dll_node_t *)list_node; + + if( _node == NULL ) return NULL; + + + return (void *)_node->right; +} + +/*Step 3 : implement student comparator function here*/ + +int student_comparator (void *_studentobj1, void *_studentobj2){ + + /*Write your code here*/ + student_t *_stu1 = (student_t *)_studentobj1; + student_t *_stu2 = (student_t *)_studentobj2; + + if( !_stu1 && !_stu2 ) + return 0; + else if( !_stu1 && _stu2 ) + return -1; + else if( _stu1 && !_stu2 ) + return -1; + + + if( strcmp(_stu1->name,_stu2->name) != 0 ) + return -1; + + if( _stu1->year_of_birth != _stu2->year_of_birth ) + return -1; + + if( _stu1->height != _stu2->height ) + return -1; + + if( _stu1->weight != _stu2->weight ) + return -1; + + if( _stu1->total_marks != _stu2->total_marks ) + return -1; + + + return 0; +} + +/*Step 4 : implement get_app_data_from_list_node function*/ +void* +get_app_data_from_list_node(void *list_node){ + + /*Write your code here*/ + + dll_node_t *_node = (dll_node_t *)list_node; + if( _node == NULL ) + return NULL; + + return (void *)_node->data; + } + +int +main(int argc, char **argv){ + + /*Student database list 1*/ + student_t *student1 = (student_t *)calloc(1, sizeof(student_t)); + strncpy(student1->name, "Abhishek", strlen("Abhishek")); + student1->year_of_birth = 2000; + student1->height = 167; + student1->weight = 80; + student1->total_marks = 100; + + student_t *student2 = (student_t *)calloc(1, sizeof(student_t)); + strncpy(student2->name, "Sagar", strlen("Sagar")); + student2->year_of_birth = 2001; + student2->height = 170; + student2->weight = 82; + student2->total_marks = 80; + + student_t *student3 = (student_t *)calloc(1, sizeof(student_t)); + strncpy(student3->name, "Vineet", strlen("Vineet")); + student3->year_of_birth = 2002; + student3->height = 161; + student3->weight = 62; + student3->total_marks = 72; + + student_t *student4 = (student_t *)calloc(1, sizeof(student_t)); + strncpy(student4->name, "Neeraj", strlen("Neeraj")); + student4->year_of_birth = 1998; + student4->height = 167; + student4->weight = 76; + student4->total_marks = 67; + + + dll_t *student_db1 = get_new_dll(); + add_data_to_dll(student_db1, student1); + add_data_to_dll(student_db1, student2); + add_data_to_dll(student_db1, student3); + add_data_to_dll(student_db1, student4); + + + /*Student database list 2*/ + student_t *student5 = (student_t *)calloc(1, sizeof(student_t)); + strncpy(student5->name, "Abhishek", strlen("Abhishek")); + student5->year_of_birth = 2000; + student5->height = 167; + student5->weight = 80; + student5->total_marks = 90; + + student_t *student6 = (student_t *)calloc(1, sizeof(student_t)); + strncpy(student6->name, "Sagar", strlen("Sagar")); + student6->year_of_birth = 2001; + student6->height = 170; + student6->weight = 82; + student6->total_marks = 80; + + student_t *student7 = (student_t *)calloc(1, sizeof(student_t)); + strncpy(student7->name, "Vineet", strlen("Vineet")); + student7->year_of_birth = 2002; + student7->height = 161; + student7->weight = 62; + student7->total_marks = 72; + + student_t *student8 = (student_t *)calloc(1, sizeof(student_t)); + strncpy(student8->name, "Neeraj", strlen("Neeraj")); + student8->year_of_birth = 1998; + student8->height = 167; + student8->weight = 76; + student8->total_marks = 67; + + dll_t *student_db2 = get_new_dll(); + add_data_to_dll(student_db2, student5); + add_data_to_dll(student_db2, student6); + add_data_to_dll(student_db2, student7); + add_data_to_dll(student_db2, student8); + + /*Step 6*/ + + if(diff((void *)student_db1->head, (void *)student_db2->head, list_iterator, student_comparator, get_app_data_from_list_node) == 0) + printf("Data sructures are equal\n"); + else + printf("Data sructures are not equal\n"); + return 0; +} diff --git a/Assignment1/evaluation.o b/Assignment1/evaluation.o new file mode 100644 index 0000000000000000000000000000000000000000..379eb7600bcffee3e232f7bff111d374a0c04abd GIT binary patch literal 9016 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 O{}SbYvg|52-Tyyx1fnVc literal 0 HcmV?d00001 diff --git a/Assignment1/exeapp b/Assignment1/exeapp new file mode 100755 index 0000000000000000000000000000000000000000..4abbafdb72a62c58b45b911b219a24650cf199dd GIT binary patch literal 21072 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 literal 0 HcmV?d00001 diff --git a/Assignment1/readme b/Assignment1/readme new file mode 100644 index 0000000..a699d0e --- /dev/null +++ b/Assignment1/readme @@ -0,0 +1,55 @@ +In this assignment, We will write a generic diff function diff() which can tell whether the two similar Data structures are clones of each other or not. Two similar Data structures could be two linked list, two trees or anything.  diff() should be generic and should work for all data structures. + +Instructions : +Create two new Linked lists : list1 and list2. See evaluation.c file, in main(), i have created two lists for you already called student_db1 and student_db2. +list1 and list2 both holds the records of type student_t. student_t is defined as : + +typedef struct student_{ + char name[32]; + unsigned int year_of_birth; + unsigned int height; + unsigned int weight; + unsigned int total_marks; +} student_t; + + +Step 1 (Done): Create two linked list and add some records in both list. I have done it for you in evaluation.c file. I have used library dll.h/.c which you have already created so far. + + +Step 2 : Now write an iterator function called "void* list_iterator (void *list_node)" in evaluation.c file. which takes an input a pointer to node of a linked list, and return the pointer to next node. Signature of function should be generic as below. Handle NULL cases. + Signature : void* list_iterator (void *list_node); + + + +Step 3 : Write a comparator function called "int student_comparator (void *_studentobj1, void *_studentobj2)" in evaluation.c file which takes an input the pointer to objects of type student_t and return 0 if two objects are equal , otherwise -1. The signature of function should be generic as below : + Signature : int student_comparator (void *studentobj1, void *studentobj2); + + + +Step 4 : Write a function called "void * get_app_data_from_list_node(void *list_node)" in file evaluation.c which takes an input the pointer to node of linked list and return the object to data held by the node of the linked list. + Signature : void *get_app_data_from_list_node(void *list_node); + + +Step 5 : Now write a diff function in diff.c file. Signature of the function should be generic as below : + + int  /*return 0 if two Data structures are equal, else -1*/ + diff (void *root1,    /*pointer to starting node of list 1*/ +       void *root2,    /*pointer to starting node of list 2*/ +       void *(*iterator(void *)), /*Iterator function callback*/ +       int comparator(void *, void *), /*Comparison function callback*/ + void *(*get_app_data(void *))); /*get application data function callback*/ + + + +Step 6 : you should call the diff() as follows in evaluation.c file : + +if(diff (first_node1, first_node2, list_iterator, student_comparator, get_app_data_from_list_node) == 0) + printf("Data structures are equal\n"); +else + printf("Data structures are not equal\n"); + + +Step 7 : Compile and execute the final executable. Your output should be "Data structures are equal". +Step 8 : Modify the Student list as per your convinience and verify that you get appropriate output. + +Step 9 : Repeat the above exercise for trees. You should NOT modify diff() that you have written in step 5, it should work for tree data structures as well.