6 14ЛР инфа
.docxЛабораторная работа №14
Линейные списки
Цель лабораторной работы: изучение способов создания и принципов использования односвязных линейных списков; изучение стандартных средств языка C/C++ для работы с динамической памятью; совершенствование навыков модульного программирования на языке C/C++ при решении задач обработки линейных списков; изучение способов разработки многофайловых проектов.
Задание на программирование: используя технологию процедурного программирования разработать программу обработки односвязных линейных списков с числом элементов в списке не менее десяти в соответствии с индивидуальным заданием.
Порядок выполнения работы:
1) Получить у преподавателя индивидуальное задание.
2) Построить схему алгоритма решения задачи с использованием функций создания, просмотра, обработки списка, удаления списка из динамической памяти.
3) Составить спецификации функций.
4) Составить программу на языке C/C++.
5) Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов. Обеспечить одновременный показ на экране исходного и результирующего списков.
6) Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, спецификации функций, текст программы, контрольные примеры.
Формулировка задания:
(Вариант №22)
Сформировать список L, включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входят в другой из них.
Текст программы
#include <iostream>
#include "ModulSpi.h"
int main()
{
list *first = NULL;
list *second = NULL;
list *result = NULL;
char ch;
cout << "\n Вводите элементы первого списка сплошной строкой;"
"\n в конце - точка:";
cout << "\n ";
cin >> ch;
while(ch != '.')
{
first = sozdspis(ch, first);
cin >> ch;
}
cout << "\n Вводите элементы второго списка сплошной строкой;"
"\n в конце - точка:";
cout << "\n ";
cin >> ch;
while(ch != '.')
{
second = sozdspis(ch, second);
cin >> ch;
}
result = zicl(first,second,result);
result = zicl(second, first,result);
if(result != NULL)
{cout << "Результат получен\n";
viewsp(result);
}
else cout << "Результата нет, списки одинаковы\n";
cout << endl;
cin.get();
return 1;
}
#include <iostream>
#include "modulSpi.h"
list *zicl( list *first,list *second,list *result)
{
list *copyfirst = first,
*copysecond = second;
int flag = 0;
while (copyfirst != NULL)
{
copysecond = second;
while (copysecond != NULL)
{
if (copyfirst->data == copysecond->data)
{
flag = 1;
}
copysecond = copysecond->link;
}
if(flag == 0)
{
result = sozdspis(copyfirst->data,result);
}
else
{
flag = 0;
}
copyfirst = copyfirst->link;
}
return result;
}
void viewsp(list *head)
{
list *tec = head;
do
{
cout << tec->data;
tec = tec->link;
}
while(tec != NULL);
}
list *sozdspis(char ch, list *head)
{list *tec,
*nov = new(list);
nov->data = ch;
nov->link = NULL;
if (head)
{tec = head;
while (tec->link)
tec = tec->link;
tec->link = nov;
}
else
head = nov;
return head;
}
using namespace std;
struct list
{
char data ;
list *link ;
} ;
list *sozdspis(char, list*) ;
list *zicl(list*,list*,list*) ;
void viewsp(list*) ;
Скриншот контрольного примера выполнения программы