Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Функция формирования элемента стека
Простейший вид функции (push), в которую в качестве параметров передаются указатель на вершину и введенная информация, а измененное значение вершины возвращается в точку вызова оператором return: Stack* InStack(Stack *p, int in) { Stack *t = new Stack; // Захватываем память для элемента t -> info = in; // Формируем информационную часть t -> next = p; // Формируем адресную часть return t; } Обращение к этой функции для добавления нового элемента «а» в стек, вершиной которого является указатель begin: begin = InStack(begin, a);
Алгоритм просмотра стека (без извлечения его элементов, т.е. без сдвига вершины) 1. Устанавливаем текущий указатель на начало списка: t = begin; 2. Начинаем цикл, работающий до тех пор, пока указатель t не равен NULL (признак окончания списка). 3. Выводим информационную часть текущего элемента t -> info на экран. 4. Текущий указатель переставляем на следующий элемент, адрес которого находится в поле next текущего элемента: t = t -> next; 5. Конец цикла. Функция, реализующая рассмотренный алгоритм: void View(Stack *p) { Stack *t = p; while(t! = NULL) { // Вывод на экран информационной части, например, cout < < t -> info < < endl; t = t -> Next; } } Обращение к этой функции: View(begin); Блок-схема функции View представлена на рис. 3.1. Рис. 3.1
Функция получения информации из вершины стека c извлечением: Stack* OutStack(Stack* p, int *out) { Stack *t = p; // Устанавливаем указатель t на вершину p *out = p -> info; p = p -> next; // Переставляем вершину p на следующий delete t; // Удаляем бывшую вершину t return p; // Возвращаем новую вершину p } Обращение к этой функции: begin = OutStack(begin, & a); информацией является переданное по адресу значение «а». Функция освобождения памяти, занятой стеком: void Del_All(Stack **p) { Stack *t; while(*p! = NULL) { t = *p; *p = (*p) -> Next; delete t; } } Обращение к этой функции: Del_All(& begin); после ее выполнения указатель на вершину begin будет равен NULL.
|