Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

В указатель stl помещается число new item



.............. п


stl=2024

Рис. 1.23

Для иллюстрации работы программы построим таблицу (табл. 2.6).

Таблица 2.6

Изменение значений переменных в процессе работы програмы

Адрес stl Старое значение stl Новое значение stl Адрес info Адрес next Значение info Значение next
  NULL         NULL
             
             

Графическое представление работы программы представлено на рис. 1.24.

Функция pop. Параметрами функции pop являются: a) s — указатель на указатель на структуру типа stack, б) указатель error на переменную типа int. Функция возвращает значение типа int (значение переменной oldinfo). Объект old item — указатель на старый элемент стека, которому присваивается значение указателя s.

Рассмотрим пошагово работу функции pop.

Шаг 1. Объявляется указатель на структуру типа stack (STACK *stl;).

Шаг 2. С помощью функции push в стек помещаются числа 1200, 13, 125.


info next   info next   info next
1200 | 0   13 | 2202 -* 125 | 2210
ч*  

t

stl........

push(&stl,1200)


t

.... >stl.........

push(&stl,13)


t

.... ->stl

push(&stl?125)


Графическое представление стека


St1   info next   info next  
      & <w     V
  ^       —^

info next
   

Рис. 1.24 Шаг З. Из стека выталкиваются элементы. Вызывается функция

pop(&st\, Scerror).

В качестве аргументов функции используются: адрес указателя st\ и адрес переменной error.

Шаг 4. В теле функции pop объявляется указатель на структуру типа stack (имя указателя old item). Указателю old item присваивается значение указателя s:

STACK *old_item = *s;,

т. е. переменной old item присваивается адрес верхнего элемента стека (рис. 2.25).

  Значение
Л "
1 1 1 М.............. 1X1...................... IXMXM 1 1 1
old_item=stl; SU ^° nest Верхний элемент стека

Рис. 1.25


Шаг 5. Если значение *s (т. е. stX) не равно 0, то выполняются следующие действия:

1. Строка

old info = old item -> info.

Переменной old info присваивается значение верхнего элемента стека.

2. Строка

*s = (*s) -> next.

Указатель st\ передвигается на следующий узел.

3. С помощью строки

free(old item);

освобождается блок памяти, на который указывает old item (т.е. удаляется узел). На рис. 1.26 приведена иллюстрация работы функции pop на 5-м шаге.

ч * info пай   info next **--■,■ *ь info next  
>     а   NULL  
С * р   ^ ■ ^
X \ stl------------------ -------------- > "3 stl ^        
                   

Рис. 1.26

Шаг 6. Если значение указателя st\ равно 0, то переменной error присваивается значение 1. (Переменная error сигнализирует об ошибках при работе со стеком. Если error = 1, то произошла ошибка. Если error = 0, то ошибки нет.)

Шаг 7. Функция возвращает значение переменной old info (т. е. функция возвращает число, вытолкнутое из стека). Если операция pop выполнена успешно, то error = 0, в противном случае error = 1.

Функция реек. Параметрами данной функции являются: a) &st\ — адрес указателя st\ (т. е. адрес указателя, хранящего адрес стека), б) &error — адрес переменной error. Функция возвращает значение типа int.

Если значение указателя stl не равно NULL, то переменной error присваивается значение 0, и функция возвращает значение верхнего элемента стека (значение переменной info).


Если значение указателя st\ равно NULL, то переменной error присваивается значение 1, и функция возвращает значение 0. (Если в стеке не менее одного элемента, то error = 0; если в стеке нет элементов, то error = 1.)





Дата публикования: 2014-11-04; Прочитано: 327 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...