Книга: Программирование для 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 показаны объявления типов данных и функций работы со стеком и унарными числами.

Оглавление книги


Генерация: 1.474. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз