Книга: Программирование для Linux. Профессиональный подход
Листинг А.5. (stack.c) Стек унарных чисел
Листинг А.5. (stack.c) Стек унарных чисел
/* Реализация стека значений типа "number". */
#include <assert.h>
#include <stdlib.h>
#include "definitions.h"
/* Создание пустого стека. */
Stack create_stack() {
return 0;
}
/* Эта функция возвращает ненулевое значение,
если стек пуст. */
int empty_stack(Stack stack) {
return stack == 0;
}
/* Удаление числа, находящегося на вершине стека.
Если стек пуст, программа аварийно завершается. */
number pop_stack(Stack* stack) {
number answer;
Stack rest_of_stack;
assert(!empty_stack(*stack));
answer = (*stack)->element_;
rest_of_stack = (*stack)->next_;
free(*stack);
*stack = rest_of_stack;
return answer;
}
/* Добавление числа в начало стека. */
void push_stack(Stack* stack, number n) {
Stack new_stack =
malloc(sizeof(struct StackElement));
new_stack->element_ = n;
new_stack->next_ = *stack;
*stack = new_stack;
}
/* Очистка стека. */
void clear_stack(Stack* stack) {
while(!empty_stack(*stack)) {
number top = pop_stack (stack);
destroy_number(top);
}
}
В листинге А.6 показаны объявления типов данных и функций работы со стеком и унарными числами.
- Листинг А.4. (number.c) Арифметика унарных чисел
- А.3.5. Исходные тексты программы-калькулятора
- Листинг А.6. (definitions.h) Файл заголовков для файлов number.c и stack.c
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Класс стек
- Листинг 15.11. Код для загрузки файла с Web-сервера
- 4. Свойства унарных операций
- 9.2.1. Более строгая реализация стека
- 3.2 Сетевой стек Windows NT
- Листинг 3.1. Конфигурационный файл lilo.conf
- Листинг 3.2. Файл настройки программы inittab
- Листинг 3.3. Файл