Алгоритмизации
Скачать 1.15 Mb.
|
АлгоритмудаленияпервогоэлементаизочередиПредположим, что очередь создана, т.е. begin не равен NULL (рекомендуется организовать проверку на равенствоNULLс соответствующей обработкой данной ситуации). Устанавливаем текущий указатель на начало очереди: t = begin; Обрабатываем информационную часть первого элемента очереди, например, выводим на экран. Указатель на начало очереди переставляем на следующий (2-й) элемент begin = begin->Next; Освобождаем память, захваченную под 1-й элемент: free(t); Выводим сообщение, например, «Элемент удален!». Алгоритмыпросмотраочередииосвобожденияпамятивыполняются аналогично стеку (см. п. 15.2). ДвунаправленныйлинейныйсписокБолее универсальным является двунаправленный (двухсвязный) список, в каждый элемент которого кроме указателя на следующий элемент включен и указатель на предыдущий. Для обработки такого списка обычно аналогично очереди используются два указателя – на первый и последний элементы. Графически такой список выглядит следующим образом: begin info(i1) NULL Next info(i2) Prev Next info(i3) Prev Next . . . Введем структуру, в которой (для простоты, как и раньше) информационной частью infoбудут целые числа, а адресная часть состоит из двух указателей на предыдущий (Prev) и следующий (Next) элементы: struct Spis { int info; Spis *Prev, *Next; } ; Для работы со списком декларируем Spis *begin, *end; – указатели на начало и конец списка соответственно. Формирование двунаправленного списка проводится в два этапа – формирование первого элемента и добавление нового. Причем добавление может выполняться как в начало, так и в конец списка. ФормированиепервогоэлементаЗахват памяти под текущий элемент: Spis *t = (Spis*) malloc (sizeof(Spis)); На данном этапе имеем элемент:
t Формируем первый элемент списка: а) формируем информационную часть, например, вводя с клавиатуры: scanf(“%d”, &t -> info); или cin >> t -> info; б) формируем адресные части (первоначально это NULL): t -> Prev = t -> Next = NULL; в) указатели начала и конца списка устанавливаем на этот элемент: begin = end = t; После выполнения указанных действий получили первый элемент списка: begin end
info Prev Next |