- •Вопрос 1.
- •Вопрос 2.
- •Вопрос 3.
- •Вопрос 4.
- •Вопрос 5.
- •Вопрос 6.
- •Вопрос 7.
- •Вопрос 8.
- •Вопрос 9.
- •Вопрос 10.
- •Вопрос 11.Рекурсия: понятие, пример использования.
- •Вопрос 12. Строки в Delphi. Способы реализации строк. Основные процедуры и функции.
- •Вопрос 13.
- •Вопрос 14.
- •Вопрос 15.
- •Вопрос 16. Программирование с использованием динамической памяти. Структура оперативной памяти. Понятие указателя.
- •Вопрос 17. Указатели. Описание, допустимые операции
- •Вопрос 18. Статические и динамические переменные. Динамические структуры данных
- •19. Линейные списки. Основные операции над линейными списками.
- •21. Стек: понятие, описание в программе, основные операции
- •22. Очередь: понятие, описание в программе, основные операции
- •23. Списки: понятие, описание в программе, основные операции
- •24. Применение динамических структур данных. Проверка математического выражения на правильность расстановки скобок.
- •Вопрос 25.
- •Вопрос 26.
- •Вопрос 27.
- •Вопрос 28.
- •Вопрос 29.
- •Вопрос 30.
- •Вопрос 33.
- •Вопрос 35.
- •Вопрос 36. Операторы инкремента и декремента. Операторы присваивания
- •Вопрос 37. Функции scanf, printf
- •Вопрос 38. Способы задания разветвляющегося алгоритма в с
- •Вопрос 39. Циклические алгоритмы. Виды циклов в с
- •Вопрос 40. Табулирование функции
- •41. Алгоритм вывода всех простых чисел меньших 100 в с.
- •42. Алгоритм разложения числа на простые множители в с
19. Линейные списки. Основные операции над линейными списками.
Наиболее простой способ связать некоторое множество элементов - это организовать линейный список. При такой организации элементы некоторого типа образуют цепочку. Для связывания элементов в списке используют систему указателей. В рассматриваемом случае любой элемент линейного списка имеет один указатель, который указывает на следующий элемент в списке или является пустым указателем, что означает конец списка.
Операции, которые мы имеем право выполнять с линейными списками, включают следующие:
Получить доступ к k-му узлу списка, чтобы проанализировать и/или изменить содержимое его полей.
Включить новый узел непосредственно перед k-м узлом.
Исключить k-й узел.
Объединить два (или более) линейных списка в один список.
Разбить линейный список на два (или более) списка.
Сделать копию линейного списка.
Определить количество узлов в списке.
Выполнить сортировку узлов списка в возрастающем порядке по некоторым полям в узлах.
Найти в списке узел с заданным значением в некотором поле.
Специальные случаи k=1 и k=n в операциях 1), 2) и 3) особо выделяются, поскольку в линейном списке проще получить доступ к первому и последнему элементу, чем к произвольному элементу.
Очень часто встречаются линейные списки, в которых включение, исключение или доступ к значением почти всегда производятся в первом или последнем узлах, им даны специальные названия:
Стек – это линейный список, в котором добавление новых элементов и удаление существующих производится только с одного конца, называемого вершиной стека.
Очередь – линейный список, элементы в который добавляются только в конец, а исключаются из начала.
Стек называли списком LIFO (last-in-firs-down - последний вошел - первый вышел)
Очередь иногда называют списком типа FIFO (first-in-first-out - первый вошел - первый вышел).
21. Стек: понятие, описание в программе, основные операции
Стек – это структура данных, доступ к которым осуществляется лишь с одного конца, называемого вершиной стека. То есть получить элемент можно только, тот, который лежит на вершине стека, а что бы взять следующий, первый нужно вытолкнуть.
Добавление (проталкивание) элемента возможно только на вершину стека, при этом добавляемый элемент сам становиться верхним. Удаление (выталкивание), так же возможно только с вершины. В общем, доступ в стеке есть лишь к верхнему элементу. Организация стека в определенном смысле противоположна организации очереди, поскольку здесь используется доступ по принципу "последней вошел, первый вышел" /такой метод доступа иногда называют методом LIFO/.
type
pEl=^El;
El=record
d: integer;
next:pEl;
end;
var pTop:pEl;
pHelp:pEl;
procedure CreateSt;
begin
New(pTop);
pTop.next:=nil;
pTop.d:=-1;
end;
procedure Add(x:Integer);
begin
New(pHelp);
pHelp.next:=pTop;
pHelp.d:=x;
pTop:=pHelp;
end;
function Del:Integer;
begin
If pTop.next<>nil then
begin
pHelp:=pTop;
pTop:=pTop.next;
Dispose(pHelp);
end;
end;
procedure ShowSt;
begin
pHelp:=pTop;
while pHelp.next<>nil do
begin
Memo1.Lines.Add(IntToStr(pHelp.d));
pHelp:=pHepl.next;
end;
end;