4.Определены переменные: zvn *fst = NULL, *en, *r. Указатели fst, en – соответственно для адреса первого и последнего элемента списка; r – для значений адресов переменных типа zvn. Сформирован список с элементами типа zvn. Напишите коды перебора элементов списка.
5.Перечислите информацию, которая необходима, для того чтобы удалить из списка со значением равным некоторому числу k.
6.Написать фрагмент программы, который удаляет требуемый элемент из списка.
7.Перечислите информацию, которая необходима, для того чтобы в список добавить элемент со значением равным некоторому числу k.
8.Написать фрагмент программы, который добавляет новый элемент в список. Новый элемент следует за некоторым данным элементом.
9.Определены переменные: zvn *fst = NULL, *en= NULL, *r. Сформирован список. Пусть в указателе en находится адрес последнего элемента списка. Напишите коды присоединения нового элемента типа zvn к списку.
10.В указателе r находится адрес некоторого элемента списка. Напишите код вывода элемента списка, который является пятым относительно данного. Циклы не использовать. Ответ должен состоять из одной директивы.
11.Определены переменные: zvn *fst= NULL, *en, *r. Объясните код r -> nx.
12.Определены переменные: zvn *fst= NULL, *en, *r. Объясните код r -> inf.
13.Определены переменные: zvn *fst = NULL, *en, *r.
Объясните код r = r -> nx.
14.Определены переменные: zvn *fst = NULL, *en, *r.
Объясните код r ->nx->nx->nx-> nx-> inf.
15.Перечислите информацию, которая необходима для того, чтобы удалить из списка головной (первый) элемент списка.
19
16.Перечислите информацию, которая необходима для того, чтобы новый элемент стал головным (первым) элементом списка.
17.Написать фрагмент программы, который новый элемент списка делает головным.
18.Определить стек.
19.Определить очередь.
20.Перечислить операции на стеке.
21.Перечислить операции на очереди
Варианты заданий :
Задание выполнить, применяя списки двух видов: стека
иочереди.
1.Построить линейный список из входной последовательности чисел. Удалить из него все отрицательные числа.
2.Построить линейный список из входной последовательности чисел. Удалить из него все положительные числа.
3.Построить линейный список из входной последовательности чисел. Перестроить его так, чтобы сначала стояли все положительные числа, затем все отрицательные.
4.Построить линейный список из входной последовательности чисел. Перестроить его так, чтобы сначала стояли все отрицательные числа, затем все положительные.
5.Построить линейный список из входной последовательности чисел. Удалить из него все четные числа.
6.Построить линейный список из входной последовательности чисел. Удалить из него все нечетные числа.
7.Построить линейный список из входной последовательности чисел. Перестроить его так, чтобы сначала стояли все четные числа, затем все нечетные.
8.Построить линейный список из входной последовательности чисел. Перестроить его так, чтобы сначала стояли все нечетные числа, затем все четные.
9.Построить линейный список из входной последовательности чисел. Удалить из него все простые числа.
20
10.Построить линейный список из входной последовательности чисел. Удалить из него все числа, кроме простых.
11.Построить линейный список из входной последовательности чисел. Поменять местами первое и последнее число.
12.Построить линейный список из входной последовательности чисел. Поменять местами первое и второе число, третье и четвертое и т. д.
13.Построить линейный список из входной последовательности чисел. Поменять местами первое и максимальное число, последнее и минимальное.
14.Построить линейный список из входной последовательности чисел. Удалить из него все числа, кратные 3.
15.Построить линейный список из входной последовательности чисел. Удалить из него все числа, кратные 5.
Для вариантов 16–21 используется текстовый файл, в котором в столбик записано 10 фамилий в алфавитном порядке.
16.Построить линейный список из фамилий. Оставить в нем только фамилии, начинающиеся на букву «А», остальные удалить.
17.Построить линейный список из фамилий. Удалить из него фамилии, начинающиеся на букву «А».
18.Построить линейный список из фамилий. Удалить из него самую длинную фамилию.
19.Построить линейный список из фамилий. Удалить из него самую короткую фамилию.
20.Построить линейный список из фамилий. Вставить в него введенную фамилию, сохранив алфавитный порядок.
21.Построить линейный список из фамилий. Удалить
из него введенную фамилию.
Для вариантов 22–25 используется текстовый файл, в котором записана строка символов.
22. Построить линейный список из символов. Удалить из него цифры.
21
23.Построить линейный список из символов. Удалить из него запятые.
24.Построить линейный список из символов. Удалить из него повторяющиеся пробелы.
25.Построить линейный список из символов. Поменять местами первый и последний символ.
26.Удалить из списка все одинаковые значения.
27.В списке поменять местами третий отрицательный элемент с минимальным значением. Если в списке несколько минимальных элементов, то удалить все, кроме одного.
28.Если в списке отрицательные элементы идут подряд, удалить все, кроме одного.
29.Не меняя порядок записи чисел в списке выдать элементы списка в порядке возрастания значений.
30.Сдвинуть элементы списка циклически на k пози-
ций.
Ниже дана программа формирования списка и операций над списком. Эта программа является базовой для решения лабораторных работ данного раздела. Подробно данная тема раскрывается в пособии [1].
#include <conio.h> #include <stdio.h> #include <iostream.h>
// Определяется структура. Заказываем необходимый размер
// памяти для записи информации о новом объекте. struct node
{ int inf; // Поле для записи целых чисел.
node *next; // Поле указателя для записи адресов элементов
//типа node.
};
22
void main()
{node *r, *fr = NULL, *er; // fr – указатель на головной
//элемент списка.
//er – указатель на последний элемент списка.
//r – указатель для формирования нового узла списка.
node *rp;
int a, b; |
// a – переменная для записи целых чисел. |
clrscr(); FILE *f;
f = fopen("t.dat","r");
|
// Начало формирования списка. |
|
do |
// Начало цикла ввода чисел из файла. |
|
{ fscanf(f,"%d", &a); |
// Ввод числа из файла. |
|
r = new node; // Создаем новый элемент списка.
// Выделяем память для нового элемента. r->inf = a; // Инициализируем поле inf нового элемента
списка.
r->next = NULL; // Инициализируем поле указателя //нового элемента списка
if (fr == NULL) // Проверяем: список существует или нет. //Если fr = NULL, то списка нет.
fr = r; // Поэтому новый элемент объявляем головным.
else // Если список существует, то
er -> next = r; // новый элемент присоединяем к списку. er = r; } // Новый элемент объявляем последним.
while (!feof(f)); // Конец цикла ввода чисел из файла. fclose(f);
//Конец формирования списка.
//Вывод списка на экран.
cout << "\tСформирован список:\n\n"; r = fr;
23