Тема: Лінійний односвязний список
Відомість абітурієнтів, які склали вступні іспити в коледж, містить: П.І.Б., адреса, оцінки. Визначити кількість абітурієнтів, які проживають. в місті і склали іспити з середнім балом не нижче 4.5, вивести їх прізвища в алфавітному порядку.
#include "pch.h"
#include "iostream"
#include <string.h>
#include <stdlib.h>
using namespace std;
struct Student
{
char Name[20];
char NameLast[30];
int Age;
char home[30];
int Mark[5];
Student *Next;
} *Head, *p;
void Input(Student *El)
{
cout << endl;
cout << "Имя: "; cin.getline(El->Name, 20);
cout << "Фамилия: "; cin.getline(El->NameLast, 30);
cout << "Полных лет "; cin >> El->Age;
cin.ignore();
for (int i = 0; i < 5 ; i++)
{
cout << "Оценки ";
cin >> El->Mark[i];
cin.ignore();
}
cout << "Адрес "; cin.getline(El->home, 30);
El->Next = NULL;
}
void del_stud()
{
char c = 0;
while (Head != NULL)
{
cout << Head->NameLast << " -изъято" << endl;
Student *temp = Head->Next;
delete Head;
Head = temp;
cout << "Продолжить извлечения y/n="; cin >> c;
if (c == 'n') break;
}
}
void del_stud_m(int n)
{
int c = 0; Student *temp = Head;
Student *pp = temp;
while (temp != NULL)
{
c++;
if (c == n)
{
pp->Next = temp->Next;
cout << temp->NameLast << " -изъято" << endl; break;
}
else pp = temp;
temp = temp->Next;
}
}
void del_stud_K(int n)
{
Student *temp = Head;
Student *pp = temp;
while (temp != NULL)
{
if (temp->Age >= n)
{
if (temp == Head)
pp->Next = temp->Next;
cout << temp->NameLast << " -изъято" << endl; break;
}
else pp = temp;
temp = temp->Next;
}
}
void Add1(Student *student)
{
Student *temp = new Student;
temp = student;
temp->Next = Head;
Head = temp;
}
void Add_end(Student *student)
{
Student *temp = new Student;
if (Head == NULL) {
Head = student; exit(0);
}
else temp = Head;
while (temp->Next != NULL)
{
temp = temp->Next;
}
temp->Next = student;
}
void Show()
{
Student *temp = Head;
cout << "Имя: ";
cout << "Фамилия: ";
cout << "Полных лет "; cout << "Адрес " << endl;
while (temp != NULL)
{
cout << temp->Name << "\t";
cout << temp->NameLast << "\t";
cout << temp->Age << "\t" << "\t";
cout << temp->home << endl;
for (int i = 0; i<5; i++)
{
cout << "Оценки - ";
cout << temp->Mark[i] << endl;
}
temp = temp->Next;
}
cout << endl;
}
int main()
{
bool l = 1;
setlocale(LC_ALL, "RUS");
Head = NULL;
while (l)
{
cout << "1- Добавление n элементов" << endl;
cout << "2- Добавление элементов к началу " << endl;
cout << "3- Добавление элементов в конец " << endl;
cout << "4- Удаление элемента с вершины " << endl;
cout << "5- Вывод элементов списка " << endl;
cout << "6- Изъятия при условии " << endl;
cout << "7- Изъятия за номером " << endl;
cout << "8- Изъятия последнего элементов " << endl;
cout << "10-Выход" << endl;
cout << "Выберите режим работы " << endl;
int k = 0;
cin >> k;
cin.ignore();
switch (k)
{
case 1:
{ int N;
cout << "Введи число студентов N ="; cin >> N;
cin.ignore();
for (int i = 0; i < N; i++)
{
p = new Student; Input(p); cout << i + 1 << endl; Add1(p);
} break;
}
case 2: { p = new Student; Input(p); Add1(p); break; }
case 3: { p = new Student; Input(p); Add_end(p); break; }
case 4: { del_stud(); break; }
case 5: { if (Head) Show(); else cout << " Пустой" << endl;
break; }
case 6: { break; }
case 7: { int m; cin >> m; del_stud_m(m); break; }
case 8: { del_stud(); break; }
case 9: { break; }
case 10: { l = 0; exit(0); break; }
}
}
system("PAUSE");
return 0;
}
0