Mary_99

TASK2a juz chba ok

Nov 3rd, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.81 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include "task2a.h"
  5. #include "task2a.c"
  6. #include <assert.h>
  7.  
  8. int main( int argc, char const *argv[])
  9. {
  10.     Stack stack;
  11.     init(&stack);
  12.     assert(isEmpty(&stack)==1);
  13.    
  14.     push(&stack, 12);
  15.     push(&stack, 14);
  16.     push(&stack, 16);
  17.    
  18.     display(&stack);
  19.     printf("\n");
  20.    
  21.     Stack newStack;
  22.     initAndCopy(&newStack, &stack);
  23.     assert(equal(&stack, &newStack));
  24.     display(&newStack);
  25.     assert(pop(&newStack)==16);
  26.     push(&newStack, 5);
  27.     push(&newStack, 11);
  28.     push(&newStack, 10);
  29.    
  30.     push(&newStack, 70);
  31.     assert(pop(&newStack)==70);
  32.    
  33.     printf("\n");
  34.     display(&newStack);
  35.     printf("\n");
  36.     assert(isEmpty(&stack)==0);
  37.     printf("\n");
  38.  
  39.     assign(&newStack, &stack);
  40.     assert(equal(&stack, &newStack));
  41.     display(&newStack);
  42.     printf("\n");
  43.     display(&stack);
  44.     printf("\n");
  45.     destroy(&newStack);
  46.     destroy(&stack);
  47.  
  48.     return 0;
  49.    
  50. }
  51.  
  52. #pragma once
  53. #include <stdio.h>
  54. #include <stdlib.h>
  55. #include <stdbool.h>
  56.  
  57. #define SIZE 5
  58.  
  59. typedef struct{
  60.  
  61.     int* data;
  62.     int top;
  63.     int size;
  64. } Stack;
  65.  
  66. void init(Stack* s);
  67. void destroy(Stack* s);
  68. void push(Stack *s, int element);
  69. int pop(Stack* s);
  70. bool isEmpty(Stack* s);
  71. void initAndCopy(Stack* s, Stack* source);
  72. void copy(Stack* s, Stack* source);
  73. void assign (Stack *s, Stack *source);
  74. void display(Stack *s);
  75. void testIsEmpty(Stack* s);
  76. bool equal(Stack*s, Stack*s1);
  77.  
  78.  
  79. #include <stdio.h>
  80. #include <stdlib.h>
  81. #include <stdbool.h>
  82. #include "task2a.h"
  83.  
  84. void init(Stack* s)
  85. {
  86.     s->top = -1;
  87.     s->size = SIZE;
  88.     s->data = (int*)malloc(SIZE * sizeof(int));
  89.     if(s->data == NULL)
  90.         {
  91.             printf("error");
  92.             free(s->data);
  93.             abort();
  94.         }
  95. }
  96.  
  97.  
  98. void push(Stack *s, int element)
  99. {
  100.  
  101.    if(s->top == s->size -1)
  102.     {
  103.         s->data = realloc(s->data, s->size*2*sizeof(int));
  104.         if (!s->data)
  105.         {
  106.             free(s->data);
  107.             perror("realloc");
  108.         }
  109.         s->size *= 2;
  110.     }
  111.    
  112.     s->data[++s->top] = element;
  113. }
  114.  
  115.  
  116. int pop(Stack* s)
  117. {
  118.     if(isEmpty(s))
  119.     {
  120.         printf("Stack is empty");
  121.         abort();
  122.     }
  123.     else
  124.     {
  125.         return s->data[s->top--];
  126.     }
  127. }
  128.  
  129. bool isEmpty(Stack *s)
  130. {
  131.     if (s->top == -1)
  132.     {
  133.         return true;
  134.        
  135.     }
  136.     else
  137.     {
  138.         return false;
  139.        
  140.     }
  141. }
  142.  
  143.  
  144. void destroy (Stack *s)
  145. {
  146.     free(s->data);
  147. }
  148.  
  149.  
  150. void initAndCopy(Stack* s, Stack* source)
  151. {
  152.  
  153.     s->data = (int*)malloc(sizeof(int) * source->size);
  154.  
  155.     if(s->data == NULL)
  156.     {
  157.         printf("unable to allocate memory");
  158.         abort();
  159.     }
  160.      
  161.     s->top = source->top;
  162.     s->size = source->size;
  163.    
  164.     copy(s, source);
  165.  
  166. }
  167.  
  168. void copy(Stack* s, Stack* source)
  169. {
  170.     for(int i = s->top; i>=0;i--)
  171.     {
  172.         s->data[i] = source-> data[i];
  173.     }
  174. }
  175.  
  176. void assign (Stack *s, Stack *source)
  177. {
  178.     if(s->size != source->size)
  179.     {
  180.         s->data = realloc(s->data, sizeof(int) * (source->size));
  181.     }
  182.    
  183.     s->top = source->top;
  184.     s->size = source->size;
  185.     copy(s, source);
  186. }
  187.  
  188. void display(Stack *s)
  189. {
  190.     int i;
  191.     for(i = 0; i <= s->top; i++) printf("%d ", s->data[i]);
  192.    
  193. }
  194.  
  195. void testIsEmpty(Stack* s)
  196. {
  197.     if(isEmpty(s))
  198.     {
  199.         printf("\nStack is empty\n");
  200.     } else
  201.     {
  202.         printf("\nStack is not empty\n");
  203.     }
  204. }
  205. bool equal(Stack*s, Stack*s1)
  206. {
  207.     int i;
  208.     if(s->top != s1->top)
  209.     {
  210.         destroy(s);
  211.         destroy(s1);
  212.         return false;
  213.     }
  214.     for(i=0; i<s->top; i++)
  215.     {
  216.         if(s->data[i] != s1->data[i])
  217.         {
  218.             destroy(s);
  219.             destroy(s1);
  220.             return false;
  221.         }
  222.     }
  223.     return true;
  224. }
Advertisement
Add Comment
Please, Sign In to add comment