Написать функцию 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);
}

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

  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
Похожие ответы