Практикум по курсу "Алгоритмизация и программирование". Часть 2. Андрианова А.А - 82 стр.

UptoLike

А.А. Андрианова, Л.Н. Исмагилов, Т.М. Мухтарова .
{
help=new Node;
help->info=k;
current->next=help;
help->prev=current;
current=current->next;
}
// установка признака конца двусвязного списка
L.tail=current;
current->next=NULL;
fclose(f);
return 1;
}
Задача 2. Дан двусвязный список, содержащий целые числа. Определить,
является ли он симметричным.
При решении задачи используются две переменные-указатели b и e для
просмотра элементов с начала и с конца списка соответственно. Для этого их
начальные значения устанавливаются на L.head и L.tail. Смещая их од-
новременно (b на следующий элемент, e на предыдущий), проверяем значе-
ния в этих узлах на равенство. Смещение заканчивается в одном из двух слу-
чаев:
1) встретилась неравная пара значений;
2) были просмотрены все элементы списка. При нечетном количестве
узлов адреса b и e совпадут (рис. 5.2).
При четном количестве узлов адрес b будет указывать на первый элемент
второй половины списка, а e на последний элемент первой половины. В
этом случае в качестве условия выхода из цикла можно использовать одно из
следующих равенств: b->prev=e или e->next=b (рис. 5.3).
Если встретилась неравная пара значений, то смещение указателей пре-
кращается, и функция возвращает значение false. Если просмотрены все
элементы, то список является симметричным, и функция возвращает значение
true. По определению пустой список является симметричным.
82
А.А. Андрианова, Л.Н. Исмагилов, Т.М. Мухтарова                    .
            {
                   help=new Node;
                   help->info=k;
                   current->next=help;
                   help->prev=current;
                   current=current->next;
            }

            // установка признака конца двусвязного списка
            L.tail=current;
            current->next=NULL;
            fclose(f);
            return 1;
    }


    Задача 2. Дан двусвязный список, содержащий целые числа. Определить,
является ли он симметричным.
    При решении задачи используются две переменные-указатели b и e для
просмотра элементов с начала и с конца списка соответственно. Для этого их
начальные значения устанавливаются на L.head и L.tail. Смещая их од-
новременно (b на следующий элемент, e – на предыдущий), проверяем значе-
ния в этих узлах на равенство. Смещение заканчивается в одном из двух слу-
чаев:
    1) встретилась неравная пара значений;
    2) были просмотрены все элементы списка. При нечетном количестве
узлов адреса b и e совпадут (рис. 5.2).
    При четном количестве узлов адрес b будет указывать на первый элемент
второй половины списка, а e – на последний элемент первой половины. В
этом случае в качестве условия выхода из цикла можно использовать одно из
следующих равенств: b->prev=e или e->next=b (рис. 5.3).
    Если встретилась неравная пара значений, то смещение указателей пре-
кращается, и функция возвращает значение false. Если просмотрены все
элементы, то список является симметричным, и функция возвращает значение
true. По определению пустой список является симметричным.




                                            82