Постановка задачи.

_________________________________________________________________________




Предположим, что нам понадобилось записать последовательность чисел неопределенной длины в массив. Недолго думая мы воспользуемся массивом. В процессе работы нам вдруг понадобилось увеличить максимальное кол-во чисел в нашей последовательности. И что же мы делаем? Залазим в код проги и меняем константу отвечающую за максимальное число элементов в массиве. Логично предположение сразу поставить значение константы равное большому числу например 1000 или 10000... Но как же экономия памяти и нет гарантий, что нам когда-нибудь не понадобиться 10001 элемент. В том случае, если вы используете свое приложение то конечно можно каждый раз менять код программы, хотя это и не удобно, но если вашим приложением пользуется другой человек далекий от программирования. Что тогда?

Появляется мысль создать такой структурированный тип данных в котором можно максимальное число элементов представлять переменной и соответственно изменять в процессе работы самой программы, не меняя при этом ее кода. А что если увеличивать максимальное число элементов массива непосредственно перед добавлением элемента и уменьшать его при удалении? Хорошо звучит верно? В такой ситуации на ум приходит идея создать свой тип данных удовлетворяющий нашим требованиям.

Для того, что бы выделять дополнительную память для нового элемента и освобождать ее после удаления логично было бы воспользоваться динамической памятью. Если вы не знаете, что это такое и как ей пользоваться обратитесь к содержанию предыдущий статьи из данного раздела.

Что должен содержать каждый элемент данного списка?

1)Информационная часть.(хранящую в себе вводимую вами информацию)
2)Адресную часть.(для связи между элементами)

Можно создать список с одной адресной частью, тогда придется для обращения к нужному элементу списка, пробегать его от первого. Такой список называется однонаправленным или односвязным. Так же можно воспользоваться списком с двумя адресами, он имеет ряд приемуществ перед односвязным, например для обращения к нужному элементу списка не нужно пробегать все элементы перед ним начиная с первого. Такой список называется двунаправленным или двусвязным.

Идея реализации списков очень проста. У списка существует, как мы сказали ранее, информационная часть. И два адреса. Первый адрес назовем его previus ссылается на предыдущий элемент, второй адрес назовем его next ссылается на следующий элемент. У только что созданного списка адреса никуда не ведут. Если мы добавляем элемент после выделенного элемента, то адресная часть previus у вновь созданного элемента ссылается на уже созданный (выделенный элемент), а адресная часть next указывает на элемент следующий за выделенным.Если выделенный элемент первый, то адресная часть у вновь созданного элемента никуда не будет вести. Графическую схему списка можно увидеть на схеме.


назад


___________________________________________________________________
Авторские права © 2000, Hunter'у Переработано 08.01.05 Ваши отклики и пожелания пишите мне

Hosted by uCoz