Двойной указатель - Правильно выполнить присваивание - C (СИ)

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

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

Ребят, помогите правильно выполнить присваивание
Листинг программы
  1. int pop(struct stack **st) {
  2. struct stack *temp = *st;
  3. *st = *st->next; //ошибка
  4. free(temp);
  5. }

Решение задачи: «Двойной указатель - Правильно выполнить присваивание»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct stack
  5. {
  6.     struct stack *next;
  7. };
  8.  
  9. void pop(struct stack **top)
  10. {
  11.     struct stack *temp = *top;
  12.     printf("pop from the top: %p\n", temp);
  13.     *top = (*top)->next;
  14.     free(temp);
  15. }
  16.  
  17. int main(void)
  18. {
  19.     struct stack *top = malloc(sizeof *top);
  20.     top->next = NULL;
  21.     printf("top of the stack: %p\n", top);
  22.     pop(&top);
  23.     exit(0);
  24. }

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

В данном коде представлен простейший вариант двусвязного списка, реализуемого с помощью структур и динамической памяти в языке C.

  1. #include — подключаем стандартную библиотеку для работы с консолью (отвечает за ввод/вывод данных).
  2. #include — подключаем стандартную библиотеку для работы с памятью (отвечает за выделение и освобождение памяти).
  3. struct stack — объявляем структуру данных, которая будет представлять элемент списка. В данном случае, в структуре будет храниться только указатель на следующий элемент списка.
  4. void pop(struct stack top)** — объявляем функцию, которая будет удалять (освобождать память) элемент списка, на который указывает указатель top.
  5. int main(void) — объявляем основную функцию программы, которая будет выполнять основные действия программы.
  6. struct stack top = malloc(sizeof top) — выделяем память под структуру stack (размер структуры равен размеру указателя, так как внутри структуры указан только указатель).
  7. top->next = NULL; — инициализируем указатель next (указатель на следующий элемент списка) с значением NULL (этот элемент еще не определен).
  8. printf(top of the stack: %p\n, top); — выводим адрес (как значение указателя) вершины списка.
  9. pop(&top) — вызываем функцию pop, передавая ей указатель на вершину списка.
  10. exit(0) — завершаем работу программы. Данный код создаёт список из одного элемента, выводит его вершину, затем удаляет эту вершину и завершает работу программы.

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


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

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

15   голосов , оценка 3.933 из 5

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

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

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