
- •Вопрос 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. Алгоритм разложения числа на простые множители в с
22. Очередь: понятие, описание в программе, основные операции
Очередь – это структура данных, представляющая собой последовательность элементов, образованная в порядке их поступления. Каждый новый элемент размещается в конце очереди; элемент, стоящий в начале очереди, выбирается из нее первым. В очереди используется принцип доступа к элементам FIFO (First Input – First Output, "первый пришёл – первый вышел"). В очереди доступны два элемента (две позиции): начало очереди и конец очереди. Поместить элемент можно только в конец очереди, а взять элемент только из ее начала.
Основные операции, производимые с очередью:
type
pEl=^El;
El=Record
d:integer;
next:pEl;
end;
var pBeg, pEnd: pEl;
pHelp:pEl;
procedure CreateOch;
begin
New(pBeg);
New(pEnd);
pBeg.d:=1;
pEnd.d:=-1;
pEnd.next:=nil;
pBed.next:=pEnd;
end;
procedure Add(x:Integer);
begin
New(pHelp);
pHelp.d:=-1;
pHelp.next:=nil;
pEnd.d:=x;
pEnd.next:=pHelp;
pEnd:=pHelp;
end;
function Del:Integer;
begin
If pBeg.next<>pEnd then
begin
Result:=pBeg.next.d;
pBeg.next:=pBeg.next.next;
end;
end;
procedure ShowOch;
begin
pHelp:=pBeg.next;
while pHelp.next<>nil do
begin
Memo1.Lines.Add(IntToStr(pHelp.d));
pHelp:=pHelp.next;
end;
end;
23. Списки: понятие, описание в программе, основные операции
Связанный список - это набор последовательно организованных данных. Главное преимущество связанных списков перед массивами состоит в том, что они могут уменьшать или увеличивать свои размеры во время выполнения программы. В частности, мы не должны заранее знать его максимальный размер. Второе преимущество состоит в том, что они обеспечивают гибкость при переорганизации их элементов. Такая гибкость получается за счет потери в скорости доступа к произвольному элементу списка.
Каждый элемент списка (узел) представляет собой запись, состоящую из двух частей. Первая часть — информационная. Вторая часть отвечает за связь со следующим и, возможно, с предыдущим элементом списка. Список, в котором обеспечивается связь только со следующим элементом, называется односвязным. Для того чтобы программа могла использовать список, надо определить тип компонентов списка и переменную-указатель на первый элемент списка.
Структура данных для всех динамических структур данных одинакова
type
pEl=^El;
El=record
d: integer;
next: pEl;
end;
var pBeg, pEnd :pEl;
pHelp:pEl;
Операции, которые можно делать со списком:
-создание;
- добавление в начало, в середину, в конец;
- добавление в пустой список;
- удаление из начала, из середины, конца;
- удаление последнего элемента;
Процедура создания списка, вывода, добавления в конец, удаления из начала выглядит также как в очереди.
procedure CreateOch;
begin
New(pBeg);
New(pEnd);
pBeg.d:=1;
pEnd.d:=-1;
pEnd.next:=nil;
pBed.next:=pEnd;
end;
procedure Add(x:Integer);
begin
New(pHelp);
pHelp.d:=-1;
pHelp.next:=nil;
pEnd.d:=x;
pEnd.next:=pHelp;
pEnd:=pHelp;
end;
function Del:Integer;
begin
If pBeg.next<>pEnd then
begin
Result:=pBeg.next.d;
pBeg.next:=pBeg.next.next;
end;
end;
procedure ShowOch;
begin
pHelp:=pBeg.next;
while pHelp.next<>nil do
begin
Memo1.Lines.Add(IntToStr(pHelp.d));
pHelp:=pHelp.next;
end;
end;
Добавление элемента перед элементом с номером k
procedure Add(x,n:integer);
var k:integer;
begin
pHelp:=pBeg.next;
k:=1;
while pHelp.next<>nil do
begin
pHelp:=pHelp.next;
k:=k+1;
If k=n-1 then break;
end;
If k<n-1 then
begin
New(pHelp);
pHelp.d:=-1;
pHelp.next:=nil;
pEnd.d:=x;
pEnd.next:=pHelp;
pEnd:=pHelp;
end
else
begin
New(pHelp2);
pHelp2.d:=x;
pHelp2.next:=pHelp.next;
pHelp.next:=pHelp2;
end;
end;
Удаление элемента с номером k
procedure Del(k:Integer);
var n:Integer;
begin
n:=-1;
pHelp:=pBeg;
while pHelp.next<>nil do
begin
If n=k-1 then break;
n:=n+1;
pHelp:=pHelp.next;
end;
If n=k-1 then
pHelp.next:=pHelp.next.next;
end;