Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lin_St.doc
Скачиваний:
1
Добавлен:
15.12.2018
Размер:
89.09 Кб
Скачать

Содержание Связный (линейный) список

– структура данных, в произвольно выбранное место которой могут включаться данные, а также изыматься оттуда.

Каждая компонента списка определяется ключом (число или строка символов).

Пример. Определить, встречается ли список М1 в списке М2; если «да», то сколько раз.

Решение:

Program M1_M2; Uses Crt; Type EXS = ^ S;  S = Record         Data : integer;       Next : EXS;  End; Var u, x, m1, m2 : EXS; i, Kol : integer; Procedure Poisk(Var x1, x2 : EXS); Var m3, m4 : EXS; Begin   Kol := 0; m3 := m1; m4 := m2;   while m4 <> Nil do     Begin       if m4^.Data = m3^.Data then       Begin         m3 := m3^.Next;         m4 := m4^.Next;         if m3 = Nil then        Begin           inc(Kol);           m3 := m1;         End;       End         else Begin             m3 := m1;             m4 := m4^.Next;            End;     End; End; Procedure Init (Var u : EXS); Var y : EXS;   Digit : integer; Begin   Writeln('Введите список. Конец ввода – 0');   u := Nil;   Read(Digit);   while Digit <> 0 do     Begin       New(y);       y^.Next := Nil;       y^.Data := Digit;       if u = Nil then u := y         else x^.Next := y;       x := y;       Read(Digit);     End;   Writeln; End; Procedure Print(X : EXS); Begin   while X <> Nil do     Begin       Write(X^.Data : 5);       X := X^.Next;     End;   Readln;   Writeln; End; Begin   ClrScr;   Init(m1);   Init(m2);   Writeln(' Список 1:');   Print(m1);   Writeln(' Список 2:');   Print(m2);   Poisk(m1, m2);

If Kol=0 Then Writeln('не встречается')

Else Writeln('встречается ', Kol,' раз(а)') End.

Пример работы программы:

Введите список. Конец ввода – 0

2

0

Введите список. Конец ввода – 0

6

2

8

4

2

2

7

0

Список 1:

2

Список 2:

6 2 8 4 2 2 7

встречается 3 раз(а)

Контрольные вопросы

1. Дать определение динамической структуры «список».

2. Сколько элементов может содержать список? Как заканчивается список?

3. Сколько полей может содержать элемент списка? От чего зависит количество полей?

4. Какого типа могут быть поля элементов списка?

5. Можно ли последовательно "связать" два списка разного типа и почему?

6. Можно ли одновременно работать с несколькими списками?

Упражнения

1. Написать программу формирования списка из текстового файла, состоящего из строк. Затем требуется удалить из этого списка заданное слово.

2. Написать программу, содержащую процедуру, которая меняет местами требуемые элементы непустого списка:

1) первый и второй элементы;

2) первый и пятый элементы;

3) первый и последний элементы.

3. Написать программу, содержащую процедуру, которая вставляет новый элемент перед каждым вхождением заданного элемента.

4. Написать программу, содержащую процедуру, которая вставляет новый элемент за каждым вхождением заданного элемента.

5. Написать программу, содержащую подпрограмму, которая проверяет на равенство списки М1 и М2.

6. Написать программу, содержащую функцию, которая определяет, входит ли список М1 в список М2. Предполагается, что списки существуют.

7. Написать программу, содержащую подпрограмму, которая копирует в конец непустого списка М его первый элемент.

8. Написать программу, содержащую подпрограмму, которая копирует в начало непустого списка М его последний элемент.

9. Написать программу, содержащую процедуру, которая копирует в список М за каждым вхождением заданного элемента все элемента списка М1.

10. Написать программу, содержащую процедуру, которая объединяет два упорядоченных по неубыванию списка М1 и М2 в один упорядоченный по неубыванию список:

1) построив новый список М;

2) сменив соответствующим образом ссылки в М1 и М2.

12. Написать программу, содержащую функцию, которая проверяет, упорядочены ли элементы списка по алфавиту.

13. Написать программу сортировки существующего списка по алфавиту.

14. Написать программу, которая создает файл целых чисел, а затем формирует список целых чисел файла.

1) Создать в конце списка элемент, содержащий сумму всех чисел файла.

2) Создать список чисел, являющихся суммой соседних элементов.

15. Написать программу, которая создает текстовый файл, а затем формирует список строк файла. Требуется:

1) создать список обратных строк.

2) создать отсортированный список строк.

16. Написать программу, которая создает файл комбинированного типа, а затем формирует список, используя какое-либо поле записи. Создать отсортированный список. 17. Написать программу, которая создает файл комбинированного типа, а затем формирует список элементов файла. Создать отсортированный по какому-либо полю список.

18. Написать программу, которая создает список L2, являющийся копией списка L1, начинающегося с данного узла.

19. Написать программу, которая удаляет из списка все вхождения заданного ключа.

20. Два многочлена

и

заданы своими коэффициентами, которые хранятся в форме списков. Написать программу:

1) проверки на равенство многочленов Р и Q;

2) построения многочлена R=P+Q.

21. Сформировать список целых чисел и удалить из него все четные числа.

22. Написать программу, которая проверяет, упорядочены ли элементы списка по алфавиту.

23. Написать программу подсчета количества слов в списке, которые начинаются с той же буквы, что и следующее слово.

24. Определить, является ли симметричным произвольный текста любой длины. Текст должен оканчиваться точкой.

25. Вычислить значение выражения . Значения вводятся с клавиатуры и динамически размещаются в памяти.

26. Написать программу, которая на основе заданного списка L создает два новых списка L1 и L2, где. L1 содержит нечетные узлы, а L2 – четные.

Литература

1. Динамические структуры данных. Связные списки. – [Электронный ресурс]. – Режим доступа http://khpi-iip.mipk.kharkiv.edu/library/datastr/book/prt05.html

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]