Динамически растущий стек на массиве, исправить ошибки - 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));
Объяснение кода листинга программы
out
- это указатель на структуруStack_t
, которая будет представлять стек.Stack_t
- это структура данных, используемая для представления стека.malloc
- это функция, которая выделяет память под новую переменную типаStack_t
.sizeof(Stack_t)
- это выражение, которое вычисляет размер памяти, необходимый для хранения одной переменной типаStack_t
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д