помогите пожалуйста написать программу. не знаю что еще добавить. даны 2 списка. Создать новый список - пересечение двух этих списков
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream>
#include <windows.h>
using namespace std;
struct student
{
char fio[50];
int stipendia;
student* next;
};
typedef student* ptr;
ptr head3=new ptr;
void vvod(student &stud)
{
printf("ФИО: "); scanf("%s",&stud.fio);
printf("Размер стипендии: "); scanf("%d",&stud.stipendia);
}
int formspisok(ptr *head)
{
ptr p;
char let;
*head=NULL;
do
{
printf("Продолжить:д-да, н-нет\n");
let=_getch();
if(let=='н')return 1;
if(*head==NULL)
{
*head=new student;
p=*head;
}
else
{
p->next=new student;
p=p->next;
};
vvod(*p);
p->next=NULL;
}
while(1);
}
bool Find (ptr &head, ptr p)
{ bool flag=false;
ptr q = head;
while (q)
{
if(!strcmp(p->fio,q->fio)&& p->stipendia==q->stipendia)
{
flag=true;
break;
}
}
return flag;
}
void pechspisok(ptr head)
{
ptr p;
p=head;
while(p!=NULL)
{
printf("%s %d \n", p->fio, p->stipendia);
p=p->next;
}
}
void prosmotr(ptr &head1,ptr &head2)
{ bool flag;
ptr p;
p=head2;
while(p!=NULL)
{ flag=Find(head1,p);
if (flag)
{
break;
}
p=p->next;
}
}
void main()
{int L=1;
ptr head1=NULL, head2=NULL;
setlocale(LC_ALL,"Russian");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
_getch();
head3=NULL;
while(L)
{
cout<<"1 - Формирование списка 1"<<endl;
cout<<"2 - Формирование списка 2"<<endl;
cout<<"3 - Печать списка 1"<<endl;
cout<<"4 - Печать списка 2"<<endl;
cout<<"5 - Пересечение двух списков"<<endl;
cout<<"Введите номер пункта меню:"<<endl;
cin>>L;
switch(L)
{
case 1: formspisok(&head1); break;
case 2: formspisok(&head2); break;
case 3: pechspisok(head1); break;
case 4: pechspisok(head2); break;
case 5: prosmotr(head1,head2); break;
case 6: L=0;break;
default: cout<<"Ошибкаввода"<<endl;
}
}
}
кира2015 на форуме Добавить отзыв для кира2015 Пожаловаться на это сообщение