ОАИП 2 лабораторная. 2 лаба оаип2. Лабораторная работа 2 "Работа с очередями"
Скачать 71.91 Kb.
|
Министерство образования Республики Беларусь Учреждение образования БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ Инженерно-экономический факультет Лабораторная работа №2 “Работа с очередями” Вариант 12 Разработайте программу, позволяющую работать с очередью, каждый узел которой должен хранить информацию, задаваемую одной из структур согласно варианту задания. Программа не должна содержать глобальных переменных и указателей и должна быть снабжена системой меню для выполнения следующих операций: 1. Начальное формирование очереди (создание самого первого узла) 2. Добавление нового узла в конец очереди 3. Удаление первого узла из очереди с возвратом данных, которые он содержал 4. Вывод данных из всех узлов очереди на экран 5. Определение длины очереди 6. Очистка очереди (удаление всех узлов) 7. Завершение работы программы Необходимо также обеспечить надежность работы программы с учетом возможности неправильных действий пользователя. 12. struct node { char fio[20]; //фамилия и инициалы больного int kartochka; //номер карточки char vrach[20]; //фамилия и инициалы врача node *next; //указатель на следующий узел }; Header.h #include #include #include #include #include struct node { char fio[20]; //фамилия и инициалы больного int kartochka; //номер карточки char vrach[20]; //фамилия и инициалы врача node* next; //указатель на следующий узел }; void first(struct node**, struct node**); void add(struct node**); node* del(struct node**); void print(struct node*); int size(struct node*); void cleaning(struct node**, struct node**); Func.cpp #include "Header.h" void first(struct node** begin, struct node** end) { node* p = new node; system("cls"); printf("Введите фамилию больного:\n"); fflush(stdin); gets_s(p->fio); printf("Введите карточку больного:\n"); scanf_s("%d", &p->kartochka); getchar(); fflush(stdin); printf("Введите фамилию врача:\n"); fflush(stdin); gets_s(p->vrach); p->next = NULL; *begin = *end = p; } void add(struct node** end) { node* p = new node; system("cls"); printf("Введите фамилию больного:\n"); fflush(stdin); gets_s(p->fio); printf("Введите карточку больного\n"); scanf_s("%d", &p->kartochka); getchar(); printf("Введите фамилию больного:\n"); fflush(stdin); gets_s(p->vrach); p->next = NULL; (*end)->next = p; *end = p; } node* del(node** begin) { node* c = new node; c->kartochka = (*begin)->kartochka; strcpy_s(c->fio, (*begin)->fio); strcpy_s(c->vrach, (*begin)->vrach); node* p = *begin; *begin = p->next; delete(p); return c; } void print(struct node* begin) { node* p = begin; while (p != NULL) { printf("%s\n", p->fio); printf("%d\n ", p->kartochka); printf("%s\n", p->vrach); p = p->next; } } int size(struct node* begin) { int length = 0; node* p = begin; while (p != NULL) { length++; p = p->next; } return length; } void cleaning(struct node** begin, struct node** end) { node* k; node* p = *begin; while (p != 0) { k = p; p = p->next; *begin = (*begin)->next; if (*begin == NULL) *end = NULL; delete k; } } Main.cpp #include "Header.h" void main() { system("chcp 1251"); node* begin = NULL, * end = NULL; int k = 0, length = 0; while (1) { system("cls"); printf("1.Начальное формирование очереди (создание самого первого узла):\n"); printf("2.Добавление нового узла в конец очереди:\n"); printf("3.Удаление первого узла из очереди:\n"); printf("4.Вывод данных из всех узлов очереди на экран:\n"); printf("5.Определение длины очереди:\n"); printf("6.Очистка очереди (удаление всех узлов):\n"); printf("7.Завершение работы программы\n"); switch (_getch()) { case'1': system("cls"); if (begin == 0) first(&begin, &end); else printf("Уже создан первый узел очереди\n"); system("pause"); break; case'2': system("cls"); if (end != 0) add(&end); else printf("Не создан первый узел очереди\n"); system("pause"); break; case'3': system("cls"); del(&begin); printf("Узел успешно удален!\n"); system("pause"); break; case'4': system("cls"); if (begin == 0) printf("Очередь пуста\n"); else { puts("Вывод данных из всех узлов очереди на экран."); print(begin); } system("pause"); break; case'5': system("cls"); puts("Определение длины очереди."); printf("%d",size(begin)); system("pause"); break; case'6': system("cls"); cleaning(&begin, &end); if (begin == NULL) printf("Очередь очищена\n"); system("pause"); break; case'7': return; default: system("cls"); printf("Введите другое число:\n"); system("pause"); } } } При выборе формирований очереди (пункт 1): При добавлении нового узла (пункт 2): |