Чтение онлайн

ЖАНРЫ

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 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

Поделиться с друзьями: