Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*1) создает пустой список;
- 2) добавляет элементы в список;
- 3) удаляет элементы из списка;
- 4) выполняет функции по вариантам.
- 5) выводит список на экран.
- 6) выход
- Список «Авиарейсы» : номер рейса, пункт назначения, время вылета.*/
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <locale>
- typedef struct avia
- {
- char destination[255];
- int nomer;
- char time[255];
- struct avia *next;
- }avia;
- bool acces = false;
- int count1;
- avia* getLastButOne(avia *head)
- {
- if (head->next == NULL)
- return NULL;
- while (head->next->next)
- head = head->next;
- return head;
- }
- avia* getNth(avia *head, int Nth)
- {
- while (int i = 0 < Nth - 2 && head)
- {
- head = head->next;
- i++;
- }
- return head;
- }
- avia* getLast(avia *head)
- {
- while (head->next)
- head = head->next;
- return head;
- }
- int CreateList()
- {
- int n;
- printf("Введите кол-во элементов списка: ");
- scanf_s("%d", &n);
- printf("Список успешно создан!\n");
- acces = true;
- return n;
- }
- void push(avia **head, char *destination, int nomer, char *time)
- {
- avia *tmp = (avia*)malloc(sizeof(avia));
- if (*head == NULL)
- {
- for (int i = 0; i < 255; i++)
- tmp->destination[i] = destination[i];
- tmp->nomer = nomer;
- for (int i = 0; i < 255; i++)
- tmp->time[i] = time[i];
- tmp->next = NULL;
- *head = tmp;
- }
- else
- {
- for (int i = 0; i < 255; i++)
- tmp->destination[i] = destination[i];
- tmp->nomer = nomer;
- for (int i = 0; i < 255; i++)
- tmp->time[i] = time[i];
- tmp->next = *head;
- *head = tmp;
- }
- }
- void pushback(avia *head, char *destination, int nomer, char *time)
- {
- avia *last = getLast(head);
- avia *tmp = (avia*)malloc(sizeof(avia));
- for (int i = 0; i < 255; i++)
- tmp->destination[i] = destination[i];
- tmp->nomer = nomer;
- for (int i = 0; i < 255; i++)
- tmp->time[i] = time[i];
- tmp->next = NULL;
- last->next = tmp;
- }
- void insert(avia *head, char *destination, int nomer, char *time, int position)
- {
- avia *tmp = NULL;
- int i = 2;
- while (i < position && head->next)
- {
- head = head->next;
- i++;
- }
- tmp = (avia*)malloc(sizeof(avia));
- for (int i = 0; i < 255; i++)
- tmp->destination[i] = destination[i];
- tmp->nomer = nomer;
- for (int i = 0; i < 255; i++)
- tmp->time[i] = time[i];
- if (head->next)
- tmp->next = head->next;
- else
- tmp->next = NULL;
- head->next = tmp;
- }
- void pop(avia **head)
- {
- avia *prev = NULL;
- if (head == NULL)
- printf("Список пуст, удалять нечего!\n");
- else
- {
- prev = (*head);
- (*head) = (*head)->next;
- free(prev);
- printf("Элемент успешно удалён!\n");
- }
- }
- void popback(avia **head)
- {
- avia *lastbn = getLastButOne(*head);
- if (lastbn == NULL)
- {
- free(*head);
- *head = NULL;
- }
- else
- {
- free(lastbn->next);
- lastbn->next = NULL;
- }
- }
- void deleteNth(avia **head, int Nth)
- {
- avia* prev = getNth(*head, Nth);
- avia* elem = prev->next;
- prev->next = elem->next;
- free(elem);
- }
- void display(avia **head)
- {
- avia *tmp = *head;
- while (tmp != NULL)
- {
- printf("%s %d %s\n", tmp->destination, tmp->nomer, tmp->time);
- tmp = tmp->next;
- }
- }
- void findMax(avia **head)
- {
- int i;
- avia *tmp = (*head), *max = (*head);
- for (i = 0; i < count1 - 1; i++)
- {
- tmp = tmp->next;
- if (max->nomer < tmp->nomer)
- max = tmp;
- }
- printf("Номер максимального элемента (по номеру рейса): %d\n", i + 1);
- printf("Его данные: (пункт назначения) %s (номер рейса) %d (время) %s\n", max->destination, max->nomer, max->time);
- }
- void findMin(avia **head)
- {
- int i;
- avia *tmp = (*head), *min = (*head);
- for (i = 0; i < count1 - 1; i++)
- {
- tmp = tmp->next;
- if (min->nomer > tmp->nomer)
- min = tmp;
- }
- printf("Номер минимального элемента (по номеру рейса): %d\n", i + 1);
- printf("Его данные:(пункт назначения) %s (номер рейса) %d (время) %s\n", min->destination, min->nomer, min->time);
- }
- void MoreFnc(avia **head)
- {
- int newchoice;
- printf("1)Поиск максимального элемента\n2)Поиск минимального элемента\n");
- scanf_s("%d", &newchoice);
- switch (newchoice)
- {
- case 1:
- findMax(head);
- break;
- case 2:
- findMin(head);
- break;
- }
- }
- void main()
- {
- setlocale(LC_ALL, "rus");
- avia *head = NULL;
- int choice, count;
- while (true)
- {
- system("cls");
- printf("1)Создание списка\n");
- printf("2)Добавление элемента в список\n");
- printf("3)Удаление элемента из списка\n");
- printf("4)Другие функции\n");
- printf("5)Вывод списка на экран\n");
- printf("6)Выход\n");
- scanf_s("%d", &choice);
- fflush(stdin);
- system("cls");
- switch (choice)
- {
- case 1:
- count = CreateList();
- system("pause");
- break;
- case 2:
- if (acces == true)
- {
- if (count1 < count)
- {
- char destination[255];
- int nomer;
- char time[255];
- printf("Пункт назначения: ");
- gets_s(destination);
- gets_s(destination);
- printf("Введите номер рейса: ");
- scanf_s("%d", &nomer);
- printf("Введите время: ");
- gets_s(time);
- gets_s(time);
- system("cls");
- if (count1 == 0)
- {
- push(&head, destination, nomer, time);
- count1 += 1;
- printf("Первый элемент упешно добавлен!\n");
- system("pause");
- break;
- }
- printf("1)Добавление в начала списка\n2)Добавление в конец списка\n3)Добавление n-го элемента\n");
- int pushChoice;
- scanf_s("%d", &pushChoice);
- switch (pushChoice)
- {
- case 1:
- push(&head, destination, nomer, time);
- count1 += 1;
- break;
- case 2:
- pushback(head, destination, nomer, time);
- count1 += 1;
- break;
- case 3:
- printf("Выберите место для элемента ");
- int position;
- scanf_s("%d", &position);
- fflush(stdin);
- if (position < 2)
- push(&head, destination, nomer, time);
- else
- insert(head, destination, nomer,time, position);
- count1 += 1;
- break;
- }
- printf("Элемент успешно добавлен!\n");
- }
- else
- printf("Список полностью заполнен, удалите один из уже имеющихся элементов, что бы добавить новый!\n");
- }
- else
- printf("Вы не можете добавлять элементы, пока не создадите список!\n");
- system("pause");
- break;
- case 3:
- if (acces == true)
- {
- int choice;
- printf("1)Удаление первого элемента списка\n");
- printf("2)Удаление последнего элемента списка\n");
- printf("3)Удаление n - го элемента списка\n");
- scanf_s("%d", &choice);
- switch (choice)
- {
- case 1:
- pop(&head);
- count1 -= 1;
- break;
- case 2:
- popback(&head);
- count1 -= 1;
- break;
- case 3:
- printf("Выберите номер элемента: ");
- int Nth;
- scanf_s("%d", &Nth);
- fflush(stdin);
- if (Nth < 2)
- {
- pop(&head);
- break;
- }
- if (Nth == count1)
- {
- popback(&head);
- break;
- }
- if (Nth > count || Nth <= 0)
- printf("Элемента с таким номером в списке нет!");
- else
- deleteNth(&head, Nth);
- break;
- }
- }
- else
- printf("Вы не можете удалять элементы, пока не создадите список!\n");
- system("pause");
- break;
- case 4:
- if (acces == true)
- MoreFnc(&head);
- else
- printf("Вы не можете использовать фукции, пока не создадите список!\n");
- system("pause");
- break;
- case 5:
- if (acces == true)
- display(&head);
- else
- printf("Вы не можете вывести список на экран, пока его не создадите!\n");
- system("pause");
- break;
- case 6:
- exit(0);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement