Skip to content

Instantly share code, notes, and snippets.

@vertrigo
Last active December 10, 2015 12:19
Show Gist options
  • Save vertrigo/4433418 to your computer and use it in GitHub Desktop.
Save vertrigo/4433418 to your computer and use it in GitHub Desktop.
Стек. Вывод студентов у которых фамилия начинается на букву А (англ). (сделал в 2 способа).
#include <stdio.h>
#include <conio.h>
struct stud
{
char fam[10],name[10],group[10];
int gr,rs;
};
struct list
{
stud data; //Описываем структуру stud с именем data
list *Next,*Head; //Описываем голову стека и указатель на следующий элемент
};
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()
{
list *MyList=new list; //Выделяем память для стека
MyList->Head=NULL; //Во избежание ошибок инициализируем первый элемент
stud s;
do
{
sread(s);
if (s.fam[0] != '*')
{
list *temp = new list; //Выделяем память для нового элемента
temp->data = s; //Записываем в поле x принимаемый в функцию элемент x
temp->Next = MyList->Head; //Указываем, что следующий элемент это предыдущий
MyList->Head = temp; //Сдвигаем голову на позицию вперед
}
} while (s.fam[0] != '*');
int k = 0;
list *temp=new list; //Выделяем память под временный элемент
while (MyList->Head!=NULL)
{
if (MyList->Head->data.fam[0]=='A')
{
k++;
printf("F=%s N=%s G=%s Y=%i Rs=%i\n",MyList->Head->data.fam, MyList->Head->data.name,MyList->Head->data.group, MyList->Head->data.gr, MyList->Head->data.rs);
}
temp=MyList->Head->Next; //Переходим к следующему элементу
delete MyList->Head;
MyList->Head=temp;
}
printf("Всего найдено %i студентов.",k);
getch();
}
#include <stdio.h>
#include <conio.h>
struct stud
{
char fam[10],name[10],group[10];
int gr,rs;
};
struct list
{
stud data; //Описываем структуру stud с именем data
list *Next,*Head; //Описываем голову стека и указатель на следующий элемент
};
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 Add(list **MyList) //Принимаем элемент и указатель на указатель на стек
{
stud s;
do
{
sread(s);
if (s.fam[0] != '*')
{
list *temp = new list; //Выделяем память для нового элемента
temp->data = s; //Записываем в поле x принимаемый в функцию элемент x
temp->Next = (*MyList)->Head; //Указываем, что следующий элемент это предыдущий
(*MyList)->Head = temp; //Сдвигаем голову на позицию вперед
}
} while (s.fam[0] != '*');
}
void Show(list *MyList) //Нужен только сам стек
{
int k = 0;
list *temp=new list; //Выделяем память под временный элемент
temp=MyList->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 ClearList(list *MyList)
{
while (MyList->Head!=NULL) //Пока по адресу не пусто
{
list *temp = MyList->Head->Next; //Временная переменная для хранения адреса следующего элемента
delete MyList->Head; //Освобождаем адрес обозначающий начало
MyList->Head=temp; //Меняем адрес на следующий
}
}
void main()
{
list *MyList=new list; //Выделяем память для стека
MyList->Head=NULL; //Во избежание ошибок инициализируем первый элемент
Add(&MyList);
Show(MyList);
ClearList(&MyList);
getch();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment