1 ...7 8 9 11 12 13 ...29 Если в указующей части содержится адрес одного элемента списка, то список называется однонаправленным (или односвязным). Если же он содержит две компоненты, то двусвязным. Над списками можно проводить различные операции, например:
1) добавление элемента к списку;
2) удаление элемента из списка с заданным ключом;
3) поиск элемента с заданным значением ключевого поля;
4) сортировка элементов списка;
5) деление списка на два и более списков;
6) объединение двух и более списков в один;
7) другие операции.
Однако, как правило, необходимости во всех операциях при решении различных задач не возникает. Поэтому в зависимости от основных операций, которые необходимо применить, существуют различные виды списков. Наиболее популярные из них – это стек и очередь.
Стеком называется динамическая структура данных, добавление компоненты в которую и исключение компоненты из которой производится из одного конца, называемого вершиной стека. Стек работает по принципу LIFO(Last-In, First-Out) – «Поступивший последним, обслуживается первым».
Обычно над стеками выполняется три операции:
1) начальное формирование стека (запись первой компоненты);
2) добавление компоненты в стек;
3) выборка компоненты (удаление).
Для формирования стека и работы с ним необходимо иметь две переменные типа «указатель», первая из которых определяет вершину стека, а вторая – вспомогательная.
Пример. Составить программу, которая формирует стек, добавляет в него произвольное количество компонент, а затем читает все компоненты.
Program STACK;
uses Crt;
type
Alfa = String[10];
PComp = ^Comp;
Comp = Record
sD: Alfa;
pNext: PComp
end;
var
pTop: PComp;
sC: Alfa;
Procedure CreateStack(var pTop: PComp; var sC: Alfa);
begin
New(pTop);
pTop^.pNext:= NIL;
pTop^.sD:= sC;
end;
Procedure AddComp(var pTop: PComp; var sC: Alfa);
var pAux: PComp;
begin
NEW(pAux);
pAux^.pNext:= pTop;
pTop:= pAux;
pTop^.sD:= sC;
end;
Procedure DelComp(var pTop: PComp; var sC: ALFA);
begin
sC:= pTop^.sD;
pTop:= pTop^.pNext;
end;
begin
Clrscr;
writeln( ВВЕДИ СТРОКУ );
readln(sC);
CreateStack(pTop, sC);
repeat
writeln( ВВЕДИ СТРОКУ );
readln(sC);
AddComp(pTop, sC);
until sC = 'END';
Очередью называется динамическая структура данных, добавление компоненты в которую производится в один конец, а выборка осуществляется с другого конца. Очередь работает по принципу FIFO (First-In, First-Out) – «Поступивший первым, обслуживается первым».
Пример. Составить программу, которая формирует очередь, добавляет в нее произвольное количество компонент, а затем читает все компоненты.
Program QUEUE;
uses Crt;
type
Alfa = String[10];
PComp = ^Comp;
Comp = record
sD: Alfa;
pNext: PComp;
end;
var
pBegin, pEnd: PComp;
sC: Alfa;
Procedure CreateQueue(var pBegin,pEnd: PComp; var
sC: Alfa);
begin
New(pBegin);
pBegin^.pNext:= NIL;
pBegin^.sD:= sC;
pEnd:= pBegin;
end;
Procedure AddQueue(var pEnd: PComp; var sC:
Alfa);
var pAux: PComp;
begin
New(pAux);
pAux^.pNext:= NIL;
pEnd^.pNext:= pAux;
pEnd:= pAux;
pEnd^.sD:= sC;
end;
Procedure DelQueue(var pBegin: PComp; var sC:
Alfa);
begin
sC:= pBegin^.sD;
pBegin:= pBegin^.pNext;
end;
begin
Clrscr;
writeln( ВВЕДИ СТРОКУ );
readln(sC);
CreateQueue(pBegin, pEnd, sC);
repeat
writeln( ВВЕДИ СТРОКУ );
readln(sC);
AddQueue(pEnd, sC);
until sC = 'END';
20. Древовидные структуры данных
Древовидной структурой данных называется конечное множество элементов-узлов, между которыми существуют отношения – связь исходного и порожденного.
Если использовать рекурсивное определение, предложенное Н. Виртом, то древовидная структура данных с базовым типом t – это либо пустая структура, либо узел типа t, с которым связано конечное множество древовидных структур с базовым типом t, называемых поддеревьями.
Далее дадим определения, используемые при оперировании древовидными структурами.
Если узел y находится непосредственно под узлом х, то узел y называется непосредственным потомком узла х, а х – непосредственным предком узла у, т. е., если узел хнаходится на i-ом уровне, то соответственно узел y находится на (i + 1) – ом уровне.
Максимальный уровень узла дерева называется высотой или глубиной дерева. Предка не имеет только один узел дерева – его корень.
Узлы дерева, у которых не имеется потомков, называются терминальными узлами (или листами дерева). Все остальные узлы называются внутренними узлами. Количество непосредственных потомков узла определяет степень этого узла, а максимально возможная степень узла в данном дереве определяет степень дерева.
Предков и потомков нельзя поменять местами, т. е. связь исходного и порожденного действует только в одном направлении.
Читать дальше
Конец ознакомительного отрывка
Купить книгу