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

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

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

Есть код. В строках с номерами 22, 27 и 44 получаю ошибки. Помогите исправить ситуацию. Ошибка: a value of type void* cannot be assigned to an entity of type T
Листинг программы
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <malloc.h>
  5. /*Динамический растущий стек на массиве*/
  6. typedef int T;
  7. typedef struct Stack_tag {
  8. T *data;
  9. size_t size;
  10. size_t top;
  11. } Stack_t;
  12. #define INIT_SIZE 10/
  13. #define MULTIPLIER 2
  14. #define STACK_OVERFLOW -100
  15. #define STACK_UNDERFLOW -101
  16. #define OUT_OF_MEMORY -102
  17. Stack_t* createStack() {
  18. Stack_t *out = NULL;
  19. out = malloc(sizeof(Stack_t));
  20. if (out == NULL) {
  21. exit(OUT_OF_MEMORY);
  22. }
  23. out->size = INIT_SIZE;
  24. out->data = malloc(out->size * sizeof(T));
  25. if (out->data == NULL) {
  26. free(out);
  27. exit(OUT_OF_MEMORY);
  28. }
  29. out->top = 0;
  30. return out;
  31. }
  32. void deleteStack(Stack_t **stack) {
  33. free((*stack)->data);
  34. free(*stack);
  35. *stack = NULL;
  36. }
  37. void resize(Stack_t *stack) {
  38. stack->size *= MULTIPLIER;
  39. stack->data = realloc(stack->data, stack->size * sizeof(T));
  40. if (stack->data == NULL) {
  41. exit(STACK_OVERFLOW);
  42. }
  43. }
  44. void push(Stack_t *stack, T value) {
  45. if (stack->top >= stack->size) {
  46. resize(stack);
  47. }
  48. stack->data[stack->top] = value;
  49. stack->top++;
  50. }
  51. T pop(Stack_t *stack) {
  52. if (stack->top == 0) {
  53. exit(STACK_UNDERFLOW);
  54. }
  55. stack->top--;
  56. return stack->data[stack->top];
  57. }
  58. T peek(const Stack_t *stack) {
  59. if (stack->top <= 0) {
  60. exit(STACK_UNDERFLOW);
  61. }
  62. return stack->data[stack->top - 1];
  63. }
  64. int main(){
  65. int i;
  66. Stack_t *s = createStack();
  67. for (i = 0; i < 300; i++) {
  68. push(s, i);
  69. }
  70. for (i = 0; i < 300; i++) {
  71. printf("%d ", peek(s));
  72. printf("%d ", pop(s));
  73. }
  74. deleteStack(&s);
  75. _getch();
  76. _getch();
  77. }

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

textual
Листинг программы
  1. 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

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

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

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