ВУЗ:
Составители:
Рубрика:
20
Из рис. 3 видно, что каждый объект стека связан с
последующим с помощью указателя next. Если
указатель next равен NULL, то достигнут конец стека.
Особенность работы со стеком заключается в том, что
новый объект всегда добавляется в начало списка.
Удаление также возможно только для первого
элемента. Таким образом, данная структура реализует
очередь по принципу «
первым вошел, последним
вышел». Такой принцип характерен при вызове
функций в рекурсии, когда адрес каждой
последующей функции записывается в стеке для
корректной передачи управления при ее завершении.
Для описания объектов составляющих стек
можно воспользоваться структурами, например,
следующее определение задает шаблон для описания
объекта данных стека:
typedef struct tag_obj {
char name[100];
struct tag_obj* next;
} OBJ;
Здесь поле name – символическое имя объекта, а next – указатель на
следующий объект. Зададим указатель top как глобальную переменную со
значением равным NULL:
OBJ* top = NULL;
и введем функцию для добавления нового объекта в стек:
void push(char* name)
{
OBJ* ptr = (OBJ *)malloc(sizeof(OBJ));
strcpy(ptr->name,name);
ptr->next = top;
top = ptr;
}
Данная функция в качестве аргумента принимает указатель на строку
символов, которые составляют имя добавляемого объекта. Внутри функции
инициализируется указатель ptr на новый созданный объект. В поле name
записывается переданная строка, а указатель next инициализируется на первый
объект. Таким образом, добавленный объект ставится на вершину списка.
Для извлечения объекта из стека реализуется следующая функция:
void pop()
{
Объект 1
*next
*top
Объект 2
*next
Объект N
*next
…
NULL
Рис. 3. Организация
структуры стека
Страницы
- « первая
- ‹ предыдущая
- …
- 18
- 19
- 20
- 21
- 22
- …
- следующая ›
- последняя »
