Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задачи по ООП для 234 группы (окончание).doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
300.54 Кб
Скачать

4. Линейные однонаправленные списки

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

Ч.Хоар

Для выполнения задач этого раздела нужно повторить следующий теоретический материал:

  1. информационная модель списка, представленная с помощью структур языка C++;

  2. построение списка с заглавным звеном;

  3. включение звена:

    • алгоритм включения звена в список после звена, на которое указывает заданная ссылка;

    • алгоритм включения в однонаправленный список звена с задан­ным информационным полем перед звеном, на которое указывает за­данная ссылка Res;

  4. удаление звена:

  • алгоритм удаления звена, расположенного после звена, на ко­торое указывает ссылка Res;

  • алгоритм удаления звена, на которое указывает ссылка Res.

4.1. Задачи для самостоятельного решения

Если Слюника раздразнить, он начинает ля­гаться и не успокоится, пока не лягнет дразнившего каждой ногой по 3 раза. Однаж­ды Мряка обозвала Слюника хрямзиком и он лягнул ее 27 раз. Сколько ног у Слюника?

Г.Остер. Задачник

При работе с линейными списками требуется, как правило, выпол­нять следующие операции (по Д.Кнуту):

  • определить число узлов в списке;

  • найти в списке узел с заданным значением некоторого инфор­мационного поля;

  • получить доступ к k-му узлу списка, чтобы проанализировать и(или) изменить содержимое его полей;

  • включить новый узел непосредственно перед(за) k-м узлом;

  • исключить k-й узел;

  • объединить два (или более) списка в один список;

  • разбить список на два (или более) списка;

  • сделать копию списка;

  • выполнить сортировку узлов списка по значениям некоторых информационных полей.

Необходимо уметь составлять функции, реализующие перечисленные выше операции для работы с однонаправленными списками и ил­люстрировать их с помощью схем "до и после".

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

Построение

4.1. Пусть задан файл f, элементами которого являются целые чис­ла. Написать программу построения из элементов файла f однонап­равленного списка.

4.2. Пусть задан файл, элементами которого являются символы. На­писать программу построения из элементов файла f однонаправленно­го списка.

4.3. Пусть задан массив, элементами которого являются целые чис­ла. Написать программу построения из элементов массива X однонап­равленного списка.

4.4. Пусть задан массив символов. Написать программу построения из элементов массива X однонаправленного списка.

4.5. Предположим, что уже построен и задан указателем P однонап­равленный список, элементами которого являются вещественные чис­ла. Написать программу, которая по списку P строит два новых списка: L1 - из положительных элементов списка P, L2 - из осталь­ных элементов списка P.

4.6. Предположим, что уже построен и задан указателем P однонап­равленный список, элементами которого являются вещественные чис­ла. Написать программу, которая по списку P строит два новых списка: L1 - из положительных элементов списка P, L2 - из отрица­тельных элементов списка P.

4.7*. Написать программу, которая объединяет два упорядоченных по неубыванию списка L1 и L2 в один упорядоченный по неубыванию список путем построения нового списка.

4.8. Многочлен P(x) = an*xn + an-1*xn-1+...+ ao с целыми коэффи­циентами представьте в виде списка, причем, если ai=0, то соот­ветствующее звено в список не включается.

4.9. Многочлен P(x) = an*xn + an-1*xn-1+...+ ao с целыми коэффи­циентами представьте в виде списка, причем, если ai=0, то соот­ветствующее звено в список не включается. Описать функцию Dif(p,q), которая строит многочлен p - производную многочлена q.

4.10. Многочлен P(x) = an*xn + an-1*xn-1+...+ ao с целыми коэф­фициентами представьте в виде списка, причем, если ai=0, то соот­ветствующее звено в список не включается. Описать функцию Add(p,q,r), которая строит многочлен p - сумму многочленов q и r.

4.11*. Задача состоит в чтении некоторого текста, выборе из него слов и подсчете частоты их появления, то есть в составлении частот­ного словаря. Очевидно, что для этого нужно составить список слов, найденных в тексте. Каждое очередное слово, прочитанное в тексте, ищется в списке. Если слово найдено, счетчик его частоты увеличивается, в противном случае слово добавляется к списку. Чтобы сосредоточить внимание на основной задаче обработки списка, мы предположим, что слова уже выделены из исследуемого текста, закодированы целыми числами и находятся во входном файле.