Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 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 {
Поделиться:
Популярные книги
Законы Рода. Том 10
10. Граф Берестьев
Фантастика:
юмористическая фантастика
аниме
фэнтези
5.00
рейтинг книги
Соль этого лета
1. Самбисты
Любовные романы:
современные любовные романы
6.00
рейтинг книги
Доверься мне
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Зауряд-врач
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Идеальный мир для Лекаря 29
29. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
В погоне за женой, или Как укротить попаданку
Фантастика:
фэнтези
6.62
рейтинг книги
Плохой парень, Купидон и я
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Достигая Вершин
1. Достигая Вершин
Фантастика:
фэнтези
5.00
рейтинг книги
Охота на попаданку. Бракованная жена
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Идеальный мир для Лекаря 12
12. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Лейтенант космического флота
1. Звезды на погонах
Фантастика:
боевая фантастика
космическая фантастика
космоопера
рпг
фэнтези
фантастика: прочее
5.00
рейтинг книги
Громовая поступь. Трилогия
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Часовое имя
4. Часодеи
Детские:
детская фантастика
9.56
рейтинг книги
Командир Красной Армии
1. Командир Красной Армии
Фантастика:
попаданцы
8.72