Варианты индивидуальных заданий



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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!