Варианты индивидуальных заданий
1.
По списку L построить два новых списка L1 и L2: первый из элементов с положительными значениями, а второй из остальных элементов исходного списка.
2.
Вставить в список L новый элемент со значением E1 за каждым элементом с заданным значением E, если элемент со значением E входит в L.
3.
Вставить в список L новый элемент со значением Е1 перед каждым вхождением элемента с заданным значением E, если элемент со значением E входит в L.
4.
Вставить в непустой список L перед его последним элементом пару новых элементов со значениями Е1 и Е2.
5.
Вставить в непустой список L, элементы которого изначально упорядочены по не убыванию их значений, новый элемент со значением E так, чтобы сохранить упорядоченность элементов списка.
6.
Удвоить каждое вхождение элемента со значением E в списке L.
7.
Удалить из списка L все вхождения элемента со значением Е.
8.
Удалить из списка L все элементы с отрицательными значениями.
9.
Удалить из списка L за каждым вхождением элемента со значением E один элемент, если он есть и его значение отличено от Е.
10.
Оставить в списке L только первые вхождения одинаковых элементов.
11.
В списке L из каждой группы подряд идущих элементов с равными значениями оставить только один.
12.
Перевернуть список L, то есть изменить ссылки в этом списке так, чтобы его элементы оказались расположенными в обратном порядке.
13.
Найти элемент непустого списка с максимальным значением.
|
|
14.
Проверить, есть ли в списке L хотя бы два элемента с одинаковыми значениями.
15.
Проверить на равенство два списка L1 и L2.
16.
Построить список L1 – копию списка L.
17.
Вставить в список L за последним вхождением элемента со значением E все элементы списка L1, если элемент со значением E входит в L.
18.
Добавить в конец списка L1 все элементы списка L2.
19.
Сформировать список L, включив в него по одному разу элементы, которые входят хотя бы в один из списков L1 и L2.
20.
Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2.
21.
Сформировать список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в список L2.
22.
Сформировать список L, включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входят в другой из них.
23.
Объединить два упорядоченных списка L1 и L2 в один упорядоченный список, построив новый список L.
24.
Объединить два упорядоченных списка L1 и L2 в один упорядоченный список L1, меняя соответствующим образом ссылки в L1 и L2.
25.
Найти среднее арифметическое значений элементов непустого списка.
|
|
26.
Поменять местами первый и последний элемент списка.
27.
Проверить, упорядочены ли элементы списка по алфавиту.
28.
Найти сумму значений последнего и предпоследнего элементов списка.
29.
Удалить из списка последний отрицательный элемент, если такой есть.
30.
Заменить в списке L все вхождения элемента со значением Е1 на Е2.
31.
Вставить новый элемент после первого элемента непустого списка.
32.
Перенести в конец списка его первый элемент.
33.
Удалить из списка второй элемент, если такой есть.
34.
Подсчитать число вхождений элемента со значением E в список L.
35.
Удалить из списка L последнее вхождение элемента E, если такое есть.
36.
Подсчитать количество слов списка, которые начинаются и оканчиваются одной и той же литерой.
37.
Перенести в начало списка его последний элемент.
38.
Подсчитать количество слов списка, которые совпадают с последним словом.
39.
Подсчитать количество слов списка, которые оканчиваются той же литерой, что и следующее слово.
Пример программы
//Создать линейный список с символьной информационной частью
//Преобразовать линейный список в циклический, взяв в качестве
|
|
//головного элемента элемент с № p
//Многофайловый проект
//Основной файл spis.cpp
#include<iostream.h>
#include<locale.h>
#include"modulSpi.h"
//основная программа
int main()
{int i = 1, p;
list *first = NULL;
char ch;
setlocale(LC_ALL,"Russian") ;
cout << "\n Вводите элементы списка сплошной строкой;"
"\n в конце - точка:";
cout << "\n ";
cin >> ch;
while(ch != '.')
{first = sozdspis(ch, i, first);
i++;
cin >> ch;
}
cout << "Введите номер первого элемента для циклического списка\n";
cin >> p;
first = zicl(p,first);
if(first != NULL)
{cout << "Результат получен\n";
viewsp(first);
}
else cout << "Результата нет, элемента с таким номером в списке нет\n";
cin.get();
return 1;
}
//_____________________________________________________________________________
//
//Заголовочный файл
//Помещаем сюда определения новых типов и объявления функций
//Файл modulSpi.h
//Объявления типов
struct list
{char data ; //поле данных
int numb ; //поле номера элемента
list *link ; //поле адреса
} ;
//Объявления (прототипы) функций
list *sozdspis(char, int, list*) ;
list *zicl(int, list*) ;
void viewsp(list*) ;
//_____________________________________________________________________________
//Исходный файл
//Реализация набора функций для обработки списка
//Файл modulSpi.cpp
//
#include <iostream.h>
#include "modulSpi.h"
//zicl Begin__________________________________________________________________
|
|
//Зацикливание списка
list *zicl(int q, list *first)
{list *now = first, //указатель now устанавливаем на голову списка
*result;
while((now->numb != q) && (now != NULL)) now = now->link;
result = now; //result содержит указатель на элемент с номером q
//или NULL, если такого элемента нет
now = first; //указатель устанавливаем на голову списка
while(now->link != NULL) now = now->link; //сдвигаем указатель на конец
now->link = first; //зацикливаем
return result;
}
//zicl End_____________________________________________________________________
//viewsp Begin_________________________________________________________________
//Просмотр циклического списка
void viewsp(list *head)
{list *tec = head;
do
{cout << tec->data;
tec = tec->link;
}
while(tec != head);
}
//viewsp End___________________________________________________________________
//sozdspis Begin_______________________________________________________________
//Добавление нового элемента в список
list *sozdspis(char ch, int k, list *head)
{list *tec,
*nov = new(list);
nov->data = ch;
nov->numb = k;
nov->link = NULL;
if (head) //список не пуст
{tec = head;
while (tec->link)
tec = tec->link;
tec->link = nov;
}
else //список пуст
head = nov;
return head;
}
//sozdspis End________________________________________________________________
Лабораторная работа №15
Стек, дек, очередь
Цель лабораторной работы: изучение способов создания и принципов использования динамических структур данных типа стек, дек, очередь; изучение стандартных средств языка C/C++ для работы с динамической памятью; совершенствование навыков модульного программирования на языке C/C++ при решении задач обработки линейных списков; совершенствование способов разработки многофайловых проектов.
Задание на программирование: используя технологию процедурного программирования разработать программу обработки данных, содержащихся в заранее подготовленном файле, в соответствии с индивидуальным заданием. Применить динамическую структуру указанного в задании вида: стек, очередь или дек.
Порядок выполнения работы:
1) Получить у преподавателя индивидуальное задание.
2) Разработать математическую модель: описать с помощью формул и рисунков вид используемой динамической структуры и процессы её создания и использования.
3) Построить схему алгоритма решения задачи.
4) Использовать функции, реализующие полный набор операций для этой структуры:
- допустимые операции для стека: инициализация, проверка на пустоту, добавление нового элемента в начало, извлечение элемента из начала;
- допустимые операции для очереди: инициализация, проверка на пустоту, добавление нового элемента в конец, извлечение элемента из начала;
- допустимые операции для дека: инициализация, проверка на пустоту, добавление нового элемента в начало, добавление нового элемента в конец, извлечение элемента из начала, извлечение элемента из конца.
5) Составить спецификации функций.
6) Создать многофайловый проект на языке C/C++.
7) Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов. Обеспечить одновременный показ на экране содержимого входного и выходного файлов.
8) Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, спецификации функций, текст программы, контрольные примеры.
Дата добавления: 2018-04-05; просмотров: 1120; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!