L.Next d
Работа приложения должна начинаться с нажатия на кнопку «Создать очередь». После появления сообщения «Очередь создана», нужно ввести значение d (в данном случае введено число 100) и нажать на кнопку «Вставка после 1 элемента». Для просмотра преобразованного списка нужно нажать кнопку «Показать очередь».
Задача 3. Создать очередь из 20 элементов, информационные поля которой содержат случайные числа из интервала [-30, 30]. Вставить в список новый элемент с информационным полем 100 за каждым отрицательным числом.
Создание очереди:
procedure TForm1.Button1Click(Sender: TObject);
var p, q : link; i : byte;
begin
randomize;
new(L);
L.val:= -30 + random(61);
p:=L;
for i:=2 to 20 do
begin
new(q);
q.val:= -30 + random(61);
p.next:=q;
p:=q
end;
p.next:=nil;
showmessage('Очередь создана')
end;
Вставка в список нового элемента с информационным полем 100 за каждым отрицательным числом:
procedure TForm1.Button3Click(Sender: TObject);
var w, r : link;
begin
w:=L;
while w<>nil do
begin
if w.val<0 then
begin
new(r); r.val:=100; r.next:=w.next; w.next:=r;
w:=r.next
end
else w:=w.next
end;
end;
Процедура обработки события нажатия на кнопку «Показать очередь» такая же, как в задаче 1.
Работа приложения должна начинаться с нажатия на кнопку «Создать очередь». После появления сообщения «Очередь создана», нужно нажать кнопку «Показать очередь», чтобы увидеть созданный список. Затем нажать кнопку «Вставка элемента». Для просмотра преобразованного списка нужно нажать кнопку «Показать очередь».
Задача 4. Создать очередь, информационные поля которой содержат строки из файла file2.txt . Удалить из списка второй элемент.
Содержимое файла file2.txt: file
edit
search
view
project
run
component
database
tools
window
help
Описание типа динамической структуры будет иметь вид:
type link = ^elem;
elem = record
val : string;
next : link
end;
Создание очереди:
procedure TForm1.Button1Click(Sender: TObject);
var p, q : link; f : textfile;
begin
assignfile(f, ' file2.txt '); reset(f);
new(L);
readln(f, L.val);
p:=L;
while not eof(f) do
begin
new(q); readln(f, q.val); p.next:=q; p:=q
end;
p.next:=nil;
showmessage('Очередь создана')
end;
Выведение информационных полей списка в столбик в метку Label1:
procedure TForm1.Button2Click(Sender: TObject);
var p : link;
begin
label1.Caption:='';
p:=L;
while p<>nil do
begin
label1.Caption:=label1.Caption + p.val + #13; p:=p.next
end;
end;
Удаление второго элемента списка:
procedure TForm1.Button3Click(Sender: TObject);
var z : link;
begin
z:=L.next; L.next:=z.next; dispose(z)
end;
Удаление элемента, осуществляемое этой процедурой, схематически можно изобразить следующим образом:
L
z=L.next
z.next
Задача 5. Создать очередь из 20 элементов, информационные поля которой содержат случайные числа из интервала [-40, 40]. Удалить из списка все отрицательные числа.
В предыдущей задаче мы научились удалять элемент, стоящий за данным элементом (в задаче 4 мы удаляли 2ой элемент, как элемент, стоящий за 1ым элементом списка). Чтобы применить этот алгоритм в задаче 5, мы должны учесть, что отрицательный элемент может стоять в списке первым. Чтобы сделать первый элемент списка не первым, используют метод фиктивного элемента. Этот метод заключается в том, что перед первым элементом списка добавляют элемент с пустым информационным полем и ссылочным полем, содержащим адрес первого элемента списка ( L ).
procedure TForm1.Button3Click(Sender: TObject);
var w, r, z : link;
begin
new(r); r.next:=L;
w:=r;
while w.next<>nil do
if w.next.val<0 then
begin z:=w.next; w.next:=z.next; dispose(z) end
else w:=w.next;
L:=r.next
end;
В данной процедуре r – фиктивный элемент, w очередной элемент списка. Мы просматриваем все элементы w до предпоследнего и проверяем, является ли элемент, стоящий за w (w.next) отрицательным. Если да, то мы его удаляем. В заключение первый элемент нового списка получает имя L (если этого не сделать, список может остаться без ″головы″ в случае, когда первый элемент исходного списка – отрицательное число).
Задачи
Задача 6. Создать очередь, информационные поля которой содержат числа из текстового файла file1.txt. Вставить в конец списка (после последнего элемента) новый элемент с информационным полем d.
Задача 7. Создать очередь, информационные поля которой содержат числа из текстового файла file1.txt. Вставить в начало списка (перед первым элементом) новый элемент с информационным полем d.
Задача 8. Создать очередь, информационные поля которой содержат числа из текстового файла file1.txt. Вставить новый элемент с информационным полем d после 9ого элемента списка.
Задача 9. Создать очередь из 20 элементов, информационные поля которой содержат случайные числа из интервала [-50, 50]. Удалить из списка последний элемент.
Задача 10. Создать очередь, информационные поля которой содержат числа из текстового файла file3.txt. Удалить из списка за каждым вхождением элемента с информационным полем, равным d, один элемент, если он отличен от d. Содержимое файла file3.txt:
26 11 -8 34 2
41 -5 11 11 -37
-15 11 29 62 44
Задача 11. Создать очередь, информационные поля которой содержат строки из файла file4.txt (Список фамилий учащихся). Удалить из списка фамилии, начинающиеся с буквы ′ С ′.
Содержимое файла file4.txt: Семёнов
Антонова
Кузнецов
Самойлов
Егорова
Колесников
Сидоров
Смирнова
Петрова
Сафонов
Указание. Использовать метод фиктивного элемента.
Задача 12*. Создать очередь, информационные поля которой содержат строки из файла file4.txt (Список фамилий учащихся). Удалить из списка первую фамилию, начинающуюся с буквы ′ К ′. (Учесть, что такая фамилия может оказаться первой в списке.)
Указание. Использовать метод фиктивного элемента.
Задача 13*. Создать очередь, информационные поля которой содержат строки из файла file5.txt (Список фамилий учащихся, упорядоченный по алфавиту). Вставить в этот список новую фамилию с сохранением порядка.
Провести тестирование проекта для следующих исходных данных:
