Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

6 14ЛР инфа

.docx
Скачиваний:
17
Добавлен:
16.04.2021
Размер:
301.13 Кб
Скачать

Лабораторная работа №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*) ;

Скриншот контрольного примера выполнения программы

6

Соседние файлы в предмете Основы программирования