Консультация № 186923
11.12.2012, 23:33
134.55 руб.
0 3 0
Здравствуйте! Помогите с решением этой задачи на тему «линейные списки» .
1. Реализовать СД типа «линейный список» в виде модуля.
ПЛС. Массив, на основе которого реализуется ПЛС, находится в статической памяти (базовый тип элемента — pointer). Выделение памяти под информационную часть элемента ПЛС и запись в нее значения происходит при выполнении процедуры PutList. При выполнении процедуры GetList память, занимаемая элементом, освобождается. Размер информационной части элемента задается при инициализации ПЛС и сохраняется в дескрип-торе.
Реализация на языке Pascal:
Unit List6;
Interface
Const ListOk = 0;
ListNotMem = 1;
ListUnder = 2;
ListEnd = 3;
Type BaseType = Pointer;
Index = 0..100;
PtrEl = Index;
List = Record
MemList: array[Index] of BaseType;
Ptr : PtrEl;
N : Word; { длина списка }
Size : Word { размер информационной }
End; { части элемента }
Var ListError : 0..3;
Procedure InitList(var L:List; Size:Word);
Procedure PutList(var L:List; var E);
Procedure GetList(var L:List; var E);
Procedure ReadList(var L:List; var E);
Function FullList(var L:List):boolean;
Function EndList(var L:List):boolean;
Function Count(var L:List):Word;
Procedure BeginPtr(var L:List);
Procedure EndPtr(var L:List);
Procedure MovePtr(var L:List);
Procedure MoveTo(var L:List; N:word);
Procedure DoneList(var L:List);
Procedure CopyList(var L1,L2:List);


Назначение процедур и функций
InitList — инициализация списка.
PutList — включение элемента в список.
GetList — исключение элемента из списка.
ReadList — чтение элемента списка.
EmptyList — проверка: свободен ли список.
EndList — проверка: является ли элемент последним.
Count — возвращает количество элементов в списке.
BeginPtr — устанановка в начало списка.
EndPtr — устанановка в конец списка.
MovePtr — переход к следующему элементу.
MoveTo — переход к n-му элементу.
DoneList — удаление списка.
CopyList — копирование списка L1 в список L2.

2. Разработать программу для решения задачи с использованием модуля, полученного в результате выполнения пункта 1 задания.
Дано натуральное число n и целые числа a1,a2,...,an. Вычислить min|a[i]-a'| 1<=i<=n , где a' среднее арифметическое чисел a1,...,an.

Среда разработки FPC.

Обсуждение

давно
Профессионал
304622
583
13.12.2012, 18:42
общий
Это не "линейный список". По крайней мере не то, что лично я привык видеть под этим названием. Главная особенность линейных списков это легкая вставка и удаление элемента при сохранение общего порядка. В том, что вы предложили, я вижу только один способ втсавки (удаления) элемента в i-ю позицию -- это сдвигать вперёд (назад) весь хвост от i+1-го до последнего элемента. Или я что-то не понял?

(Разумеется делать сдвиг в массиве указателей -- это быстрее, чем сдвигать сами значения элементов. Но линейный список в принципе иной. В нём заданы горизонтальные связи между элементами.)
давно
Профессионал
304622
583
14.12.2012, 15:31
общий
Ау-у-у! Вас интересует решение?
Неизвестный
14.12.2012, 20:01
общий
Да интересует. По сути получается так, как вы написали.
Форма ответа