Skip to content

Instantly share code, notes, and snippets.

@vertrigo
Last active December 10, 2015 12:18
Show Gist options
  • Save vertrigo/4433516 to your computer and use it in GitHub Desktop.
Save vertrigo/4433516 to your computer and use it in GitHub Desktop.
Очередь. Вывод студентов у которых фамилия начинается на букву А (англ). (сделал в 2 способа).
#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);
}
#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