Last active
May 29, 2018 20:39
-
-
Save romec512/01ec9afaa147d9b6293e95bf611661ff to your computer and use it in GitHub Desktop.
Lab8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define _CRT_SECURE_NO_WARNINGS | |
#include <stdio.h> | |
#include <locale.h> | |
#include <stdlib.h> | |
struct LocalItem { | |
int inf; | |
LocalItem *next; | |
}; | |
struct GlobalItem { | |
int inf; | |
LocalItem *element; | |
GlobalItem *next; | |
}; | |
void pushGlobal(GlobalItem **globalList) | |
{ | |
GlobalItem *gl = *globalList; | |
if (*globalList == NULL)//проверка на пустоту осн. списка | |
{ | |
gl = (GlobalItem*)malloc(sizeof(GlobalItem)); | |
(gl)->next = NULL; | |
printf("Введите инф. часть добавляемого элемента основного списка.\n"); | |
scanf("%d", &(gl)->inf); | |
(gl)->element = NULL; | |
*globalList = gl; | |
return; | |
} | |
printf("Введите инф. часть элемента, около которого хотите добавить элемент.(основной список)\n"); | |
int _search; | |
scanf("%d", &_search); | |
GlobalItem *globalCurrent = (GlobalItem*)malloc(sizeof(GlobalItem)); | |
printf("Введите инф.часть добавляемого элемента.(основной список)\n"); | |
scanf("%d", &globalCurrent->inf); | |
printf("1)Добавить до.\n2)Добавить после.\n"); | |
int select; | |
scanf("%d", &select); | |
if (select == 1) | |
{ | |
if ((gl)->inf == _search) //поиск заданного элемента, ДО которого добавляется новый элемент | |
{ | |
globalCurrent->next = *globalList; //если заданный элемент первый | |
globalCurrent->element = NULL; | |
*globalList = globalCurrent; | |
return; | |
} | |
while ((gl)->next != NULL) | |
{ | |
if ((gl)->next->inf == _search) | |
{ | |
globalCurrent->next = (gl)->next; | |
globalCurrent->element = NULL; | |
(gl)->next = globalCurrent; | |
return; | |
} | |
gl = (gl)->next; | |
} | |
} | |
else if (select == 2)//поиск заданного элемента, после которого добавляем новый элемент | |
{ | |
while ((gl) != NULL) | |
{ | |
if ((gl)->inf == _search) | |
{ | |
globalCurrent->next = (gl)->next; | |
globalCurrent->element = NULL; | |
(gl)->next = globalCurrent; | |
return; | |
} | |
gl = (gl)->next; | |
} | |
} | |
printf("Элемент не найден.\n"); | |
free(globalCurrent); | |
} | |
void pushLocal(GlobalItem **globalList) | |
{ | |
if (*globalList == NULL) // проверка на пустоту основного списка | |
{ | |
printf("Основной список пуст.\n"); | |
return; | |
} | |
printf("Введите инф. часть элемента основного списка, в который хотите добавить элемент.\n"); | |
int globalSearch; | |
scanf("%d", &globalSearch); | |
GlobalItem *glCur = *globalList; | |
while (glCur != NULL) // поиск в основном списке | |
{ | |
if (glCur->inf == globalSearch) | |
{ | |
if (glCur->element == NULL) // если вспомогательный список пуст | |
{ | |
glCur->element = (LocalItem*)malloc(sizeof(LocalItem)); | |
glCur->element->next = NULL; | |
printf("Введите инф. часть добавляемого элемента.(вспомогательный список)\n"); | |
scanf("%d", &glCur->element->inf); | |
return; | |
} | |
printf("Введите инф. часть элемента, около которого хотите добавить.(вспомогательный список)\n"); | |
int lSearch; | |
scanf("%d", &lSearch); | |
printf("Введите инф. часть добавляемого элемента.(вспомогательный список)\n"); | |
int val; | |
scanf("%d", &val); | |
printf("1)Добавить до.\n2)Добавить после.\n"); | |
int select; | |
scanf("%d", &select); | |
LocalItem *localCurrent = glCur->element; | |
if (select == 1) // добавление до | |
{ | |
if (localCurrent->inf == lSearch) | |
{ | |
LocalItem *lCur = (LocalItem*)malloc(sizeof(LocalItem)); | |
lCur->inf = val; | |
lCur->next = glCur->element; | |
glCur->element = lCur; | |
return; | |
} | |
while (localCurrent->next != NULL) | |
{ | |
if (localCurrent->next->inf == lSearch) | |
{ | |
LocalItem *lCur = (LocalItem*)malloc(sizeof(LocalItem)); | |
lCur->inf = val; | |
lCur->next = localCurrent->next; | |
localCurrent->next = lCur; | |
return; | |
} | |
localCurrent = localCurrent->next; | |
} | |
} | |
else if (select == 2) // добавление после | |
{ | |
while (localCurrent != NULL) | |
{ | |
if (localCurrent->inf == lSearch) | |
{ | |
LocalItem *lCur = (LocalItem*)malloc(sizeof(LocalItem)); | |
lCur->inf = val; | |
lCur->next = localCurrent->next; | |
localCurrent->next = lCur; | |
return; | |
} | |
localCurrent = localCurrent->next; | |
} | |
} | |
} | |
glCur = glCur->next; | |
} | |
printf("Элемент не найден.\n"); | |
} | |
void popGlobal(GlobalItem **globalList) | |
{ | |
GlobalItem *glCur = *globalList; | |
if (glCur == NULL) | |
{ | |
printf("Список пуст.\n"); | |
return; | |
} | |
int glSearch; | |
printf("Введите инф. часть элемента, который хотите удалить.\n"); | |
scanf("%d", &glSearch); | |
if (glCur->inf == glSearch)//если удаляемый элемент 1-ый | |
{ | |
GlobalItem *deleted = *globalList; | |
*globalList = (*globalList)->next; | |
GlobalItem *del = deleted->next; | |
deleted->next = del->next; | |
LocalItem *current = del->element; | |
while (current != NULL) | |
{ | |
LocalItem *deleted = current; | |
current = current->next; | |
free(deleted); | |
} | |
free(deleted); | |
return; | |
} | |
while (glCur->next != NULL) | |
{ | |
if (glCur->next->inf == glSearch) | |
{ | |
GlobalItem *del = glCur->next; | |
glCur->next = del->next; | |
LocalItem *current = del->element; | |
while (current != NULL) | |
{ | |
LocalItem *deleted = current; | |
current = current->next; | |
free(deleted); | |
} | |
free(del); | |
return; | |
} | |
glCur = glCur->next; | |
} | |
} | |
void popLocal(GlobalItem **globalList) | |
{ | |
GlobalItem *glL = *globalList; | |
int glSearch; | |
printf("Введите инф. часть элемента основного списка, в котором хотите удалить.\n"); | |
scanf("%d", &glSearch); | |
while (glL != NULL) | |
{ | |
if (glL->inf == glSearch) | |
{ | |
if (glL->element == NULL) | |
{ | |
printf("Дополнительный список пуст.\n"); | |
return; | |
} | |
int lSearch; | |
printf("Введите инф. часть элемента доп. списка, который хотите удалить.\n"); | |
scanf("%d", &lSearch); | |
LocalItem *lCur = glL->element; | |
if (lCur->inf == lSearch) //если удаляемый элемент всп. списка 1-ый | |
{ | |
LocalItem *deleted = glL->element; | |
glL->element = glL->element->next; | |
free(deleted); | |
return; | |
} | |
while (lCur->next != NULL) | |
{ | |
if (lCur->next->inf == lSearch) | |
{ | |
LocalItem *del = lCur->next; | |
lCur->next = del->next; | |
free(del); | |
return; | |
} | |
lCur = lCur->next; | |
} | |
} | |
glL = glL->next; | |
} | |
} | |
void search(GlobalItem *list) | |
{ | |
GlobalItem *glCur = list; | |
if (glCur == NULL) | |
{ | |
printf("Основной список пуст.\n"); | |
return; | |
} | |
printf("Введите инф. часть элемента, который хотите найти.\n"); | |
int search; | |
scanf("%d", &search); | |
while (glCur != NULL) | |
{ | |
LocalItem *lCur = glCur->element; | |
if (lCur == NULL) | |
{ | |
glCur = glCur->next; | |
continue; | |
} | |
while (lCur != NULL) | |
{ | |
if (lCur->inf == search) | |
{ | |
printf("%d\n", lCur->inf); | |
return; | |
} | |
lCur = lCur->next; | |
} | |
glCur = glCur->next; | |
} | |
printf("Элемент не найден.\n"); | |
} | |
void show(GlobalItem *list) | |
{ | |
GlobalItem *glCur = list; | |
if (glCur == NULL) | |
{ | |
printf("Основной список пуст.\n"); | |
return; | |
} | |
while (glCur != NULL) | |
{ | |
printf("Осн.список:%d ", glCur->inf); | |
LocalItem *lCur = glCur->element; | |
if (lCur == NULL) | |
{ | |
printf("Вспомогательный список пуст.\n"); | |
glCur = glCur->next; | |
continue; | |
} | |
printf("Вспомогательный список:"); | |
while (lCur != NULL) | |
{ | |
printf("->%d", lCur->inf); | |
lCur = lCur->next; | |
} | |
printf("\n"); | |
glCur = glCur->next; | |
} | |
} | |
void main() | |
{ | |
setlocale(LC_ALL, "rus"); | |
GlobalItem *list = NULL;//(GlobalItem*)malloc(sizeof(GlobalItem)); | |
while (true) | |
{ | |
int select; | |
printf("1)Добавить элемент основного списка.\n2)Добавить элемент вспомогательного списка.\n3)Удалить элемент осн. списка.\n" | |
"4)Удалить элемент вспомогательного списка.\n5)Вывод.\n6)Поиск.\n7)Выход.\n"); | |
scanf("%d", &select); | |
if (select == 1) | |
{ | |
pushGlobal(&list); | |
} | |
else if (select == 2) | |
{ | |
pushLocal(&list); | |
} | |
else if (select == 3) | |
{ | |
popGlobal(&list); | |
} | |
else if (select == 4) | |
{ | |
popLocal(&list); | |
} | |
else if (select == 5) | |
{ | |
show(list); | |
} | |
else if (select == 6) | |
{ | |
search(list); | |
} | |
else if (select == 7) | |
{ | |
break; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment