- •Вопрос 1) Основные структуры данных.
- •Вопрос 2) Массивы и их свойства.
- •Вопрос 3) Записи
- •Вопрос 4) Множества
- •Операции над множествами
- •Операции отношения.
- •Вопрос 5) Динамические структуры данных;
- •Вопрос 6) Линейные списки.
- •Вопрос 7) Циклические списки
- •Вопрос 8) Стек и его организация
- •Вопрос 9) Очереди и их организация
- •Вопрос 10) Задачи поиска в структурах данных.
- •Вопрос 11) Алгоритм линейного поиска.
- •Вопрос 12) Алгоритм бинарного поиска.
- •Вопрос 13) Алгоритм Кнута, Мориса- Пратта
- •Вопрос 14) Хэширование данных
- •Вопрос 15) сортировка данных
- •15. Сортировка данных
- •1) Сортировка включением
- •2) Сортировка Шелла
- •3) Обменная сортировка
- •4) Сортировка перемешиванием (Шейкерная сортировка)
- •5) Сортировка со слиянием
- •1) Прямое слияние
- •2) Естественное слияние
- •Вопрос 16) Пузырьковая сортировка.
- •17 Вопрос
- •Вопрос 18) Представление графов и деревьев
- •Вопрос 19) Представление бинарных деревьев.
- •Вопрос 20) Представление графов Способы представления графа в информатике Матрица смежности
- •Матрица инцидентности
- •Список рёбер
- •Вопрос 21) Алгоритмы на графах
- •Алгоритм Дейкстры нахождения кратчайшего пути
Вопрос 8) Стек и его организация
Организация стека в определенном смысле противоположна орга- низации очереди, поскольку здесь используется доступ по принципу "последней пошел, первый вышел" /такой метод доступа иногда назы- вают методом LIFO/. Представим себе стопку тарелок. Нижняя тарел- ка из этой стопки будет использована последней, а верхняя тарелка /которая была установлена в стопку последней/ будет использована первой. Стеки широко используются в системном программном обеспе- чении, включая компиляторы и интерпретаторы.
Исторически сложилось так, что две основные операции для стека - поместить в стек и выбрать из стека - получили название соответственно "затолкнуть" и "вытолкнуть". Поэтому для реализа- ции стека необходимо создать две функции: "posh" /затолкнуть/, которая помещает элемент в вершину стека, и "pop" / вытолкнуть/, которая выбирает из вершины стека значение. Необходимо также пре- дусмотреть определенную область в памяти, где фактически будет храниться стек. Для этого можно использовать массив или можно вы- делить область памяти, используя средство динамического распреде- ления памяти, предусмотренное в языке Турбо Паскаль. Как и при работе с очередью при выборке значения из стека элемент будет по- терян, если его не сохранить гденибудь в памяти. Ниже приводится общая форма процедур установки в стек и выборки из стека.
Type
stek=^vs;
vs=record
bykba:char; {буква из строки...}
next:stek; {Указатель на новый элемент стэка}
end;
var
a,adr,adr1:stek; {а-указатель который передвигается по стэку}
s:string {adr-указатель начала стэка (ещё называют "вершина стэка")}
{adr1-вспомогательный указатель, для создания следующего элемента стэка}
i,n:integer;
Begin
repeat
Writeln('Введите строку');
readln(s); {в раздел var надо добавить s:string}
until length(s)>1;
new(a);
a^.next:=nil;
a^.bykba:=s[1];
adr:=a; {запоминаем адрес первого элемента стэка}
adr1:=nil;
n:=length(s);
for i:=2 to n do
begin
new(adr1);
adr1^.next:=a;
a:=adr1;
adr:=a; {указатель как-бы поднимается вместе с ростом стэка}
a^.bykba:=s[i]; {присваиваем i-ую букву строки s}
end;
a:=adr;
while a<>nil do
begin
Write(a^.bykba);
a:=a^.next
end;
readln;
end.
Вопрос 9) Очереди и их организация
О́чередь — структура данных с дисциплиной доступа к элементам «первый пришёл — первый вышел» (FIFO, First In — First Out). Добавление элемента (принято обозначать словом enqueue — поставить в очередь) возможно лишь в конец очереди, выборка — только из начала очереди (что принято называть словом dequeue — убрать из очереди), при этом выбранный элемент из очереди удаляется.
Очередь в программировании используется, как и в реальной жизни, когда нужно совершить какие-то действия в порядке их поступления, выполнив их последовательно. Примером может служить организация событий в Windows. Когда пользователь оказывает какое-то действие на приложение, то в приложении не вызывается соответствующая процедура (ведь в этот момент приложение может совершать другие действия), а ему присылается сообщение, содержащее информацию о совершенном действии, это сообщение ставится в очередь, и только когда будут обработаны сообщения, пришедшие ранее, приложение выполнит необходимое действие.
Клавиатурный буфер BIOS организован в виде кольцевого массива, обычно длиной в 16 машинных слов, и двух указателей: на следующий элемент в нём и на первый незанятый элемент.
Type
TSel=^Sel;
Sel=Record
Inf:integer; // TInf – тип информации об элементе списка
A:TSel; // Адрес следующей ячейки
end;
var sp1,spk: TSel;
I,X,Y,k,a:INTEGER;
//Добавление в конец очереди----------------------------------------------------
Procedure Dobk(var sp1,spk:Tsel;Inf:integer);
begin
inc(x);
if k>=X then
if spk=Nil then begin
New(spk);
Spk^.A:=Nil;
Spk^.Inf:=inf;
Sp1:=spk;
end
else begin
New(spk^.A);
spk:=spk^.A;
spk^.Inf:=Inf;
spk^.A:=Nil;
end;
End;
//Прочесть и стереть информацию из начала очереди-------------------------------
Procedure Red1(var sp1,Spk:Tsel;var Inf:integer);
Var sp:Tsel;
begin
Inf:=sp1.Inf;
sp:=sp1;
sp1:=sp1^.A;
Dispose(sp);
if sp1=nil then spk:=nil;
end;
//Распечатать очередь-----------------------------------------------------------
Procedure Wrt(sp1:Tsel);
Var sp:Tsel;
begin
sp:=sp1;
While sp <> Nil do
begin
Write(sp^.Inf,' ');
sp:=sp^.A;
end;writeln;
end;