Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций по курсу 'Информатика'.doc
Скачиваний:
4
Добавлен:
14.07.2019
Размер:
483.84 Кб
Скачать

Очередь.

Очереди используются при создании компиляторов, а также при обслуживании супер ЭВМ, где одновременно выполняются много программ. Очереди бывают обычные и преоритетные.

Очередь формируется и работает по принципу – первый пришел, первый ушел. Ставим очередной элемент в «хвост» очереди, а вынимаем из «головы».

Адрес информация

Следующего

хвост

голова

Пустая ссылка

Операции, определенные над очередью:

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. В этом случае теряется главное достоинство динамических структур – произвольный объем памяти.