Написать функцию push для stack - C (СИ)
Формулировка задачи:
Добрый день, подскажите пожалуйста, как написать функцию push
Спасибо
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #define STACK_SIZE 10
- #define STACK_EMPTY -1
- void push(char [], char, int *, int);
- void push(char stack[], char item, int *top, int max_size){
- }
Решение задачи: «Написать функцию push для stack»
textual
Листинг программы
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- #define STACK_SIZE 10
- struct stack
- {
- char data[STACK_SIZE];
- int idx;
- };
- void stack_init(struct stack *stk)
- {
- stk->idx = 0;
- }
- int stack_push(struct stack *stk, char c)
- {
- if(stk->idx == STACK_SIZE)
- return 0;
- stk->data[stk->idx++] = c;
- return 1;
- }
- int stack_pop(struct stack *stk, char *c)
- {
- if(stk->idx == 0)
- return 0;
- *c = stk->data[--stk->idx];
- return 1;
- }
- char rand_char(char lo, char hi)
- {
- return rand() % (hi - lo) + lo;
- }
- int main(void)
- {
- struct stack stk;
- size_t i;
- srand((size_t) time(NULL));
- stack_init(&stk);
- for(i = 0; i < STACK_SIZE; ++i)
- {
- char c = rand_char('!', '~');
- if(!stack_push(&stk, c))
- {
- fprintf(stderr, "Error: stack is full\n");
- exit(1);
- }
- printf("%c (%d)\n", c, c);
- }
- puts("----------");
- for(i = 0; i < STACK_SIZE; ++i)
- {
- char c;
- if(!stack_pop(&stk, &c))
- {
- fprintf(stderr, "Error: stack is empty\n");
- exit(1);
- }
- printf("%c (%d)\n", c, c);
- }
- exit(0);
- }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
для стандартных функций ввода-вывода, для работы со временем и для генерации случайных чисел. - Определяем размер стека (10 элементов).
- Создаём структуру stack, которая содержит массив данных типа char и целочисленный индекс.
- В функции stack_init инициализируем индекс элемента стека.
- В функции stack_push проверяем, полон ли стек. Если да, то выводим сообщение об ошибке и завершаем программу. Иначе добавляем элемент в стек и выводим его на экран.
- В функции stack_pop проверяем, пуст ли стек. Если да, то выводим сообщение об ошибке и завершаем программу. Иначе извлекаем элемент из стека и выводим его на экран.
- В функции rand_char генерируем случайный символ от заданных символов '!' до '~'.
- В функции main создаём экземпляр стека, инициализируем его и заполняем случайными символами до максимального значения размера стека. Выводим все элементы стека на экран.
- Выводим сообщение о пустом стеке и завершаем программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д