Структуры данных.
Первое, о чем необходимо позаботиться при работе со ссылочными структурами, — как построить звено, т.е. сколько компьютерных слов используется для одного звена, сколько полей данных мы собираемся иметь в звене и каков должен быть размер этих полей. На рис. 1.2.1 эти характеристики звена опущены, однако разумный выбор может состоять в использовании двух слов для звена (или ячейки), разделенного на три поля, функции которых будут разъяснены ниже: поле типа Т, поле элемента Е и поле ссылки S, как это показано на рис. 1.2.2.
Рис. 1.2.2. Внутреннее представление ячейки, или звена.
Рассмотрим список общего вида . Компьютерное представление этого списка состоит из ячеек, связанных через их ноля ссылок, вместе с предполагаемыми уже данными
представлениями каждого из значений являющихся в свою очередь списками. Поле ссылки ячейки содержит адрес ячейки а поле ссылки ячейки содержит 0. (Разумеется, предполагается, что 0 не является адресом никакой ячейки.) Поле типа i-й ячейки содержит нуль или единицу в зависимости от того, является атомом или списком. Если является атомом, то поле элемента i-й ячейки содержит если список, то поле элемента i-й ячейки содержит координаты некоторого представления списка Координаты списка это адрес первой ячейки его представления. В соответствии с этим внутреннее представление целого числа изображенного на рис. 1.2.1, является таким, как показано на рис. 1.2.3.
Рис. 1.2.3. Полное внутреннее списочное представление целого числа на рис. 1.2.1.
Раз такое решение принято, то во время вычислений все неиспользуемые звенья связаны вместе в произвольном порядке и образуют список свободного места. Когда требуется новое звено, первое звено списка свободного места отщепляется и присоединяется к соответствующему списку данных. Когда список данных становится не нужным в дальнейших вычислениях, его звенья присоединяются к голове списка свободного места. В упражнениях по программированию 1 и 2 к этому параграфу (в конце главы, перед библиографией) читателю поручается написать некоторые из этих процедур. Как для новичка, так и для опытного программиста представляет интерес техника, позволяющая на языках высокого уровня проверить значение данного поля и/или обновить его, не разрушая имеющейся в данном слове информации. Мы разъясним это на следующем примере, использующем десятичную систему счисления.
Пример. Предположим, что число хранится в машинном слове, разделенном на три поля, содержащих 1, 3 и 5 десятичных цифр соответственно, т.е. это число можно представлять себе как 1-234-56789, хотя компьютер воспринимает это девятизначное число как единое целое. Для того чтобы изменить