Last active
December 10, 2015 12:19
-
-
Save vertrigo/4433418 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 <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(); | |
} |
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 <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