Односвязные списки в языке СС. лаб 2 сем 2 односвяз Изотов 5307. Односвязные списки в языке С
Скачать 436.79 Kb.
|
Прототип функции: void menupoisk() Вызов функции: menupoisk() 8.22 Функция menucreate Назначение функции: вывод меню редактирования списка. Прототип функции: void menucreate() Вызов функции: menucreatek() 8.23 Функция menusort Назначение функции: вывод меню сортиовки. Прототип функции: void menusort() Вызов функции: menusortk() 8.24 Функция spravka Назначение функции: вывод справки. Прототип функции: void spravka() Вызов функции: spravka() 9.Исходный текст программы #include "stdafx.h" #include "conio.h" #include "stdlib.h" #include "iostream" #include "locale.h" #include "windows.h" #define _CRT_SECURE_NO_WARNINGS typedef struct t { int number; char brand[30]; char model[30]; char recomend[30]; char cambertype[30]; int flex; int lenght; }SN; struct snow { SN info; struct snow *next; }; snow* inputback(snow*, short); //Функция добавления элементов в конец списка snow* inputpre(snow*); //Функция добавления элементов в начало списка void output(snow*); //Функция вывода информации snow* search(snow*, short); //Функция поиска по словам snow* searchint(snow*, short, int);//Функция поиска по числам void mainmenu(); //Функция вывода меню программы void menupoisk(); //Функция вывода меню поиска void spravka(); //Функция вывода справки char* inputslovo(char*); //Функция ввода слова char* clearchar(char*); //Функция освобождения памяти занятой словом snow* number(snow*); //Функция нумерации элементов списка snow* clearhead(snow*); //Функция удаления списка snow* inputinfo(snow*); //Функция ввода информации о сноубордах snow* inputn(snow*); //Функция добавления информации о n-ом сноуборде snow* clearone(snow*); //Функция удаления n-ого элемента списка void inputflex(int*); //Функция ввода значения жесткости void inputlenght(int*); //Функция ввода значения длины snow* rewrite(snow*, snow*); //Функция записи информации в новый список void menucreate(); //Функция вывода меню редактирования списка void menusort(); //Функция вывода меню сортировки snow* sort(snow*, short); //Функция для выполнения сортировки snow* exchange(snow*, snow*); //Функция обмена информацией между соседними эл-ми char* priority(char*); //Функция ввода приоритета для сортировки snow* changen(snow*); //Функция изменения информации о n-ом сноуборде int main() { setlocale(LC_ALL, "Russian"); snow *head; snow* newhead; short x, flag1 = 0, flag3 = 0, choice, choice2; int flex, lenght; do { mainmenu(); x = _getch(); system("cls"); switch (x) { case '1': if (flag1 == 1) { puts("Формирование нового списка приведет к удалению уже введенных данных!"); puts("Если вы хотите добавить информацию без удаления текущего списка"); puts("вернитесь в меню программы и воспользуйтесь пунктами 3, 4, 5!\n"); puts("Создать новый список(введенные данные будут удалены)?\n"); puts("Для продолжения нажмите - 1 "); puts("Для возврата к меню нажмите - 0"); choice = _getch(); system("cls"); if (choice == '1') { flag1 = 1; head = clearhead(head); if (flag3 == 1) { flag3 = 0; newhead = clearhead(newhead); } puts("Формирование нового списка"); do { head = inputback(head, x); puts("Хотите продолжить ввод"); puts("Для продолжения нажмите 1, выход - 0:\n"); fflush(stdin); choice = _getch(); puts("---------------------------------------"); } while (choice != '0'); head = number(head); } } else { flag1 = 1; puts("Формирование нового списка"); do { head = inputback(head, x); puts("Хотите продолжить ввод"); puts("Для продолжения нажмите 1, выход - 0: \n"); fflush(stdin); choice = _getch(); puts("----------------------------------------------"); } while (choice != '0'); head = number(head); } system("cls"); break; case '2': if (flag1 == 1) { puts("Информация о всех сноубордах"); output(head); } else puts("Сначала введите информацию о сноубордах"); _getch(); system("cls"); break; case '3': if (flag1 == 1) { menucreate(); choice2 = _getch(); system("cls"); switch (choice2) { case '1': puts("Добавление информации в конец списка"); do { head = inputback(head, x); puts("Хотите продолжить ввод"); puts("Для продолжения нажмите 1, выход – 0:"); fflush(stdin); choice = _getch(); puts("-------------------------------------"); } while (choice != '0'); head = number(head); break; case '2': puts("Добавление информации в начало списка"); do { head = inputpre(head); puts("Хотите продолжить ввод"); puts("Для продолжения нажмите 1, выход – 0:"); fflush(stdin); choice = _getch(); puts("-------------------------------------"); } while (choice != '0'); head = number(head); break; case '3': puts("Добавление информации на n-место"); head = inputn(head); head = number(head); _getch(); break; case '4': puts("Вы действительно хотите удалить информацию о n–ом сноуборде ? \n"); puts("Для продолжения нажмите - 1 "); puts("Для возврата к меню нажмите - 0"); fflush(stdin); choice = _getch(); if (choice != '0') { head = clearone(head); if (head == NULL) { puts("\nСписок был полностью удален"); flag1 = 0; } _getch(); } break; case '5': puts("Изменение информации о n-ом сноуборде\n"); head = changen(head); break; default: puts("В меню нет такого пункта. Повторите ввод."); _getch(); break; } } else { puts("Сначала сформируйте список!"); _getch(); } system("cls"); break; case '4': if (flag1 == 1) { puts("Удаление списка приведет у удалению всей введенной ранее информации."); puts("Вы действительно хотите удалить список?\n"); puts("Для продолжения нажмите - 1 "); puts("Для возврата к меню нажмите - 0"); fflush(stdin); choice = _getch(); if (choice == '1') { flag1 = 0; head = clearhead(head); puts("\nИнформация успешно удалена!"); _getch(); } } else { puts("Сначала сформируйте список!"); _getch(); } system("cls"); break; case '5': if (flag1 == 1) { if (flag3 == 1) newhead = clearhead(newhead); flag3 = 1; menupoisk(); choice2 = _getch(); system("cls"); switch (choice2) { case '1': puts("Введите название бренда(до 30 символов): "); newhead = search(head, choice2); break; case '2': puts("Введите название модели(до 30 символов): "); newhead = search(head, choice2); break; case '3': puts("Введите назначение доски(до 30 символов): "); newhead = search(head, choice2); break; case '4': puts("Введите тип прогиба(до 30 символов): "); newhead = search(head, choice2); break; case '5': puts("Поиск сноубордов по жесткости"); inputflex(&flex); newhead = searchint(head, choice2, flex); break; case '6': puts("Поиск сноубордов по длине"); inputlenght(&lenght); newhead = searchint(head, choice2, lenght); break; default: flag3 = 0; puts("В меню нет такого пункта. Повторите ввод."); break; } } else puts("Сначала введите информацию о сноубордах!"); if (newhead == NULL) flag3 = 0; _getch(); system("cls"); break; case '6': if (flag3 == 1) { puts("Результат поиска по запросу:"); if (newhead != NULL) output(newhead); else puts("По данному запросу ничего не найдено"); } else puts("Сначала нужно выполнить поиск по запросу"); _getch(); system("cls"); break; case '7': if (flag1 == 1) { menusort(); choice2 = _getch(); system("cls"); switch (choice2) { case '1': head = sort(head, choice2); break; case '2': head = sort(head, choice2); break; default: puts("В меню нет такого пункта. Повторите ввод."); break; } head = number(head); } else puts("Сначала введите информацию о сноубордах!"); _getch(); system("cls"); break; case '8': spravka(); _getch(); system("cls"); break; default: if (x != '0') { puts("В меню нет такого пункта. Повторите ввод."); _getch(); system("cls"); } } } while (x != '0'); return 0; } //--------------------------------------------------------------------------------------- //Функция добавление элементов в конец списка snow* inputback(snow* head, short x) { snow* p = NULL; snow* head2 = NULL; p = inputinfo(p); if ((head != NULL && x == '1') || x == '3') { head2 = head; while (head2->next != NULL) head2 = head2->next; head2->next = (p); head2 = (p); head2->next = NULL; } if (head == NULL) { (p)->next = head; head = (p); } return head; } //Функция добавления элементов в начало списка snow* inputpre(snow* head) { snow* p = NULL; p = inputinfo(p); (p)->next = head; head = (p); return head; } //Функция вывода информации void output(snow* head) { snow* qwe; if (head != NULL) { qwe = head; do { printf("\nСноуборд № %d", qwe->info.number); printf("\n\tбренд: %s", qwe->info.brand); printf("\n\tмодель: %s", qwe->info.model); printf("\n\tназначение: %s", qwe->info.recomend); printf("\n\tпрогиб: %s", qwe->info.cambertype); printf("\n\tжесткость: %d", qwe->info.flex); printf("\n\tдлина: %d", qwe->info.lenght); puts("\n"); qwe = qwe->next; } while (qwe != NULL); } } //Функция ввода слова для поиска char* inputslovo(char* slovo) { char l; //вводимый сивол short nosimvol = 0; //проверяет слово наличие букв и цифр short i = 0; //индекс массива short h = 0; //хранит место первого введенного символа char sl[30]; //введенное слово while (i == 0 || nosimvol == 0) { nosimvol = 0; i = 0; h = 0; l = 'o'; while (i < 30 && (int)l != 13) { l = _getche(); //если вводимый символ цифра, буква латиницы или пробел if ((int)l >= 32 && (int)l < 127) { if ((int)l != 32 && nosimvol == 0) { nosimvol = 1; h = i; } sl[i] = l; i++; } else { //запрет на ввод символов кроме лат. букв, цифр и пробелов if ((int)l != 13 && (int)l != 8) { printf("\b"); printf(" "); printf("\b"); } } /*удаление уже введенных символов и проверка на полное удаление слова*/ if ((int)l == 8 && i != 0) { if (h == i - 1) { nosimvol = 0; h = 0; } printf(" "); printf("\b"); i--; } } //проверка на наличие символов в слове if (i == 0 || nosimvol == 0) puts("Вы не ввели ни одного символа. Повторите ввод:"); else { if (i == 30) sl[i - 1] = '\0'; else sl[i] = '\0'; } } slovo = (char*)malloc(sizeof(char) * (i + 1)); strcpy(slovo, sl); return slovo; } //Функция поиска по ключевому слову snow* search(snow* head, short choice2) { char* slovo2; short poisk; //0-если по запросу ничего не нашлось short k; //0-если в словах нашлись не совпадающие символы char* snowptr; char* slovopoisk; snow* newhead = NULL; snow* newhead2 = NULL; snow* head2 = NULL; snow* newheadre; slovo2 = inputslovo(slovo2); head2 = head; poisk = 0; do { slovopoisk = slovo2; switch (choice2) { case '1': snowptr = head2->info.brand; break; case '2': snowptr = head2->info.model; break; case '3': snowptr = head2->info.recomend; break; case '4': snowptr = head2->info.cambertype; break; } k = 1; while (*snowptr != '\0' && *slovopoisk != '\0' && k == 1) { //если разные символы if (*snowptr != *slovopoisk && (*snowptr != (int)*slovopoisk + 32) && (*snowptr != (int)*slovopoisk - 32)) k = 0; snowptr++; slovopoisk++; } //если слова одинаковы if (k == 1 && *snowptr == '\0' && *slovopoisk == '\0') { newheadre = rewrite(newheadre, head2); if (newhead == NULL) { newhead = newheadre; newhead->next = NULL; newhead2 = newhead; } else { newhead2->next = newheadre; newhead2 = newheadre; newhead2->next = NULL; } poisk = 1; } head2 = head2->next; } while (head2 != NULL); if (poisk == 1) { printf("\n\nСноуборды по запросу: %s", slovo2); output(newhead); } else puts("\nСноубордов по данному запросу не нашлось."); return newhead; } //Функция поиска по числу snow* searchint(snow* head, short choice2, int flex) { short poisk;//0-если по запросу ничегоне нашлось int intpoisk; snow* newhead = NULL; snow* head2 = NULL; snow* newhead2 = NULL; snow* newheadre = NULL; head2 = head; poisk = 0; do { switch (choice2) { case '5': intpoisk = head2->info.flex; break; case '6': intpoisk = head2->info.lenght; break; } if (flex == intpoisk) { newheadre = rewrite(newheadre, head2); if (newhead == NULL) { newhead = newheadre; newhead->next = NULL; newhead2 = newhead; } else { newhead2->next = newheadre; newhead2 = newheadre; newhead2->next = NULL; } poisk = 1; } head2 = head2->next; } while (head2 != NULL); if (poisk == 0) puts("Сноубордов по данному запросу не нашлось."); if (poisk == 1) { printf("\n\nСноуборды по запросу: %d", flex); output(newhead); } return newhead; } //Функция вывода меню программы void mainmenu() { puts("Меню программы <Сноуборды>"); puts("\nДля перехода введите номер пункта меню"); puts("1-ввод информации о сноубордах (формирование нового списка)"); puts("2-вывод введенной информации на экран"); puts("3-редактирование информации (списка)"); puts("4-удаление всей введенной информации (удаление списка)"); puts("5-поиск информации по запросу"); puts("6-вывод информации, найденной по запросу"); puts("7-сортировка информации (элементов списка)"); puts("8-справка"); puts("\n0- выход из программы"); } //Функция вывода меню поиска void menupoisk() { puts("По какому критерию произвести поиск?"); puts("\nДля перехода введите номер пункта меню:"); puts("1-по бренду"); puts("2-по модели"); puts("3-по назначению"); puts("4-по типу прогиба"); puts("5-по жесткости"); puts("6-по длине"); } //Функция вывода справки void spravka() { puts("Справка"); puts("\nВведите информацию о сноубордах."); puts("При вводе используйте латинские буквы,цифры,пробелы."); puts("Вы можете выполнить поиск сноуборда по ключевому слову или числу."); puts("При вводе ключевого слова используйте латинские буквы,цифры,пробелы."); puts("Длина слова не должна превышать 30 символов."); puts("Если вы превысите лимит - ввод слова автоматически прекратится."); } //Функция освобождения памяти занятой словом char* clearchar(char* slovo) { free(slovo); return NULL; } //Функция нумерации элементов snow* number(snow* head) { snow* head2 = NULL; short i = 1; head2 = head; while (head2 != NULL) { head2->info.number = i; head2 = head2->next; i++; } return head; } //Функция ввода значения жесткости void inputflex(int* ptrflex) { int flex; do { flushall(); puts("\nВведите жесткость доски (число от 1 до 10): "); scanf_s("%d", &flex); if (flex < 1 || flex > 10) puts("Недопутимое значение жесткости! Повторите ввод."); } while (flex < 1 || flex > 10); *ptrflex = flex; } //Функция ввода значения длины void inputlenght(int* ptrlenght) { int lenght; do { puts("\nВведите длину доски (число от 120 до 220): "); fflush(stdin); scanf("%d", &lenght); if (lenght < 120 || lenght > 220) puts("Недопутимое значение длины! Повторите ввод."); } while (lenght < 120 || lenght > 220); *ptrlenght = lenght; } //Функция удаления списка snow* clearhead(snow* head) { snow* head2 = NULL; int i; while (head != NULL) { head2 = head; head = head->next; free(head2); } return NULL; } //Функция ввода информации о сноуборде snow* inputinfo(snow* p) { char* slovo = NULL; int flex; int lenght; p = (snow*)malloc(sizeof(snow)); puts("\nВведите название бренда (до 30 символов): "); slovo = inputslovo(slovo); strcpy((p)->info.brand, slovo); slovo = clearchar(slovo); puts("\n\nВведите модель доски (до 30 символов): "); slovo = inputslovo(slovo); strcpy((p)->info.model, slovo); slovo = clearchar(slovo); puts("\n\nВведите назначение доски: "); slovo = inputslovo(slovo); strcpy((p)->info.recomend, slovo); slovo = clearchar(slovo); puts("\n\nВведите тип прогиба: "); slovo = inputslovo(slovo); strcpy((p)->info.cambertype, slovo); slovo = clearchar(slovo); puts(""); inputflex(&flex); (p)->info.flex = flex; inputlenght(&lenght); (p)->info.lenght = lenght; return p; } //Функция добавления элемента на n-место snow* inputn(snow* head) { int n; int i = 1; snow* p = NULL; snow* head2 = NULL; p = inputinfo(p); do { puts("\nВведите номер нового элемента:"); scanf("%d", &n); head2 = head; //если добавляем не в начало if (n > 1) { while (i < n - 1 && head2->next != NULL) { head2 = head2->next; i++; } p->next = head2->next; head2->next = p; } else { //если добавляем в начало списка if (n >= 0) { p->next = head; head = p; } else puts("Вы ввели отрицателное значение! Повтрите ввод!"); } } while (n < 0); puts("\nЭлемент успешно добавлен!"); return head; } //Функция удаления n-ого элемента списка snow* clearone(snow* head) { int n; int i = 1; int m; snow* head2 = NULL; snow* prehead = NULL; head2 = head; while (head2->next != NULL) { head2 = head2->next; i++; } m = i; do { fflush(stdin); puts("\nВведите номер сноуборда для удаления:"); scanf("%d", &n); if (n >= 1 && n <= m) { head2 = head; i = 1; //если нужно удалить первый элемент списка if (n == 1) { //если в списке не один элемент if (m != 1) { prehead = head; head = head->next; free(prehead); } else { free(head); head = NULL; } } else { while (i < n && head2->next != NULL) { prehead = head2; head2 = head2->next; i++; } prehead->next = head2->next; free(head2); } //если список не был полностью удален if (head != NULL) head = number(head); } else puts("Cноуборда с таким номером не нашлось. Повторите ввод!"); } while (n < 1 || n > m); puts("\nЭлемент успешно удален!"); return head; } //Функция записи информации в новый список snow* rewrite(snow* newheadre, snow* head2) { snow* p = NULL; p = (snow*)malloc(sizeof(snow)); *p = *head2; newheadre = p; return newheadre; } //Функция вывода меню редактирования списка void menucreate() { puts("1-добавление информации в конец списка"); puts("2-добавление информации в начало списка"); puts("3-добавление информации на n-место"); puts("4-удаление информации о n-ом сноуборде"); puts("5-изменение информации о n-ом сноуборде"); } //Функция обмена информацией между соседними элементами списка snow* exchange(snow* head2, snow* headnext) { snow* p = NULL; snow* head3 = NULL; p = (snow*)malloc(sizeof(snow)); *p = *head2; *head2 = *headnext; head2->next = headnext; head3 = headnext->next; *headnext = *p; headnext->next = head3; return head2; } //Функция вывода меню сортировки void menusort() { puts("1-Сортировка по возрастанию"); puts("2-Сортировка по убыванию"); } //Изменение информации о n-ом элементе snow* changen(snow* head) { int n; int m; int i; snow* head2 = NULL; short choice2; int flex; int lenght; char* slovo = NULL; head2 = head; while (head2->next != NULL) { head2 = head2->next; i++; } m = i; do { puts("Введите номер сноуборда:"); scanf("%d", &n); if (n < 1 || n > m + 1) puts("В списке нет сноуборда с таким номером. Повторите ввод\n"); } while (n < 1 || n > m + 1); head2 = head; for (i = 0; i < n - 1; i++) head2 = head2->next; do { printf("\nВведите номер критерия для изменения инф. о сноуборде №%d", n); puts("\n1-бренд"); puts("2-модель"); puts("3-назначение"); puts("4-тип прогиба"); puts("5-жесткость"); puts("6-длина"); puts("0-выход в главное меню"); choice2 = _getch(); system("cls"); switch (choice2) { case '1': printf("Сноуборд №%d", n); printf("\nТекущее значение: %s", head2->info.brand); puts("\n\nВведите название бренда (до 30 символов): "); slovo = inputslovo(slovo); strcpy(head2->info.brand, slovo); slovo = clearchar(slovo); puts("\n\nИзменения успешно внесены"); getch(); system("cls"); break; case '2': printf("Сноуборд №%d", n); printf("\nТекущее значение: %s", head2->info.model); puts("\n\nВведите модель доски (до 30 символов): "); slovo = inputslovo(slovo); strcpy(head2->info.model, slovo); slovo = clearchar(slovo); puts("\n\nИзменения успешно внесены"); getch(); system("cls"); break; case '3': printf("Сноуборд №%d", n); printf("\nТекущее значение: %s", head2->info.recomend); puts("\n\nВведите назначение доски: "); slovo = inputslovo(slovo); strcpy(head2->info.recomend, slovo); slovo = clearchar(slovo); puts("\n\nИзменения успешно внесены"); getch(); system("cls"); break; case '4': printf("Сноуборд №%d", n); printf("\nТекущее значение: %s", head2->info.cambertype); puts("\n\nВведите тип прогиба: "); slovo = inputslovo(slovo); strcpy(head2->info.cambertype, slovo); slovo = clearchar(slovo); puts("\n\nИзменения успешно внесены"); getch(); system("cls"); break; case '5': printf("Сноуборд №%d", n); printf("\nТекущее значение: %d", head2->info.flex); inputflex(&flex); head2->info.flex = flex; puts("\n\nИзменения успешно внесены"); getch(); system("cls"); break; case '6': printf("Сноуборд №%d", n); printf("\nТекущее значение: %d", head2->info.flex); inputlenght(&lenght); head2->info.lenght = lenght; puts("\n\nИзменения успешно внесены"); getch(); system("cls"); break; default: if (choice2 != '0') { puts("В меню нет такого пункта. Повторите ввод"); getch(); system("cls"); } } } while (choice2 != '0'); return (head); } //Функция ввода приоритета сортировки char* priority(char* slovo) { char l; short nosimvol = 0;//0-если не ввели ни одного символа short i = 0; short j; char sl[3]; short z;//1-если ввели два одинаковых критерия short k; while (i == 0 || nosimvol == 0 || z == 1) { nosimvol = 0; i = 0; z = 0; l = 'o'; while (i < 2 && (int)l != 13) { l = _getche(); //если ввели 1 или 2 if ((int)l >= 49 && (int)l <= 50) { if (nosimvol == 0) { nosimvol = 1; } sl[i] = l; i++; } else { //запрет на ввод символов кроме '1' или '2' if ((int)l != 13 && (int)l != 8) { printf("\b"); printf(" "); printf("\b"); } } //удаление введеннго слова if ((int)l == 8 && i != 0) { printf(" "); printf("\b"); i--; } } if (i == 0 || nosimvol == 0) puts("Вы не ввели ни одного символа. Повторите ввод:"); else sl[i] = '\0'; //проверка на ввод одинаковых критериев for (j = 0; j < i - 1; j++) for (k = j + 1; k < i; k++) { if (sl[j] == sl[k]) { puts("Вы ввели два или более одинаковых критерия. Повторите ввод"); z = 1; } } } slovo = (char*)malloc(sizeof(char) * (i + 1)); strcpy(slovo, sl); return slovo; } //Функция для сортировки списка snow* sort(snow* head, short choice2) { snow* head2 = NULL; snow* headnext = NULL; snow* p = NULL; int a; int nexta; int b; int nextb; char* prior = NULL; int n = 10000; int i = 0; short h = 0;//1-если нужно перейти к следующей паре элементов int j = 0;//0-если еще неизвестно кол-во элементов списка char* prior2 = NULL; short z = 0;//0-если было сравнение по первому приоритету head2 = head; if (head2->next == NULL) puts("В списке всего один элемент"); else { switch (choice2) { case '1': puts("Сортировка по возрастанию\n"); break; case '2': puts("Сортировка по убыванию\n"); break; } puts("Введите номера критериев для сортировки (по приоритету) :"); puts("1 - по жесткости"); puts("2 - по длине\n"); //ввод приоритета сортировки prior = priority(prior); do { z = 0; i = 0; h = 0; head2 = head; headnext = head2->next; while (i < n && headnext->next != NULL) { head2 = head2->next; headnext = head2->next; i++; } //если еще не известно кол-во эементов списка if (j == 0) { n = i; j++; } do { switch (*prior) { case '1': //если сортировка по жесткости a = head2->info.flex; nexta = headnext->info.flex; break; case '2': //если сортировка по длине a = head2->info.lenght; nexta = headnext->info.lenght; break; } //если сортировка по возрастанию или убыванию if (choice2 == '1' ? a > nexta : a < nexta) { exchange(head2, headnext); head2 = head2->next; headnext = head2->next; } else { //если по первому приоритету эл-ты равны if (a == nexta) { //если перед этим сравнивали по первому приоритету if (z == 0) { prior2 = prior; z = 1; } prior2++; switch (*prior2) { case '1': //если сортировка по жесткости b = head2->info.flex; nextb = headnext->info.flex; break; case '2': //если сортировка по жесткости b = head2->info.lenght; nextb = headnext->info.lenght; break; case '\0': //если элементы равны по всем приоритетам head2 = head2->next; headnext = head2->next; z = 0; break; } if (*prior2 != '\0' && ( choice2 == '1' ? b > nextb : b < nextb)) { exchange(head2, headnext); head2 = head2->next; headnext = head2->next; z = 0; } } else /*если элемент больше или меньше следующего переход к следующей паре элементов*/ h = 1; } } while (headnext != NULL && h == 0); n--; } while (n != -1); } puts("\n\nСортировка успешно выполнена"); return head; } 10.Результат выполнения программы При выполнении программы были получены результаты, совпадающие со значениями из таблиц 1 и 2. Ошибки не обнаружены. Вывод При выполнении лабораторной работы были получены практические навыки работы с односвязными списками в языке «С/C++». |