Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Шрифт:
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;
}
}
/********************************************************************/
/*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
Stack Empty!
Stack is not full.
Stack top: 0
Stack Empty!
Cannot print - stack is empty!
Before push - stack pointer: 0
Stack is not full.
stack item after push: 11
stacktop after push: 1
Before push - stack pointer: 1
Stack is not full.
stack item after push: 12
stacktop after push: 2
Поделиться с друзьями: