радиоэлектроники
Списки
Вариант 20
Минск,2020
1)задание
1)создает пустой список
2)добавляет элементы в список
3)удаляет элементы списка
4)выполняет функции по вариантам
5)выводит список на экран
6)выход
список "читатель" - фио, номер чит билета, название книги, срок возврата
2)код
Файл “Margo.h”
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
size_t day;
size_t month;
size_t year;
} Date;
typedef struct {
char fio[45];
size_t ID;
char title[50];
char giveBack[11];
} Reader;
typedef struct {
Node* first;
Node* last;
size_t count;
} List;
List* createList()
{
List* list = (List*)calloc(1, sizeof(Node));
list->count = 0;
list->first = list->last = NULL;
return list;
}
if ((*list) == NULL)
{
(*list) = (List*)calloc(1, sizeof(List));
(*list)->count = 0;
(*list)->first = (*list)->last = NULL;
}
if ((*list)->count == 0)
{
(*list)->first = (*list)->last = node;
}
else
{
node->next = (*list)->first;
(*list)->first = node;
}
++(*list)->count;
return (*list)->first;
}
if ((*list)->count == 0)
{
(*list)->first = (*list)->last = node;
}
else
{
(*list)->last->next = node;
(*list)->last = (*list)->last->next;
}
++(*list)->count;
return (*list)->last;
}
if (!list)
{
puts("Список не создан!");
}
else if (list->first == NULL)
{
puts("Список пуст!");
}
else
{
Node* node = list->first;
while (node)
{
++n;
node = node->next;
}
}
return n;
}
printList(list);
printf_s("Введите номер записи для удаления: ");
scanf_s("%zu", &n);
if (trail)
{
trail = list->first;
list->first = list->first->next;
if (trail == list->last)
list->last = NULL;
free(trail);
}
else
{
trail-> next = node->next;
if (node == list->last)
list->last = trail;
free(node);
}
--list->count;
}
else
puts("Список не существует либо пуст!");
}
(*list)->count = 0;
free(*list);
*list = NULL;
return 1;
}
else
{
puts("Невозможно удалить несуществующий список!");
return 0;
}
}
while (tmp)
{
while (del)
{
if (compareReaders(&tmp->reader, &del->reader))
{
while (trail->next != del)
{
trail = trail->next;
}
trail->next = del->next;
if (del == list->last)
list->last = trail;
free(del);
del = trail->next;
--list->count;
}
else
del = del->next;
}
tmp = tmp->next;
trail = tmp;
if (trail)
del = trail->next;
}
}
else
puts("Список не создан!");
}
Файл “main.c”
#include "Margo.h"
int main()
{
system("chcp 1251 & cls");
while (1)
{
puts("добро пожаловать");
puts("1.создать пустой список");
puts("2.добавить элемент в список");
puts("3.удалить элемент из списка");
puts("4.выполнить функции по вариантам");
puts("5.вывести список в консоль");
puts("6.выход");
printf_s(">> ");
scanf_s("%zu", &ch);
switch (ch)
{
case 1:
list = createList();
break;
case 2:
switch (ch)
{
case 1:
prepend(&list);
break;
case 2:
append(&list);
break;
default:
puts("Некорректный ввод!");
break;
}
break;
case 3:
removeItem(list);
break;
case 4:
puts("\t1.подсчитать кол-во элементов");
puts("\t2.удалить повторяющиеся элементы");
puts("\t3.полностью удалить список");
printf_s("\t>> ");
scanf_s("%zu", &ch);
switch (ch)
{
case 1:
{
size_t length = countList(list);
printf_s("\tКол-во элементов в списке: %zu\n", length);
}
break;
case 2:
deleteDuplicates(list);
printList(list);
break;
case 3:
if (deleteList(&list))
puts("Список удалён.");
break;
default:
puts("Некорректный ввод!");
break;
}
break;
case 5:
printList(list);
break;
default:
break;
}
if (ch == 6) break;
puts("------------------------------");
}
deleteList(&list);
return EXIT_SUCCESS;
}
3)консоль