Добавлен: 01.04.2023
Просмотров: 72
Скачиваний: 3
СОДЕРЖАНИЕ
Глава 1. Динамические структуры данных.
1.1. Введение в динамические структуры данных.
1.2. Статические и динамические переменные в Паскале.
1.3. Динамические структуры данных. Линейные списки
Глава 2. Списковые структуры данных
2.1. Линейные списки (однонаправленные цепочки).
2.2. Динамические объекты сложной структуры
Чаще всего динамические структуры состоят из объектов, которые являются записями с нескольких полей, один или несколько из которых являются ссылками на такой же объект. Таким образом можно составлять цепочки или более сложные структуры объектов, которые ссылаются друг на друга. Размер таких структур ограничивается только объемом свободной памяти и может легко меняться при удалении и создании объектов, что и определило основную область их применения - моделирование нелинейных последовательных структур данных (например, деревьев). Однако, несмотря на почти полное отсутствие недостатков, динамические структуры все же имеют свои минусы. Главный из них - отсутствие наглядности программы, что вызывает значительные трудности при создании особо крупных структур.
Список использованной литературы
- Алексеев А., Евсеев Г., Мураховский В., Симонович С. Новейший самоучитель работы на компьютере. М.: ДЕСС КОМ, 2000. – 654 с.
- Белоусова Л.И., С.А.Веприк, А.С.Муравка. Сборник задач по курсу информатики. Учебно-методическое пособие.–Мю: Экзамен, 2007. – 412 с.
- Бен-Ари М. Языки программирования: Практический сравнительный анализ: Учебник для вузов. - М.: Мир, 2000. - 366 с.
- Вирт Н. Алгоритмы и структуры данных. – М.: Мир, 1989. – 562 с.
- Грызлов В.И., Грызлова Т.П. Турбо Паскаль 7.0. - М.: ДМК, 2000. - 416 с.
- Зуев Е. А. Программирование на языке Turbo Pascal 6.0, 7.0 – М.:Веста, Радио и связь, 1993 – 238 с.
- Информатика: Учебник/ под ред. Н.В.Макаровой. – М.: Финансы и статистика, 2007. – 768 с.
- Кассера В. Turbo Pascal 7.0. М.: Диасофт, 2003 – 356 с.
- Коффман Э. Б. Turbo Pascal = Turbo Pascal Web Update.– М.:Вильямс, 2005. – 308 с.
- Леонтьев В.П. Новейшая энциклопедия персонального компьютера. – М.: ОЛМА-ПРЕСС, 2008 – 626 с.
- Лилитко Е.П. Практикум по программированию. Начальный курс. - Переяславль-Залесский, 2007. – 156 с.
- Марченко А.И., Марченко Л.А. Программирование в среде Turbo Pascal 7.0 / Под ред. В. П.Тарасенко. — Киев: ВЕК+; М.: Бином Универсал, 2008. – 414 с.
- Моргун А. Н. Справочник по Turbo Pascal для студентов.– М.:Диалектика, 2006. – 162 с.
- Немнюгин С. А. Turbo Pascal – СПб: Питер, 2003. – 496 с.
- Себеста, Роберт У. Основные концепции языков программирования. - М.: Издательский дом «Вильямс», 2001. - 672 с.
- Симонович С.В. Информатика. Базовый курс. - Издательство Питер, 2003. – 640 с.
- Степанов А.Н. Информатика для студентов гуманитарных специальностей. - Издательство Питер, 2002. – 608 с.
- Терминологический словарь по основам информатики и вычислительной техники / А.П. Ершов, Н.М. Шанский, А.П. Окунева, Н.В. Баско. - М.: Просвещение, 2001.
- Фаронов В. Turbo Pascal в подлиннике. Полное руководство. – Автор: М.: Мир, 2004. – 1056 c.
- Фаронов В. В. Turbo Pascal – СПб.: BHV, 2007.– 268 с.
- Фаронов В.В. Turbo Pascal 7.0 Практика программирования М.:КноРус, 2011 – 414 с.
- Федоренко Ю. Алгоритмы и программы на Turbo Pascal. – М.: Финансы и статистика, 2001. – 240 с.
- Фёдоров М.А. Основы современных компьютерных технологий. – К.: МАУП, 2008. – 595 с.
- Фигурнов В.Э. IBM PC для пользователя. – М.: ИНФРА, 2007 – 458с.
- Шпак Ю.А. Название: Turbo Pascal 7.0 на примерах. – К.: ЮНИОР, 2003. – 496 с.
Приложение А
Листинг программы «Стек»
Program Prim5;
Const NN=5;
Type Uk=^Stek;
Stek = Record
I : Integer;
A : Uk
End;
Var
U1, U2: Uk;
I1, J, J1 : Integer ;
A1, A2, A5, UU : Uk;
Begin
U2 := Nil; I1 := 0;
Writeln;
for J:=1 to NN do begin
New(U1); Write('Введите число : '); Readln(I1);
U1^.I := I1; U1^.A := U2; U2 := U1; end;
A2:=u1;
{Переставим в стеке значения первого и пятого элементов}
{ Запомним значения указателей в соответств. элементах }
UU := U1; //сохраняет указатель на последний элемент стека – число 5
for J:=1 to NN do begin
U2:= U1^.A; J1:=NN-J+1; {Номер элемента}
If J1=1 then A5:=U2 else if J1=5 then A1:=U2; U1:=U2; end;
{Поменяем значения указателей должным образом}
U1:=UU;
For J:=1 to NN do
begin
U2:=U1^.A; J1:=NN-J+1;
if J1=1 then U1^.A := A1 else if J1=2 then begin UU:=U1^.A;U1^.A:=A2; end else if J1=5 then U1^.A:=A5;U1:=U2;
end;
Writeln;
U1:=UU; //после замены значения указывает на последний элемент стека– число 1
Repeat // Вывод элементов стека
Writeln('Элемент стека - ',U1^.I);
U2:=U1^.A;
Dispose(U1); //освобождает память, выделенную под адресацию элемента
U1:=U2;
Until U1=nil;
End.
Результат работы программы
Приложение Б
Листинг программы «Дерево»
uses crt;
Const
{ данный массив-константа }
V : array [1..15] of integer = (10,22,16,11,45,25,25,4,10,7,8,25,10,1,9);
type node=record // запись, которая содержит имя узла, его вес-пометку и метки:правая-левая
name, ves: integer;
left, right: pointer;
end;
var
s,n:integer;
pnt_s,current_s,root: pointer;
pnt,current:^node;
procedure node_search (pnt_s:pointer; var current_s:pointer);
{Poisk uzla po soderzhimomu}
var
pnt_n:^node;
begin
pnt_n:=pnt_s; writeln(pnt_n^.name);
if not (pnt_n^.name=s) then
begin
if pnt_n^.left <> nil then
node_search (pnt_n^.left,current_s);
if pnt_n^.right <> nil then
node_search (pnt_n^.right,current_s);
end
else current_s:=pnt_n;
end;
procedure node_list (pnt_s:pointer);
{Vyvod spiska vseh uzlov dereva}
var
pnt_n:^node;
begin
pnt_n:=pnt_s; writeln(pnt_n^.name);
if pnt_n^.left <> nil then node_list (pnt_n^.left);
if pnt_n^.right <> nil then node_list (pnt_n^.right);
end;
procedure node_25 (pnt_s:pointer);
{Poisk uzla po весу-метке, равной 25}
var pnt_n,l,r:^node;
begin
pnt_n:=pnt_s;
if pnt_n^.left<>nil then
begin
l:=pnt_n^.left;
if l^.ves = 25 then write(' ',l^.name,' ');
if l^.left<>nil then node_25(l);
end;
if pnt_n^.right<>nil then
begin
r:=pnt_n^.right;
if r^.ves = 25 then write(' ',r^.name,' ');
if r^.right<>nil then node_25(r);
end;
end;
begin
clrscr;
new(current);root:=current;
current^.name:=1;
current^.ves:=10;
current^.left:=nil;
current^.right:=nil;
repeat
writeln('tekuwij uzel – ',current^.name,' ves=',current^.ves);
writeln('1-prisvoit imja levomu potomoku i prisvoit imja pravomu potomku');
writeln('2-sdelat uzel tekuwim');
writeln('3-vyvesti spisok vseh uzlov');
writeln('4-vivesti elenent, ravnye 25');
writeln('0-vihod');
read(n);
if n=1 then
begin {Sozdanie levogo potomka i Sozdanie pravigo potomka}
writeln('Sozdanie levogo potomka');
if current^.left= nil then new(pnt)
else pnt:= current^.left;
writeln('left ?');
readln;
read(s);
pnt^.name:=s;
pnt^.ves:=V[s];
pnt^.left:=nil;
pnt^.right:=nil;
current^.left:= pnt;
writeln('Sozdanie pravigo potomka');
if current^.right= nil then new(pnt)
else pnt:= current^.right;
writeln('right ?');
readln;
read(s);
pnt^.ves:=V[s];
pnt^.name:=s;
pnt^.left:=nil;
pnt^.right:=nil;
current^.right:= pnt;
end;
if n=2 then
begin {Poisk uzla}
writeln('name ?');
readln;
read(s);
current_s:=nil; pnt_s:=root;
node_search (pnt_s, current_s);
if current_s <> nil then current:=current_s;
end;
if n=3 then
begin {Vyvod spiska uzlov}
writeln;
writeln('spisok uzlov');
pnt_s:=root;
node_list(pnt_s);
writeln;
end;
if n=4 then
begin {poisk нужного uzlа = 25}
pnt_s:=current;
writeln('elementi, ravnye 25: ');
if current^.ves = 25 then writeln(' ',current^.name);
node_25(pnt_s);
writeln;
end;
until n=0;
end.
Результат работы программы
Приложение В
Листинг программы «Список»
program spisok;
type
link = ^linelink; {Формирование списка}
linelink = record
number : integer;
next : link
end;
var
start,last : link; {Начальный и конечный Динамические структуры данных. Линейные списки соответственно}
c : integer;
f1 : text;
procedure list ( var top, last : link; n1 : integer ); {Процедура формирования списка на основе входных данных в виде целого числа}
begin
if top=nil then {Если записываем первый элемент - записываем его в следующий за головой элемент, а в голове делаем буфер из нуля (его использовать не надо)}