Главная страница

Алгоритмизации


Скачать 1.15 Mb.
НазваниеАлгоритмизации
Дата27.09.2022
Размер1.15 Mb.
Формат файлаdocx
Имя файла12_100229_1_124427 (1).docx
ТипДокументы
#700459
страница29 из 67
1   ...   25   26   27   28   29   30   31   32   ...   67

Алгоритмизвлеченияэлементаизстека


В данном алгоритме вершина beginне сдвигается.

  1. Устанавливаем текущий указатель на вершину стека: t = begin;

  2. Обрабатываем информационную часть текущего элемента (t->info),

например, выводим на экран.

  1. Переставляем указатель текущего элемента на следующий элемент, адрес которого находится в адресной части текущего:

t = t->Next;

      1. Просмотрстека


  1. Устанавливаем текущий указатель на вершину t = begin.

  2. Проверяем, если begin равен NULL, то стек пуст, выводим сообщение и либо завершаем работу, либо переходим на формирование стека.

  3. Если стек не пуст, начинаем выполнять цикл до тех пор, пока текущий указатель t не равен NULL, т.е. пока не обработаем последний элемент, в адресной части которого находится значение NULL.

  4. Выводим на экран информационную часть текущего элемента: printf(“\n Элемент: %d”, t -> info); или cout << t->info;

  5. Переставляем текущий указатель на следующий элемент: t = t -> Next;

  6. Конец цикла.

Функция просмотра стека без сдвига его вершины может выглядеть следующим образом:

void View(Stack *begin)

{

Stack *t = begin; if(begin == NULL) {

puts(“ Стек пуст! ”); return;

}

while( t != NULL) {

printf(“ %d \n”, t->info); t = t -> Next;

}

}

Обращение к этой функции: View(begin);

      1. Алгоритмосвобожденияпамяти,занятойстеком


  1. Начинаем цикл, выполняющийся пока beginне станет равным NULL.

  2. Устанавливаем текущий указатель на вершину стека: t = begin;

  3. Вершину стека переставляем на следующий элемент: begin = t->Next;

  4. Уничтожаем текущий (бывшую вершину) элемент, т.е. освобождаем занятую под него память free(t);

Функция освобождения памяти, занятой стеком, будет выглядеть следующим образом:

void Delete_Stack(Stack **begin) { Stack *t;

while( *begin != NULL) { t = *begin;

*begin = (*begin) -> Next; free(t);

}

}

Параметром данной функции является указатель на указатель, так как значение вершины стека передается в функцию и должно быть возвращено из нее. Тогда обращение к функцииDelete_Stackс контролем ее выполнения будет следующим:

Delete_Stack(&begin); if(begin == NULL)

puts(“ Free! ”);

. . .
      1. 1   ...   25   26   27   28   29   30   31   32   ...   67


написать администратору сайта