Skip to content

Instantly share code, notes, and snippets.

@romec512
Last active May 29, 2018 20:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save romec512/01ec9afaa147d9b6293e95bf611661ff to your computer and use it in GitHub Desktop.
Save romec512/01ec9afaa147d9b6293e95bf611661ff to your computer and use it in GitHub Desktop.
Lab8
#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