Написать функцию push для stack - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день, подскажите пожалуйста, как написать функцию push
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define STACK_SIZE 10
  5. #define STACK_EMPTY -1
  6. void push(char [], char, int *, int);
  7. void push(char stack[], char item, int *top, int max_size){
  8. }
Спасибо

Решение задачи: «Написать функцию push для stack»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4.  
  5. #define STACK_SIZE 10
  6.  
  7. struct stack
  8. {
  9.     char data[STACK_SIZE];
  10.     int idx;
  11. };
  12.  
  13. void stack_init(struct stack *stk)
  14. {
  15.     stk->idx = 0;
  16. }
  17.  
  18. int stack_push(struct stack *stk, char c)
  19. {
  20.     if(stk->idx == STACK_SIZE)
  21.         return 0;
  22.  
  23.     stk->data[stk->idx++] = c;
  24.     return 1;
  25. }
  26.  
  27.  
  28. int stack_pop(struct stack *stk, char *c)
  29. {
  30.     if(stk->idx == 0)
  31.         return 0;
  32.  
  33.     *c = stk->data[--stk->idx];
  34.     return 1;
  35. }
  36.  
  37. char rand_char(char lo, char hi)
  38. {
  39.     return rand() % (hi - lo) + lo;
  40. }
  41.  
  42. int main(void)
  43. {
  44.     struct stack stk;
  45.     size_t i;
  46.  
  47.     srand((size_t) time(NULL));
  48.     stack_init(&stk);
  49.  
  50.     for(i = 0; i < STACK_SIZE; ++i)
  51.     {
  52.         char c = rand_char('!', '~');
  53.         if(!stack_push(&stk, c))
  54.         {
  55.             fprintf(stderr, "Error: stack is full\n");
  56.             exit(1);
  57.         }
  58.         printf("%c (%d)\n", c, c);
  59.     }
  60.  
  61.     puts("----------");
  62.    
  63.     for(i = 0; i < STACK_SIZE; ++i)
  64.     {
  65.         char c;
  66.         if(!stack_pop(&stk, &c))
  67.         {
  68.             fprintf(stderr, "Error: stack is empty\n");
  69.             exit(1);
  70.         }
  71.         printf("%c (%d)\n", c, c);
  72.     }
  73.     exit(0);
  74. }

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы: для стандартных функций ввода-вывода, для работы со временем и для генерации случайных чисел.
  2. Определяем размер стека (10 элементов).
  3. Создаём структуру stack, которая содержит массив данных типа char и целочисленный индекс.
  4. В функции stack_init инициализируем индекс элемента стека.
  5. В функции stack_push проверяем, полон ли стек. Если да, то выводим сообщение об ошибке и завершаем программу. Иначе добавляем элемент в стек и выводим его на экран.
  6. В функции stack_pop проверяем, пуст ли стек. Если да, то выводим сообщение об ошибке и завершаем программу. Иначе извлекаем элемент из стека и выводим его на экран.
  7. В функции rand_char генерируем случайный символ от заданных символов '!' до '~'.
  8. В функции main создаём экземпляр стека, инициализируем его и заполняем случайными символами до максимального значения размера стека. Выводим все элементы стека на экран.
  9. Выводим сообщение о пустом стеке и завершаем программу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы