Last active
December 10, 2015 12:18
-
-
Save vertrigo/4433516 to your computer and use it in GitHub Desktop.
Очередь. Вывод студентов у которых фамилия начинается на букву А (англ). (сделал в 2 способа).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
struct stud | |
{ | |
char fam[10],name[10],group[10]; | |
int gr,rs; | |
}; | |
struct Node // Звено списка | |
{ | |
stud data; | |
Node *Next; //Указатель на следующее звено | |
}; | |
void sread(stud &s) | |
{ | |
printf("Family: \n");scanf("%s",&s.fam); | |
if (s.fam[0] != '*') { | |
printf("Name: \n");scanf("%s",&s.name); | |
printf("Group: \n");scanf("%s",&s.group); | |
printf("Year: \n");scanf("%i",&s.gr); | |
printf("Rating: \n");scanf("%i",&s.rs); | |
} | |
} | |
void main() | |
{ | |
Node *Head,*Tail; // Указатели на голову и хвост списка | |
Head = NULL; Tail = NULL; // Инициализация - присваиваем нулевой адрес | |
stud s; // Объявляем структуру | |
do | |
{ | |
sread(s); | |
if (s.fam[0] != '*') | |
{ | |
Node *temp=new Node; //Выделение памяти для нового звена списка (очереди) | |
temp->data=s; //Заносим структуру в динамическую память | |
temp->Next=NULL; //Указание, что следующее звено новосозданной структуры пока пустое | |
if (Head!=NULL) //Если список не пуст | |
{ | |
Tail->Next=temp; //Указание, что следующее звено списка это новосозданная структура | |
Tail=temp; | |
}else Head=Tail=temp; | |
} | |
} while (s.fam[0] != '*'); | |
int k=0; | |
Node *temp=Head; //Временный указатель на начало списка | |
while (temp!=NULL) //Пока в списке что-то встречается | |
{ | |
if (temp->data.fam[0]=='A') | |
{ | |
k++; | |
printf("F=%s N=%s G=%s Y=%i Rs=%i\n",temp->data.fam, temp->data.name,temp->data.group, temp->data.gr, temp->data.rs); | |
} | |
temp = Head->Next; //Резерв адреса на следующий элемент списка | |
delete Head; // Освобождаем память | |
Head=temp; //Сдвиг начала на следующий адрес, который берем из резерва | |
} | |
printf("Всего найдено %i студентов.",k); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
struct stud | |
{ | |
char fam[10],name[10],group[10]; | |
int gr,rs; | |
}; | |
struct Node // Звено списка | |
{ | |
stud data; | |
Node *Next; //Указатель на следующее звено | |
}; | |
class List | |
{ | |
Node *Head,*Tail; //Указатели на начало списка и на конец | |
public: | |
List():Head(NULL),Tail(NULL){}; //Инициализация указателей как пустых | |
~List(); //Деструктор для освобождения памяти от всего что будет | |
void sread(stud &s); | |
void Add(); //Функция заполнения структуры Node и добавления её в список как элемента | |
void Show(); //Функция отображения списка List | |
}; | |
List::~List() | |
{ | |
Node *temp = Head; //Временный указатель на начало списка | |
while (temp != NULL) //Пока в списке что-то есть | |
{ | |
temp=Head->Next; //Резерв адреса на следующий элемент списка | |
delete Head; //Освобождение памяти от первой структуры как элемента списка | |
Head=temp; //Сдвиг начала на следующий адрес, который берем из резерва | |
} | |
} | |
void List::sread(stud &s) | |
{ | |
printf("Family: \n");scanf("%s",&s.fam); | |
if (s.fam[0] != '*') { | |
printf("Name: \n");scanf("%s",&s.name); | |
printf("Group: \n");scanf("%s",&s.group); | |
printf("Year: \n");scanf("%i",&s.gr); | |
printf("Rating: \n");scanf("%i",&s.rs); | |
} | |
} | |
void List::Add() | |
{ | |
stud s; | |
do | |
{ | |
sread(s); | |
if (s.fam[0] != '*') | |
{ | |
Node *temp=new Node; //Выделение памяти для нового звена списка | |
temp->data=s; // Заносим структуру в динамическую память | |
temp->Next=NULL; //Указание, что следующее звено новосозданной структуры пока пустое | |
if (Head!=NULL) //Если список не пуст | |
{ | |
Tail->Next=temp; //Указание, что следующее звено списка это новосозданная структура | |
Tail=temp; | |
} else Head=Tail=temp; | |
} | |
} while (s.fam[0] != '*'); | |
} | |
void List::Show() | |
{ | |
int k=0; | |
Node *temp=Head; //Временный указатель на начало списка | |
while (temp!=NULL) //Пока в списке что-то встречается | |
{ | |
if (temp->data.fam[0]=='A') | |
{ | |
k++; | |
printf("F=%s N=%s G=%s Y=%i Rs=%i\n",temp->data.fam, temp->data.name,temp->data.group, temp->data.gr, temp->data.rs); | |
} | |
temp=temp->Next; //Сдвигаем указатель на начало на адрес следующего элемента | |
} | |
printf("Всего найдено %i студентов.",k); | |
} | |
void main() | |
{ | |
List lst; | |
lst.Add(); | |
lst.Show(); | |
lst.~List(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment