/*stack_full: возвращает ДА если стек полон, и НЕТ в противном случае */
/********************************************************************/
int stack_full(stack a_stack) {
if (a_stack.stack_top == 10) /*проверить не заполнен ли стек */
{ /*произвольный выбор предела стека */
fprintf(outputfile, "\n\nStack Full!");
return YES;
} else {
fprintf(outputfile, "\n\nStack is not full.");
return NO;
}
}
/********************************************************************/
/*print_stack: печать текущего элемента (на вершине стека) */
/********************************************************************/
void print_stack(stack a_stack) {
int i;
if (!(stack_empty(a_stack)))/*проверить не пуст ли стек перед печатью*/
{ /*перейти к основанию стека перед печатью */
for(i = a_stack.stack_top; i=0; i=i-1)
fprintf(outputfile, "\nStack item: %d", a_stack.stack_item[i]);
} else fprintf(outputfile,"\nCannot print - stack is empty!");
}
/********************************************************************/
/*push(stack *, int): запись элемента в стек */
/********************************************************************/
void push(stack *a_stack, int item) {
fprintf(outputfile, "\n\nBefore push - stack pointer: %d",
a_stack-stack_top);
if (!(stack_full(*a_stack))) /*проверка заполнения стека*/
/* перед записью элемента*/
{
a_stack-stack_item[a_stack-stack_top] = item;
fprintf(outputfile, "\nstack item after push: %d",
a_stack-stack_item[a_stack-stack_top]);
a_stack-stack_top = a_stack-stack_top + 1;
fprintf(outputfile, "\nstacktop after push: %d",
a_stack-stack_top);
} else fprintf(outputfile, "\nCannot push - stack is full!");
}
/********************************************************************/
/*pull(stack *): извлечение элемента из стека */
/********************************************************************/
int pull(stack *a_stack) {
int item;
fprintf(outputfile,"\n\nBefore pull - stack pointer: %d",
a_stack-stack_top);
if (!(stack_empty(*a_stack))) /*проверка не пуст ли стек */
/*перед извлечением элемента*/
{
item = a_stack-stack_item[a_stack-stack_top-1];
fprintf(outputfile, "\nstack item pulled: %d", item);
a_stack-stack_top = a_stack-stack_top - 1;
fprintf(outputfile,"\nstacktop after pull: %d",
a_stack-stack_top); return item;
} else fprintf(outputfile, "\nCannot pull - stack is empty!");
}
/********************************************************************/
Мы показали работу этого примера на рис. 8.12. После выполнения этой программы будет выдан следующий код:
Рис. 8.12. Запись в стек и извлечение из стека
Stack top: 0