/********************************************************************/
/*включенные файлы*/
#include stdio.h /*стандартная библиотека I/O */
#include stdlib.h /*стандартная библиотека динамического распределения*/
/*global variables - объявляет глобальные переменные в header file. */
/* Они приведены здесь, чтобы иллюстрировать общее построение программы.*/
/*определение структуры*/
struct stack_struct {
int stack_top; /*следующая используемая позиция в стеке*/
int stack_item[10]; /*элемент, сохраненный в стеке с фиксированным размером */
}
typedef struct stack_struct stack; /*массив для распознавания имен различных переменных*/
typedef stack *stack_ptr; /*определение указателей на стек */
/*функции-прототипы*/
void initialize_stack(stack);
void push(stack*, int); /*Используется метод передачи параметра по ссылке*/
int pull(stack *); /* когда содержимое стека должно измениться */
int stack_empty(stack);
int stack_full(stack);
void print_stack(stack);
/*переменные*/
int YES=1,NO=0; /*логические флаги */
stack stack1; /*объявление стека */
char *filename;
FILE *outputfile;
void main(void) {
int response;
int stack_item;
/*печать результата в файл/
printf("\n\nEnter a filename for output.");
scanf("%s", filename);
outputfile = fopen(filename, "a");
initialize_stack(stack1);
response = stack_empty(stack1); /*вызов по значению */
response = stack_full(stack1);
print_stack(stack1);
push(stack1, 11); /*вызов по ссылке */
push(stack1, 12);
push(stack1, 13);
push{stack1, 14);
print_stack(stack1);
pull(stack1);
pull(stack1);
pull(stack1);
pull(stack1);
pull(stack1);
fclose(outputfile); /*закрыть выходной файл */
}
/********************************************************************/
/*initialize_stack: установить указатель вершины стека в 0 */
/********************************************************************/
void initialize_stack(stack a_stack) {
a_stack.stack_top=0; /*установить указатель стека в 0*/
}
/********************************************************************/
/*stack_empty: возвращает ДА если стек пуст, и НЕТ в противном случае */
/********************************************************************/
int stack_empty(stack a_stack)
{
fprintf(outputfile, "\n\nStack top: %d", a_stack.stack_top);
if (a_stack.stack_top == 0) /*проверить не пуст ли стек*/
{
fprintf(outputfile, "\nStack Empty!");
return YES;
} else {
fprintf(outputfile, "\nStack is not empty.");
return NO;
}
}
/********************************************************************/