Динамически растущий стек на массиве, исправить ошибки - C (СИ)

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

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

Есть код. В строках с номерами 22, 27 и 44 получаю ошибки. Помогите исправить ситуацию. Ошибка: a value of type void* cannot be assigned to an entity of type T
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
                                        /*Динамический растущий стек на массиве*/
 
typedef int T;
typedef struct Stack_tag {
    T *data;
    size_t size;
    size_t top;
} Stack_t;
 
#define INIT_SIZE 10/
#define MULTIPLIER 2
#define STACK_OVERFLOW  -100
#define STACK_UNDERFLOW -101
#define OUT_OF_MEMORY   -102
 
Stack_t* createStack() {
    Stack_t *out = NULL;
    out = malloc(sizeof(Stack_t));
    if (out == NULL) {
        exit(OUT_OF_MEMORY);
    }
    out->size = INIT_SIZE;
    out->data = malloc(out->size * sizeof(T));
    if (out->data == NULL) {
        free(out);
        exit(OUT_OF_MEMORY);
    }
    out->top = 0;
    return out;
}
 
void deleteStack(Stack_t **stack) {
    free((*stack)->data);
    free(*stack);
    *stack = NULL;
}
 
void resize(Stack_t *stack) {
    stack->size *= MULTIPLIER;
    stack->data = realloc(stack->data, stack->size * sizeof(T));
    if (stack->data == NULL) {
        exit(STACK_OVERFLOW);
    }
}
 
void push(Stack_t *stack, T value) {
    if (stack->top >= stack->size) {
        resize(stack);
    }
    stack->data[stack->top] = value;
    stack->top++;
}
 
T pop(Stack_t *stack) {
    if (stack->top == 0) {
        exit(STACK_UNDERFLOW);
    }
    stack->top--;
    return stack->data[stack->top];
}
T peek(const Stack_t *stack) {
    if (stack->top <= 0) {
        exit(STACK_UNDERFLOW);
    }
    return stack->data[stack->top - 1];
}
 
int main(){
 
    int i;
    Stack_t *s = createStack();
 
    for (i = 0; i < 300; i++) {
        push(s, i);
    }
    for (i = 0; i < 300; i++) {
        printf("%d ", peek(s));
        printf("%d ", pop(s));
    }
 
    deleteStack(&s);
    _getch();
    _getch();
 
}

Решение задачи: «Динамически растущий стек на массиве, исправить ошибки»

textual
Листинг программы
out = (Stack_t*) malloc(sizeof(Stack_t));

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

  1. out - это указатель на структуру Stack_t, которая будет представлять стек.
  2. Stack_t - это структура данных, используемая для представления стека.
  3. malloc - это функция, которая выделяет память под новую переменную типа Stack_t.
  4. sizeof(Stack_t) - это выражение, которое вычисляет размер памяти, необходимый для хранения одной переменной типа Stack_t.

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


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

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

8   голосов , оценка 3.75 из 5
Похожие ответы