Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комплект Информатика / Лабораторный практикум.doc
Скачиваний:
178
Добавлен:
22.05.2015
Размер:
6.45 Mб
Скачать

1.5 Алгоритм добавления звена к очереди.

Звено добавляется в конец очереди.

Рисунок 9 - Исходная очередь

    1. Построение добавляемого звена:

r = new (node); // создание узла очереди

(*r).elem = Элем; // указатель на первый элемент

(*r).sled = NULL; // указатель на

//следующий (пустой) узел

Рисунок 10 - Заполнение добавляемого звена

2. Присоединяем звено к очереди:

(*ko).sled = r; // присвоение указателя конца

//новому звену очереди

Рисунок 11 - Результат присоединения звена

  1. "Настраиваем" указатель koна конец очереди:

ko = r; // конец очереди есть добавляемое звено

Изобразим результат добавления звена:

Рисунок 12 –«Настройка» указателя

В результате добавляемое звено стало последним звеном очереди.

Оформим алгоритм в виде функции на языке C++:

void DOBAVLENIE (node *no, node *ko, int el)

// Добавление звена с информационным полем el

//* к очереди, определенной указателями *no и *ko.

{ // открытие тела функции DOBAVLENIE

node *r; // указатель начала очереди

r = new (node); // создание узла

(*r).elem = el; // указатель на введенный элемент

(*r).sled = NULL; // указатель на пустой узел

if (*no!=NULL)//если очередь не пуста

{ // открытие if

(*ko).sled = r; // присвоение указателя очереди началу

//нового звена

*ko = r; // указатель хвоста очереди это созданное

//звено

} // закрытие if

Else // иначе

{ // открытие else

*no = r; //указатель головы на новом звене

*ko = r; // указатель хвоста на новом звене

} //закрытие else

} // закрытие тела функции DOBAVLENIE

Алгоритм удаления звена из очереди.

Пусть очередь не пуста (no!=NULL). Изобразим ее схематически:

Рисунок 13 - Очередь

Приступим к удалению звена. Напомним, что звено удаляется из очереди из ее начала.

  1. Сохраним удаляемый элемент:

klad = (*no).elem; //первый элемент очереди

// сохранен в переменной klad

Рисунок 14 - Сохранение удаляемого элемента

  1. Сохраним указатель на удаляемый элемент и "перенастроим" указатель на начало очереди:

q = no; // сохранение указателя на удаляемый элемент

no = (*no).sled; // присваивание указателя начала

// очереди следующему элементу

Рисунок 15 –«Перенастройка» указателя на начало очереди

  1. Теперь необходимо включить в список свободной памяти удаленное из очереди звено с помощью вызова функции:

delete q; //удаление звена очереди

Рисунок 16 - Возврат памяти

Запишем приведенную схему в виде функции на языке C++:

void YDALENIE (node *no, node *ko, int klad)

// Удаление звена из очереди, определенной указателями //*no и *ko. Значение информационного поля //удаленного звена

// сохраняется в параметре klad.

{// открытие тела функции YDALENIE

node *q; // указатель на удаляемое звено

if (*no==NULL)// если очередь пуста

cout<< "Удалить нельзя, так как очередь пуста!\n";

// вывод текста на дисплей

else // иначе

{ // открытие else

*klad = (*no).elem;//сохранение первого элемента в klad

q = *no; // сохранение указателя на удаляемый элемент

//в q

*no = (*no).sled; // присваивание указателя начала

// очереди следующему элементу

deleteq; // удаление первого звена

} // закрытие else

}// закрытие тела функции YDALENIE