Есть методичка. В ней есть примеры, которые я не могу скомпановать в рабочую программу. Точнее на выходе должно быть 2 программы, 1 с очередью на основе динамических переменных, 1 на основе массива.
Есть предположение, что сами примеры косячные и ничего из них путного не выйдет.
Программа должна уметь формировать список, выводить элементы (хотя бы первый и второй), добавлять элемент в начало и в произвольную позицию списка, удалять из начала и из произвольного места.
Выдержка из методички:
Цитата:
Списочные структуры
Список – упорядоченный набор данных одного типа. Отличается от массива тем, что имеет переменный размер (размер списка не опре-деляется при запуске программы).
Список может быть реализован 2-мя способами:
1. на основе статических структур ( массивов ).
2. на основе динамических переменных.
Пример объявления списка:
1. на основе статических структур:
type
TList = record
| DATA_ENTRIES : тип;
end;
var
List : array [1..N] of TList; {массив, N=const }
SIZE : integer; { , указывает текущий размер}
… {базовые операции}
2. на основе динамических переменных:
type
PTR = ^TList; {новое поле данных имеющий тип указателя на TList }
TList = record
| DATA_ENTRIES : тип;
| NPTR : PTR {указатель на начало списка}
end;
var
LIST_HEAD : PTR; {указатель, который может указывать на начало ( или конец) списка}.
Обращение к элементам списка, созданного первым способом:
List[1].DATA_ENTRIES;
List[2].DATA_ENTRIES;
…
List[N].DATA_ENTRIES;
Обращение к элементам списка, созданного вторым способом:
List_HEAD^.DATA_ENTRIES; - обращение к I-ому элементу
List_HEAD^.NPTR^.DATA_ENTRIES; - ко II-ому элементу
List_HEAD^.NPTR^. NPTR^.DATA_ENTRIES;
…
Процедуры для динамического списка:
Исходная структура списка:
type
NameStr=string[15];
Link=^Student
Student=record
Name:NameStr;
Mark:integer;
…
Next:Link;
end;
var
First:Link;
Создание и инициализация динамической переменной:
var
P:Link;
…
New(P); {создали элемент списка}
{инициализируем элемент списка}
P^.Name:=’Иванов’;
P^.Mark:=5;
…
P^.Next:=nil; {пустой указатель}
Процедура добавления элемента в начало списка:
procedure AddFirst(A:Link);
{А-указатель на добавляемый элемент}
begin
A^.Next:=First;
First:=A;
end;
Процедура добавления элемента в произвольное место списка:
procedure AddAfter(A,Old:Link);
begin
a^.Next:=Old^.Next; {(1) А-указатель на добавляемый элемент}
Old^.Next:=A; {(2) Old-указатель на элемент списка, за которым
добавляется элемент}
end;
Удаление элемента из начала списка:
procedure DelFirst(var A:Link);
begin
A:=First; {сохраняем указатель на удаляемый элемент}
First:=First^.Next;
end;
Удаление элемента из произвольного места списка:
procedure DelAfter(Old:Link;Var A:Link);
begin
A:=Old^.Next; {сохраняем указатель на удаляемый элемент}
Old^.Next:=Old^.Next^.Next
end;
|