Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Шрифт:
•
stack_full
: выяснить, не полон ли стек. Это необходимо сделать до использования функции push
; •
print_stack
: распечатать содержимое стека. Основные операции стека показаны на рис. 8.11.
Рис. 8.11. Операции со стеком
Следующий программный код реализует стек с фиксированным массивом.
/********************************************************************/
/*
имя файла: stack.с */
/********************************************************************/
/*включенные файлы*/
#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;
}
}
/********************************************************************/
/*stack_full: возвращает ДА если стек полон, и НЕТ в противном случае */
/********************************************************************/
int stack_full(stack a_stack) {
if (a_stack.stack_top == 10) /*проверить не заполнен ли стек */
{ /*произвольный выбор предела стека */
fprintf(outputfile, "\n\nStack Full!");
return YES;
} else {
Поделиться:
Популярные книги
Черный Маг Императора 6
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Оцифрованный. Том 1
1. Линкор Михаил
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIV
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Штуцер и тесак
1. Штуцер и тесак
Фантастика:
боевая фантастика
альтернативная история
8.78
рейтинг книги
Я снова граф. Книга XI
11. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Болотник
1. Болотник
Фантастика:
попаданцы
альтернативная история
6.50
рейтинг книги
Кодекс Крови. Книга III
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Жестокая свадьба
Любовные романы:
современные любовные романы
4.87
рейтинг книги
Стеллар. Трибут
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Голодные игры
1. Голодные игры
Фантастика:
социально-философская фантастика
боевая фантастика
9.48
рейтинг книги
Последняя Арена 8
8. Последняя Арена
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Черный маг императора 2
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Последний Паладин
1. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Измена. Свадьба дракона
Любовные романы:
любовно-фантастические романы
эро литература
5.00