М.Э. Абрамян - Programming Taskbook (1157415), страница 32
Текст из файла (страница 32)
задание Dynamic59) процедуру InsertBefore(D), котораявставляет новый элемент со значением D перед текущим элементом списка (D — входной параметр целого типа). Вставленный элемент становитсятекущим. С помощью метода InsertBefore вставить пять данных чиселв исходный список и вывести ссылки на первый, последний и текущийэлементы полученного списка.Dynamic62. Даны ссылки A1 , A2 и A3 на первый, последний и текущий элементы непустого двусвязного списка. Также даны пять чисел. Включитьв класс IntList (см. задание Dynamic59) процедуру InsertAfter(D), котораявставляет новый элемент со значением D после текущего элемента списка (D — входной параметр целого типа). Вставленный элемент становитсятекущим.
С помощью метода InsertAfter вставить пять данных чисел висходный список и вывести ссылки на первый, последний и текущийэлементы полученного списка.Dynamic63◦ . Даны ссылки A1 , A2 и A3 на первый, последний и текущий элементы непустого двусвязного списка. Включить в класс IntList (см. задание Dynamic59) процедуры ToFirst (делает текущим первый элементсписка), ToNext (делает текущим в списке следующий элемент, если онсуществует), SetData(D) (присваивает текущему элементу списка значение D целого типа), а также функцию IsLast логического типа (возвращаетTRUE, если текущий элемент списка является его последним элементом,и FALSE в противном случае).
Методы ToFirst, ToNext и IsLast не имеютпараметров; параметр D метода SetData является входным параметромцелого типа. С помощью данных методов присвоить нулевые значенияэлементам исходного списка с нечетными номерами и вывести количество элементов в списке, а также ссылки на первый, последний и текущийэлементы преобразованного списка.Dynamic64. Даны ссылки A1 , A2 и A3 на первый, последний и текущий элементы непустого двусвязного списка.
Включить в класс IntList (см. заданиеDynamic59) процедуры ToLast (делает текущим последний элемент списка), ToPrev (делает текущим в списке предыдущий элемент, если он существует) и функции GetData целого типа (возвращает значение текущегоэлемента списка), IsFirst логического типа (возвращает TRUE, если текущий элемент списка является его первым элементом, и FALSE в противномслучае).
Данные методы не имеют параметров. С помощью этих методоввывести все четные значения элементов исходного списка, просматривая148М. Э. Абрамян. Электронный задачник Programming Taskbook 4.6список с конца. Вывести также количество элементов в списке.Dynamic65. Даны ссылки A1 , A2 и A3 на первый, последний и текущий элементы двусвязного списка, содержащего не менее пяти элементов. Включитьв класс IntList (см. задание Dynamic59) функцию DeleteCurrent целоготипа (без параметров), удаляющую из списка текущий элемент и возвращающую его значение. После удаления элемента текущим становитсяследующий элемент или, если следующего элемента не существует, последний элемент списка. Метод DeleteCurrent также вызывает для удаленного элемента метод Dispose.
С помощью метода DeleteCurrent удалитьиз исходного списка пять элементов и вывести их значения. Вывести также ссылки на первый, последний и текущий элементы преобразованногосписка (для пустого списка вывести три константы null).Dynamic66. Даны ссылки A1 , A2 и A3 на первый, последний и текущий элементы непустого двусвязного списка. Включить в класс IntList (см. заданиеDynamic59) классовый метод — процедуру Split(L1 , L2 ), которая переносит элементы списка L1 от текущего до последнего в новый список L2(таким образом, список L1 делится на две части, причем первая часть может оказаться пустой). Параметры процедуры имеют тип IntList; первыйпараметр является входным, второй — выходным.
Текущими элементами непустых результирующих списков становятся их первые элементы.Новые объекты типа Node в процедуре Split не создавать. С помощьюэтой процедуры разбить исходный список на два и вывести ссылки напервый, последний и текущий элементы каждого из полученных списков(для пустого списка выводятся три константы null).Dynamic67.
Даны ссылки на первый, последний и текущий элементы двухнепустых двусвязных списков. Включить в класс IntList (см. заданиеDynamic59) классовый метод — процедуру Add(L1 , L2 ), которая добавляет все элементы из списка L1 (в том же порядке) в конец списка L2 ; врезультате список L1 становится пустым. Текущим элементом дополненного списка становится первый из добавленных элементов. Оба параметрапроцедуры имеют тип IntList и являются входными. Новые объекты типаNode в процедуре Add не создавать. С помощью этой процедуры добавитьпервый из данных списков в конец второго и вывести ссылки на первый,последний и текущий элементы объединенного списка.Dynamic68.
Даны ссылки на первый, последний и текущий элементы двухнепустых двусвязных списков. Включить в класс IntList (см. заданиеДинамические структуры данных (.NET)149Dynamic59) классовый метод — процедуру Insert(L1 , L2 ), которая вставляет все элементы из списка L1 (в том же порядке) в список L2 перед еготекущим элементом; в результате список L1 становится пустым. Текущимэлементом списка L2 становится первый из вставленных элементов. Обапараметра процедуры имеют тип IntList и являются входными. Новыеобъекты типа Node в процедуре Insert не создавать.
С помощью этой процедуры вставить первый из данных списков в текущую позицию второгои вывести ссылки на первый, последний и текущий элементы объединенного списка.Dynamic69. Даны ссылки на первый, последний и текущий элементы двухдвусвязных списков (второй список может быть пустым). Включить вкласс IntList (см. задание Dynamic59) классовый метод — процедуруMoveCurrent(L1 , L2 ), которая перемещает текущий элемент списка L1 всписок L2 (элемент вставляется после текущего элемента списка L2 и самстановится текущим; в списке L1 текущим становится следующий элемент или, если следующего элемента не существует, последний элемент).Оба параметра процедуры имеют тип IntList и являются входными.
Новыеобъекты типа Node в процедуре MoveCurrent не создавать. С помощьюэтой процедуры переместить текущий элемент первого списка во второйи вывести ссылки на первый, последний и текущий элементы каждого изполученных списков (для пустого списка выводятся три константы null).Список с барьерным элементомИспользованная в заданиях Dynamic31–Dynamic69 реализация двусвязного списка в виде цепочки узлов, ограниченной по краям нулевыми ссылкамиnull, не является единственно возможной. Двусвязный список можно такжереализовать в виде замкнутой цепочки узлов с дополнительным фиктивным,или барьерным, элементом.
Этот барьерный элемент связан своими свойствами Next и Prev с первым и последним «настоящим» элементом списка соответственно, поэтому, имея ссылку на барьерный элемент, можно сразу перейтикак к первому, так и к последнему элементу списка (естественно, первый и последний элементы также связаны с барьерным элементом своими свойствамиPrev и Next соответственно). Для работы с двусвязным списком, снабженнымбарьерным элементом, достаточно хранить две ссылки: Barrier, указывающуюна барьерный элемент, и Current, указывающую на текущий элемент (которыйможет быть как «настоящим», так и барьерным элементом). Свойство Data ба-150М. Э.
Абрамян. Электронный задачник Programming Taskbook 4.6рьерного элемента может быть произвольным; для определенности его можноположить равным 0. Пустой список в данной реализации представляет собойединственный барьерный элемент, «замкнутый на себя».Задания Dynamic70–Dynamic80 посвящены двусвязным спискам с барьерным элементом.Dynamic70◦ . Даны ссылки A1 и A2 на первый и последний элементы двусвязного списка, реализованного в виде цепочки узлов, которая ограниченапо краям константами null (если список пуст, то A1 = A2 = null). Преобразовать исходный список в циклический список (см. задание Dynamic55),снабженный барьерным элементом.
Барьерный элемент должен иметьзначение 0 и быть связан своими свойствами Next и Prev с первым и последним элементом исходного списка (в случае пустого исходного спискасвойства Next и Prev барьерного элемента должны указывать на сам барьерный элемент). Вывести ссылку на барьерный элемент полученногосписка. Не создавать новые объекты типа Node, за исключением барьерного элемента.Dynamic71. Даны ссылки A1 и A2 на барьерный и текущий элементы двусвязного списка (о списке с барьерным элементом см. задание Dynamic70).Разбить список на два, перенеся во второй список все элементы от текущего до последнего и добавив ко второму списку барьерный элемент.Если текущий элемент исходного списка является барьерным элементом,то второй список должен быть пустым (то есть состоять только из барьерного элемента).
Вывести ссылку на барьерный элемент второго списка. Несоздавать новые объекты типа Node, за исключением барьерного элементадля второго списка.Dynamic72. Даны ссылки A1 и A2 на барьерные элементы двух двусвязныхсписков (о списке с барьерным элементом см. задание Dynamic70). Объединить исходные списки, связав конец первого и начало второго списка(барьерным элементом объединенного списка должен остаться барьерныйэлемент первого списка). Вывести ссылки на первый и последний элементы объединенного списка (если объединенный список является пустым,то дважды вывести ссылку на его барьерный элемент). После удалениялишнего барьерного элемента вызвать для него метод Dispose.Dynamic73. Даны ссылки A1 и A2 на барьерные элементы двух двусвязныхсписков (о списке с барьерным элементом см.