Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.02.2011, 16:29
Gate007 Gate007 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 9
Репутация: 10
По умолчанию Реализация очереди на основе динамических переменных и статического массива

Есть методичка. В ней есть примеры, которые я не могу скомпановать в рабочую программу. Точнее на выходе должно быть 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;
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:41.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025