Фраза "Структурная переменная описывается с помощью переменной структурного типа" на мой Взгляд является тафтология. Из нее сложно понять суть утверждения. Хотелось бы полке понятного описания. |
Функции в примерах
Структуры данных
Решение комбинаторных задач предполагает выделение структур сложного типа с их последующей реализацией средствами выбранного языка программирования. При этом структура данных может не зависеть от конкретных языковых конструкций (абстрактная структура данных ).
Под структурой данных понимают совокупность элементов фиксированных типов и набор базисных операций, определяющих организацию и способ обработки данных.
Рассмотрим некоторые основные структуры данных.
Стеки
Стеком называется структура данных, загрузка или увеличение элементов для которой осуществляется с помощью указателя стека в соответствии с правилом LIFO ( last-in, first-out - последним введен, первым выведен).
Указатель стека sp (stack pointer) содержит в любой момент времени индекс (адрес) текущего элемента, который является единственным элементом стека, доступным в данный момент времени для работы со стеком (для случая, когда указатель стека всегда задает ячейку, находящуюся непосредственно над его верхним элементом).
- Начальная установка:
sp=1;
- Загрузка элемента х в стек:
stack[sp]=x; sp=sp+1;
- Извлечение элемента из стека:
sp=sp-1; x=stack[sp];
- Проверка на переполнения и загрузка элемента в стек:
if(sp<=sd) {stack[sp]=x;sp=sp+1} else// переполнение
- Проверка наличия элементов и извлечение элемента стека:
if (sp>1){sp=sp-1;x=stack[sp]} //антипереполнение
- Чтение данных из указателя стека без извлечения элемента:
x=stack[sp-1];
Очереди
Очередь - одномерная структура данных, для которой загрузка или извлечение элементов осуществляется с помощью указателей начала ( head ) и конца ( tail ) очереди в соответствии с правилом FIFO ( first-in, first-out - первым введен, первым выведен).
- Начальная установка:
head=1; tail=1;
- Добавление элемента:
queue[tail]=x; tail=tail+1; if(tail>qd) tail=1;
- Исключение элемента:
x=queue[head]; head=head+1; if(head>qd) tail=1;
- Проверка переполнения очереди и включение в нее элемента:
temp=tail+1; if(temp=head) {Переполнение} else {queue[tail]=x; tail=temp}
- Проверка наличия элементов и исключение элемента х:
if(head==tail) { очередь пуста} else{ x=queue[head]; head=head+1; if(head>qd) head=1;}
Отметим, что, при извлечении элемента из очереди, все элементы могут также перемещаться на один шаг к ее началу.