From 0424fbcca65704863ab16a11bca5820f114ea27a Mon Sep 17 00:00:00 2001 From: Anthony Debucquoy Date: Tue, 24 Oct 2023 20:25:22 +0200 Subject: [PATCH] . --- bac2/os/chap2/ex5.c | 51 ++++++++++++++++++++++-------------------- bac2/os/chap2/ex5.o | Bin 5024 -> 5264 bytes bac2/os/chap2/ex6.c | 53 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 24 deletions(-) create mode 100644 bac2/os/chap2/ex6.c diff --git a/bac2/os/chap2/ex5.c b/bac2/os/chap2/ex5.c index 06af55c..f1c2fad 100644 --- a/bac2/os/chap2/ex5.c +++ b/bac2/os/chap2/ex5.c @@ -1,41 +1,44 @@ -#include #include +#include -struct node{ - struct node* prev; +typedef struct Node* LIFO; + +struct Node{ + struct Node* prev; void* data; }; -typedef struct node* LIFO; - -LIFO* mklifo (); -void push(LIFO* lst , void*); -void* pop(LIFO* lst); +LIFO mklifo(); +void push(LIFO*, void*); +void* pop(LIFO*); int main(void) { - char* t = "test"; - LIFO* lifo = mklifo(); - push(lifo, t); - printf("%s", (char *)pop(lifo)); - + int a = 5; + int b = 12; + LIFO lifo = mklifo(); + + push(&lifo, &a); + push(&lifo, &b); + int *c = pop(&lifo); + int *d = pop(&lifo); + + printf("%d\n", *c); + printf("%d\n", *d); } -LIFO *mklifo (){ - LIFO* ret = malloc(sizeof(struct node)); - return ret; +LIFO mklifo(){ + return calloc(1, sizeof(struct Node)); } -void push(LIFO *lst , void *el){ - LIFO* next = mklifo(); +void push(LIFO* lst, void* el){ + LIFO next = mklifo(); (*lst)->data = el; - (*next)->prev = *lst; - lst = next; + next->prev = *lst; + *lst = next; } -void *pop(LIFO *lst){ - void* el; - (*lst)->data = el; +void *pop(LIFO* lst){ *lst = (*lst)->prev; - return el; + return (*lst)->data; } diff --git a/bac2/os/chap2/ex5.o b/bac2/os/chap2/ex5.o index 77ac7feb44ac7c4ea71e50d79a9924225766e71b..025a4bdcc577aceb00d26f872c5b608d6f939f9c 100644 GIT binary patch delta 2594 zcmZ3WK0$MW2Ga$;iCVJt1}PrhEUFp|3=AHfu0IS99Cy9J%D}*I-1QC*0|Ubj1_lO( z7a+o;)AfNzZ|Dt=Ue^a6o!2}%k3)oeL+@Y+fmA@HJ6&Huq~ZJz9^I}lx*0l;dGxX} zFih;=XY=TG{m{)Yu~AyfqdW9Riifrc*gYkzU>i;z4)y4Kx=(+U5qnrQg$v{{29Tj3#(yXS zN-9~BY{Eo!p$^`rh4_m`)?VoSpU#caMuLuD^AvY zwH#XZZm+EmU%8m}D`LXYEnDt39TpRM`rPiK^w)n~Ps^M1_^UGRvTuyxTr7HJYq6&C ziEj^lOLzWV=H8$EVb;9*Bz5(FPk*&4G~N4?$!EcJ`P%n+VLj{9|Kz8gXYEPSyZVVS z#M4WsC@K5+l0uy<_aIBXvwwLeIiCwZoztB^cglm!zaCj`OU?cnCu}Ov<#R8{Ub@ux z}aeDjXyE1@%|*%?FKy8|HU?0Tda7c9U!!ak>6YECn&ro=P@bP8;H2( zubuj8vXM!klz7XL#N%D93j(+Qne_1STLppGedX_t^eI#cgdb314Bd2{A^$*X_(tii zS6;g^>afZPJd$5i_F&cG4-AWL%w7Dzt6|N}%N3m&FO#Zj&ChUMKdZ84k-*lIH#{>R zJzaPvLT+hw!yA>^8~^rAaj5y`JS8ngurCKrP?Tox~ zPfgQIcCj(Ph(F&mhg+Wey!0m>1_lNukh2*$z$AlRf3mZOrI@ho_F0tKGW5FN3ee0gLAx{zlyjY3hmv!NwRb5 zLx=ep^WH3=;Sh)E}K*4IzbmEU+>zG zwn;GWWBmn@C(^GENzLv1ZCo!=yZOSs=}IOCvr@nPIlZsqU!vEWJ2&p#GZbE%)BB-1 z`1uD${b@Ym;n2W@<(%_q{E9hKeWSS!D+ruvE$PU0=D$$glCo7xBD|*I_hJR#=_I7{xfr3>7(iv$pZ^fxG+B^C zoG}zc8YUvC0XYt)rVxjC%jAdb;*t}QWO*4F7+|^kUciJkV9PZHj*qqlHTu= zJ2~tn!9fW2G(;K5-Jl$3JozDq_~Zv19FsU57#Suza*EgIKvXceKxvRtb_NE9>5713Z&|3D|KKfbu;91H-||j)LZ#7NBMt0|Ud9$&G^M zjAthA6tri0!8-XNuh?V(Aq~bClP!hpnIzaIR|(lM&ETE9OURCM0~^G;hRKY==9~sl WZ&^=v6gKDl0m}9a3=Ee+P5}T2q~#p| delta 2387 zcmbQBxj=n_2GaxHiCVH&0v^4r3=9km9-Xcqc7PZ!K!iu9>kp6a&<`Hnu0K3FuX%JH zhX{kYQ1-yML@6&MZce|U5=cyx!p@aPuu z=oEk$>iS{=RAXoD3y*Hs7Z5c+JURn7;9QW}7f>y+hf7k6OBhs(K@J3AMi9Zk!0-vm zfKm(~XZsJ&${V2?#YhttPk;iF?XU}LeemYQO zz?Gz+EF8h9%-xcd(#+8`^+SPysRB!-w1Aq?R%T8+0q=&1t;zBe*t8R$vKuPqnDu!n zoIH5Ig!!3cBgY!|CfOtHjFLM7ts58VxUN*?ne@PcAya_u^oPw> zN|v^K>l&A~I8InBwZ?=oXQIFvB{qfxH)bs@hRLUxRO=lCTvp4vyG6I93bj@!sOXvd z%dqrTJ)Pbo|6Zr*^v2!O!nd$~p4!T$#%kONuAluGv z(0$iZ!jH$reb>}`O3`*x_U@dL((85T=kv2K%6+cyIFYfOw>v91b&C5-sR!S!Sasf7 z-IjV^8zU_=%ko2HY;F?wgsLT6@$DtH-yc0Zcyq_`ZpW%B&HvNdLMEKaf2ACChg-5n z`U?XCEG`Y8aSY>E%(b0T;M;&--ymH0e;PS*Mzz z{i2!QT6Tx-J9AZ>{ZQ$g8NKs4YZ>OJ2`*${V3?f4B3B>UcaZClfq={R;7`oDzS>*G z{hO3J=Gl0AZ1*&{J4I#cqwBZBG@lr4Ft+}E%_``OUXsQkkAoVArg`exd^se*^7&wT z%aQuX%a#$*(a9@szl}(mpU+?Rr25$EJ!dSnyEkdgYTCS}U-_Y<;zIKxxz_2w3`|SI z-bXA;Si0s&m-Hj2@Q~RR14l9Vb>{gUbx_#j;OR=d|#QGl$)9-J&#QG#%u0Y~g-|{8WHv4s@ zmR~s0ykq*Vr-#;MyqP7kqiN5%S4^fivK@J>Wdx69-@Vp;LM6$gmSeirwA~>^jvgYr zH%|U9{@dDgt6B0J#lPlrs*PFf{xZM3VP8A>466(q#3hrTvxe%$f!L0G0&PsrylhO7 zJnS3{3^EK13^pKf1_+x0CLcaIi_J(-4%H(0^n0%2>dh!8&mdR(>&S-)SWME+6 zVPIeoVqj!|@j-@yGzvq-t0o_07w0?-5@KLr(3|{_-F&hEhq793VopweGE|rwN;5Gq zFfcPPF#P!s0g{soIm8(aCNJa=XSA7okwaY44NWC1)PpB8a*9jlKxJ7N7#R4F%$Wc( zXYvG24apR!3Lz-X#lXP80b)G}!fKZnvV z@r#o;a*Nl)V&4fGTQJ!hP}QDLaS#Pc0##7)YLEbuUtonCwrFJmP{+&}8RK?&NW2)SrBjN1QQYG9#BTD=39@OlIU2mz)Z<$`VS0 zyaJM)J=u^~ToM)u&SjDdkcfAU8G`N;u-5=;xYCua%T zab`dz7EazMXwGzjd-5wmJ5B*mjsiJivZ0VU=LIOQcXFYSIb-bPl|uGRm8_FDGK) +#include + + +typedef struct node{ + void* data; + struct node* next; +} NODE; + +//Could be only head but it allows a complexity of O(1) instead of O(n) for insertion (where n would be the size of the chain) +typedef struct { + NODE* head; + NODE* tail; +} FIFO; + +FIFO mkfifo (); +void enqueue(FIFO *lst ,void* el); +void* dequeue(FIFO *lst); + +int main(void) +{ + int a = 5; + int b = 12; + FIFO fifo = mkfifo(); + + enqueue(&fifo, &a); + enqueue(&fifo, &b); + int *c = dequeue(&fifo); + int *d = dequeue(&fifo); + + printf("%d\n", *c); + printf("%d\n", *d); + +} + +FIFO mkfifo (){ + return (FIFO) {NULL, NULL}; +} + +void enqueue(FIFO *lst ,void *el){ + NODE *new = calloc(1, sizeof(NODE)); + new->data = el; + if(lst->tail != NULL) + lst->tail->next = new; + lst->tail = new; + lst->head = lst->head == NULL ? new : lst->head; +} + +void* dequeue(FIFO *lst){ + void* ret = lst->head->data; + lst->head = lst->head->next; + return ret; +}