From 4373b1436265fbe569b329c11bc650ea795d0432 Mon Sep 17 00:00:00 2001 From: horpeazy Date: Thu, 6 Oct 2022 20:54:41 -0700 Subject: [PATCH] feat: stack and queue --- bytecodes/47.m | 16 ++++++++++++++ functions.c | 55 ++++++++++++++++++++++------------------------ get_operation.c | 2 ++ misc_operations.c | 5 ++++- monty | Bin 22288 -> 22624 bytes monty.h | 5 ++++- more_operations.c | 9 ++------ operations.c | 2 ++ rotate.c | 23 ++++++++++++++++++- 9 files changed, 78 insertions(+), 39 deletions(-) create mode 100644 bytecodes/47.m diff --git a/bytecodes/47.m b/bytecodes/47.m new file mode 100644 index 0000000..b1f1d86 --- /dev/null +++ b/bytecodes/47.m @@ -0,0 +1,16 @@ +queue +push 1 +push 2 +push 3 +pall +stack +push 4 +push 5 +push 6 +pall +add +pall +queue +push 11111 +add +pall diff --git a/functions.c b/functions.c index a24d96b..e266a53 100644 --- a/functions.c +++ b/functions.c @@ -8,7 +8,7 @@ */ int add_node(stack_t **head, int value) { - stack_t *node; + stack_t *node, *temp; if (!head) return (-1); @@ -21,36 +21,33 @@ int add_node(stack_t **head, int value) } node->n = value; - node->prev = NULL; - node->next = *head; - if (*head != NULL) - (*head)->prev = node; - *head = node; - return (1); -} - -/** - * delete_node - removes the top of the stack - * @head: pointer to the head node - * Return: 0 on success, -1 on failure - */ -int delete_node(stack_t **head) -{ - stack_t *node; - - if (!head) - return (-1); - - if (*head == NULL) - return (0); - - node = *head; - *head = (*head)->next; - (*head)->prev = NULL; - free(node); + if (mode == 0) + { + node->next = *head; + node->prev = NULL; + if (*head != NULL) + (*head)->prev = node; + *head = node; + } + else + { + temp = *head; + if (!temp) + { + node->prev = NULL; + node->next = NULL; + *head = node; + return (1); + } + while (temp->next) + temp = temp->next; + node->next = NULL; + node->prev = temp; + temp->next = node; + } - return (0); + return (1); } /** diff --git a/get_operation.c b/get_operation.c index 2601e27..f61b609 100644 --- a/get_operation.c +++ b/get_operation.c @@ -23,6 +23,8 @@ void (*get_op(char *name))(stack_t **, unsigned int) {"pstr", pstr}, {"rotl", rotl}, {"rotr", rotr}, + {"stack", stack}, + {"queue", queue}, {NULL, NULL} }; diff --git a/misc_operations.c b/misc_operations.c index 4e95974..a18947e 100644 --- a/misc_operations.c +++ b/misc_operations.c @@ -57,6 +57,8 @@ void _mod(stack_t **stack, unsigned int line_number) */ void pchar(stack_t **stack, unsigned int line_number) { + stack_t *node; + if (!stack || !*stack) { fprintf(stderr, "L%u: can't pchar, stack empty\n", line_number); @@ -69,7 +71,8 @@ void pchar(stack_t **stack, unsigned int line_number) exit(EXIT_FAILURE); } - printf("%c\n", (*stack)->n); + node = *stack; + printf("%c\n", node->n); } /** diff --git a/monty b/monty index ab58d7c4a17eb10d61bc83a6423cd77ac106452f..018e7e35bbe362e4aff8ba26951d8faa29339417 100755 GIT binary patch delta 5384 zcmZ`-4^&iD8o%$!tPEldg9;2P1Gb422;v`bp!SHhoz3m^$J$J^e?yXjqK;enS<1w? z@DSrIHim9c&SvbHWV~ACfT1P>^fC4Q5l8LSD^7g>ndcR)KF;}?cDVkT2fU#_4yjVr zvf9wQw*89VT_b3PpDWK8WLfm{(+z!|MV~J4g%t(ECZO2%POU1~nFk zEa7mSML#ahz&BX*IRd}jqCX<=tD^LNLh^+}bCiLQt)q^HF6nuE;u8*$O9qadmti=NT0_cOsTcTIi@rzT9Tt6q zz^7RBwoJNd=-uor#KoSCdC@Udy<(Yz5N*rwlL<@|=it!kBOfXzWS|wVpO!GK?Sm3} zgLAz7S^hTV$r8HRIbB^>LJv5vP<X5q%Wcc9D5YJA1{ZdPYaeg zxU(FC|67Y&L<{=*v_MU);lLG~2a81w5a7BS$B zqE=+J^2 z87p8~pex*bQP(j=mjzv+<)m;pIXYWEl7b zfE%;=8>g*~1ib@$+2pjqzmc&qOxqICo610Na5__W?q#=(T-yXTxjTV^AMn!;U*NOD zE_a0=#MmIO=cJ5OpSwVprDQ4%G?0?k za4Vw?c*8v(8s1?nq#lh6!>0> z{m^;pPfbnk!P;Bdf>A9-X`@<>Md%Bu#p7rpAwl0)AodI<{yZXyGtbim*Kbv4gf4WI zTz71mgzrfnG>+2;^vtUq3G zuxe)%aVAB|V2V1E;xUZOxGfRCf4KR!vBS?Ox~9shpBXi1>JF1)-X#i`#?AyX79@fF zI6vRP!^rrP^hTG9I!0%!#b@c&qtg^O6s6<3r%3XW!Q>Op$|c@@mhK(>*tpA0+zy;i zb01fpk+{$qq{4H#@@@bJ#wgLJ2C#kaynQ-h>;<0|_*x6Biv*emS{G2q*y-aIPnLll zg9)F5k5Tyj1B{S9KlU=U`!wIfT?NwRz7d1waQ?J(DTVW(?C}lwgXy$-u+u+Hr#Kde z?V)oRD?)y_E}TNZk@VH{G`0OS{W$&Z71!a5E$ACSxh+c?6npzA9uX<$=V`K;jzfll zpOM!w4!p& zM8919*BA*#vHL!gqo|)%=M-yo_TZ=0I7HJ1b51fjn=zs%lH5aiTDJCu5;A8ie#?$_ z*=A2|>ku<{$76V8AZT<%e}W3zJy>g|62?HbX9F??-gq0a@Fv>-Ruz zI;!h!kUfwcko%75dN-u&EBunG*pRPv-3@umH@aR1S^KT7H$d9M@Q1t=vJG;45Bybp zpM8QsHxxaP1k?KScOZaVe;fpm{g4fi+j~I(X~QbpAXh_nK=wj*Lq2{2{BBh?JP)E3hAc>;}r*0CMOrgA{%`I#02|M+Khki zAS*>!E%9FFxKEui{8vNrl=z{s+`bd)W3+K{n*TkFGLWwiAx)(EF9zhuUZ_8UeL)n{ zT$3ptdMEPwc$EDS(|#57tzYW;?kN6t$?qps0Ayf8!cl-D5R-^ zg+AL&--35WDvhhGn6O=3ul)K0>P8#@wiG))3)sUiP{^C9ry`lQR>t5%Yd1Q|AnmM7 zPTeNZvX=O{1p2SEzcM+WokqqbcAoHS0oL6@pO=XjJWCBhI$4a&kA&6OF5?nr0F`IO zMQUnky>^BFzXB$!gkO(<9fjUOTt7+P_X6L9&olP$`yBEV^ohV%iDZjk9db_K%SD0~ zaxY8+rxJ^Dl4r$k^1BMgp)_$;vXaXFrd|}zvIO~c089?Yl=8o|?C+SRpi5MLy4Q`+ z^GsIm6vahXB)Qt|hx-K`aJrfheg9_eJSE0N@`|Bnq{^WlRY5v@aiR|l` zJyISBHO?(nhUcLQ%!ek%B+-LDN1R+ko`-(tD^Ve`=atwSJO;9mHqM)7-*%1h)=PKe O?cO=Yn~UbxrvD#H29KEl delta 4465 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 diff --git a/monty.h b/monty.h index a4b62c2..6d9c539 100644 --- a/monty.h +++ b/monty.h @@ -11,6 +11,7 @@ #include #include +extern int mode; /** * struct stack_s - doubly linked list representation of a stack (or queue) * @n: integer @@ -54,7 +55,7 @@ void pint(stack_t **stack, unsigned int line_number); void pop(stack_t **stack, unsigned int line_number); void swap(stack_t **stack, unsigned int line_number); void _add(stack_t **stack, unsigned int line_number); -void nop(stack_t **stack, unsigned int line_number); +void nop(stack_t **stack __attribute__((unused)), unsigned int line_number __attribute__((unused))); void _sub(stack_t **stack, unsigned int line_number); void _div(stack_t **stack, unsigned int line_number); void _mul(stack_t **stack, unsigned int line_number); @@ -63,6 +64,8 @@ void pchar(stack_t **stack, unsigned int line_number); void pstr(stack_t **stack, unsigned int line_number); void rotl(stack_t **stack, unsigned int line_number); void rotr(stack_t **stack, unsigned int line_number); +void stack(stack_t **stack __attribute__((unused)), unsigned int line_number __attribute__((unused))); +void queue(stack_t **stack __attribute__((unused)), unsigned int line_number __attribute__((unused))); /* Miscellaneous */ void (*get_op(char *name))(stack_t **stack, unsigned int line_number); diff --git a/more_operations.c b/more_operations.c index 7c8b593..a0b03a4 100644 --- a/more_operations.c +++ b/more_operations.c @@ -50,14 +50,9 @@ void _add(stack_t **stack, unsigned int line_number) * @stack: stack * @line_number: line number */ -void nop(stack_t **stack, unsigned int line_number) +void nop(stack_t **stack __attribute__((unused)), unsigned int line_number __attribute__((unused))) { - int i = 0; - stack_t *node = *stack; - - (void) line_number; - if (i == 1) - printf("%d\n", node->n); + return; } /** diff --git a/operations.c b/operations.c index c28495c..35d1717 100644 --- a/operations.c +++ b/operations.c @@ -59,6 +59,7 @@ void pall(stack_t **stack, unsigned int line_number) (void) line_number; node = *stack; + while (node) { printf("%d\n", node->n); @@ -98,6 +99,7 @@ void pop(stack_t **stack, unsigned int line_number) } node = *stack; + *stack = (*stack)->next; free(node); } diff --git a/rotate.c b/rotate.c index 547bed1..354f879 100644 --- a/rotate.c +++ b/rotate.c @@ -1,5 +1,7 @@ #include "monty.h" +int mode = 0; + /** * rotl - rotates the stack * @stack: pointer to stack @@ -39,7 +41,6 @@ void rotr(stack_t **stack, unsigned int line_number) (void) line_number; temp = *stack; - while (temp->next) temp = temp->next; temp->prev->next = NULL; @@ -47,3 +48,23 @@ void rotr(stack_t **stack, unsigned int line_number) temp->prev = NULL; *stack = temp; } + +/** + * stack - sets mode to stack + * @stack: pointer to stack + * @line_number: line number + */ +void stack(stack_t **stack __attribute__((unused)), unsigned int line_number __attribute__((unused))) +{ + mode = 0; +} + +/** + * queue - sets mode to stack + * @stack: pointer to stack + * @line_number: line number + */ +void queue(stack_t **stack __attribute__((unused)), unsigned int line_number __attribute__((unused))) +{ + mode = 1; +}