- •Алгоритм.
- •Множественный выбор switch.
- •Оператор do … while ( с постусловием ).
- •Do оператор ;
- •Оператор цикла for.
- •Использование операторов break и continue в циклах.
- •Функции ввода-вывода.
- •Общий вид программы.
- •Вложенные циклы.
- •Адреса и указатели.
- •Массивы.
- •Int a[10] ; // целочисленный вектор из 10 элементов.
- •Векторы.
- •Сортировка вектора.
- •Матрицы.
- •Строки.
- •Подпрограммы.
- •Директива препроцессора #define .
- •Области видимости.
- •Классы памяти.
- •Рекурсия.
- •Подготовка к зачету.
- •Структуры.
- •Int ball [4] ; // описание третьего поля – оценки.
- •Очередь.
- •Линейные списки.
- •Деревья.
- •Int n, k ; // ее размерности
- •Void print ( void ) // печать матрицы
- •Определение методов вне класса.
- •Частные и общие данные.
- •Конструктор.
- •Перегрузка операторов.
- •Неявный указатель *this.
- •Дружественные функции.
- •Класс множество.
- •Наследование.
- •Объекто-ориентированное программирование.
- •Список вопросов к экзамену.
- •Литература.
Очередь.
Очереди используются при создании компиляторов, а также при обслуживании супер ЭВМ, где одновременно выполняются много программ. Очереди бывают обычные и преоритетные.
Очередь формируется и работает по принципу – первый пришел, первый ушел. Ставим очередной элемент в «хвост» очереди, а вынимаем из «головы».
Адрес информация
Следующего
хвост
голова
Пустая ссылка
Операции, определенные над очередью:
1. Если пустая, то создать очередь.
2. Добавить в очередь, т.е. в «хвост».
3. Извлечь из очереди, т.е. из «головы», если очередь не пуста.
4. Ходить по очереди, искать проверять в ней – нельзя!
Практические принципы работы с очередью такие же, как со стеком. Измените предыдущую программу, так чтобы она создавала очередь и извлекала из нее все элементы до «а».
Линейные списки.
Линейные списки широко используются при работе с БД (базами данных). Так же как стеки и очереди не требуют определения объема памяти. Списки бывают односвязные и двухсвязные.
ОДНОСВЯЗНЫЙ СПИСОК. ДВУХСЯЗНЫЙ СПИСОК
А дрес информация информация
Следующего
Пустая ссылка
В двухсвязном списке два адресных поля, одно указывает на адрес предыдущего, другое на адрес последующего и одно информационное поле. В односвязном списке адрес первого, самого верхнего на рисунке элемента является адресом всего списка, без этого адреса список будет потерян, все остальные адреса хранятся в списке, и могут быть извлечены последовательно. В двухсвязном списке адресом списка может быть адрес его любого элемента, все остальные могут быть извлечены последовательно в любую сторону.
Как односвязные, так и двухсвязные списки могут быть циклическими. В этом случае, пустая ссылка заменяется на адрес начала списка в - односвязном, а в двухсвязном обе пустые заменяются на адреса конца и начала.
Операции, определенные для списков:
1. Если пуст, то создать список.
2. Поиск в списке элемента.
3. Вставка в список элемента.
4. Удаление из списка элемента, если не пуст.
5. Только для односвязного определена операция – инвертирования списка, т.е. изменение направления адресных ссылок на противоположные.
Опишем структуру двухсвязного списка и создадим два первых его элемента.
struct spis {
char text [10] ;
spis *pred ;
spis *next ;
}
main ()
{ spis * ps, *pm ;
// создание и заполнение первого элемента.
ps = new spis ;
ps->pred=NULL ;
ps->next=NULL ;
gets ( ps->text) ;
// создание и заполнение второго элемента, и установление связей между ними.
pm = new spis ;
pm->pred = ps ;
pm->next =NULL ;
ps->next= pm ;
gets (pm->text ) ;
}
По аналогии с программой создания стека, создайте двухсвязный список произвольной длины.
Все эти представления динамических структур – цепные. Существует и более устаревший вариант – сплошное представление динамических структур, т.е. моделирование списков через вектора. Таким образом, работали со списками на языке FORTRAN. В этом случае теряется главное достоинство динамических структур – произвольный объем памяти.