Программирование на языке С. Наместников С.М. - 26 стр.

UptoLike

Составители: 

26
на последний объект, т.е. быть равным указателю current. Затем проверяется,
является ли добавляемый объект первым (head == NULL), и если это так, то
указатель head приравнивается указателю current. Наконец, указатель tail
инициализируется на последний объект. Последняя строка функции возвращает
указатель на созданный объект.
Для полноценной работы связного списка необходимо ввести функцию
удаления элемента, которая может быть
записана следующим образом:
OBJ* del_obj(OBJ* current)
{
if(current == head)
if(current->prev != NULL) head = current->prev;
else head = current->next;
if(current == tail)
if(current->next != NULL) tail = current->next;
else tail = current->prev;
if(current->prev != NULL)
current->prev->next = current->next;
if(current->next != NULL)
current->next->prev = current->prev;
free(current);
return head;
}
Функция del_obj() в качестве аргумента использует указатель на объект,
который следует удалить. Сначала выполняется проверка для инициализации
указателя head, в том случае, если удаляется первый объект, на который он
указывает. Аналогичная проверка осуществляется для tail. Затем
осуществляется проверка: если предыдущий объект относительно текущего
существует, то его указатель на следующий объект следует переместить.
Аналогичная
проверка выполняется и для следующего объекта относительно
удаляемого. После настройки всех указателей вызывается функция free() для
удаления объекта из памяти и возвращается указатель на первый объект.
Введенные функции в программе можно использовать следующим
образом:
int main()
{
OBJ *current = NULL;
int year;
char title[100], author[100];
do
{
printf("Введите название книги: ");
scanf("%s",title);
printf("Введите автора: ");
scanf("%s",author);
printf("Введите год издания: ");
scanf("%d",&year);