#include<iostream>
using namespace std;
struct employee
{
int id;
int age;
char sex;
employee *next;
};
void create(employee *&,employee*);
void show(const employee *,int&);
void show(const employee *);
void deleteman(employee *&,int k);
void recreate(employee *&,employee *&);
int main()
{
employee *head,*list ,*s;
head =NULL; list=NULL;
int male=0,k;
s=new employee;
cout<<"id、age、sex:('m' for man,'w' for woman) ";
cout<<"当id为0时停止"<<endl;
cin>> s->id >> s->age >> s ->sex ;
s->next =NULL;
create(head,s);
show(head);
cout<<"请输入要删除的编号: ";
cin>>k;
deleteman(head,k);
show(head,male);
cout<<"男员工人数:"<<male<<endl;
recreate(list,head);
show(head);
cout<<endl;
show(list);
system("pause");
return 0;
}
void create(employee *& head,employee *s)
{
employee *p;
for(;s->id !=0 ;)
{
if (head==NULL)
{ head=s ; p=s; }
else
{
p->next =s;
p=s;
}
s=new employee ;
cin>> s->id ; cin>> s->age; cin >> s->sex ;
}
p->next = NULL;
delete s;
return ;
}
void show( const employee *head,int &male)
{
while(head)
{
cout<< head->id <<" "<< head->age <<" "<< head->sex <<endl;
if(head->sex=='m') male+=1;
head=head->next ;
}
}
void show (const employee* head)
{
if (head==NULL) cout<<"空链表"<<endl;
while(head)
{
cout<<head->id <<" "<< head->age <<" "<< head->sex <<endl;//
head=head->next;
}
}
void deleteman(employee *&head,int k)
{
employee *p,*q;
p=head;
if (head->id == k)
{
head=head->next;
delete p;
p=NULL;
return;
}
for(p=head;p->next ;p=p->next )
{
if (p->next ->id == k)
{
q=p->next;
p->next =q->next ;
delete q;
q=NULL;
return ;
}
}
cout<<"不存在这个员工"<<endl;
}
void recreate(employee *& list ,employee *&head)//
{
employee *p,*q,*s,*qd;
l:
if ( (head->age >= 60&&head->sex =='m') || (head->age >=50&&head->sex =='w') )
{
p=head;
qd= new employee;
head = head->next;
if( list==NULL )
{
qd->age =p->age ;
qd->id =p->id ;
qd->sex =p->sex ;
list = qd;
qd->next =NULL ;
s=list ;
}
delete p;
}
for(p=head ; p->next ; p=p->next )
{
if ((p->next ->age >= 60&& p->next ->sex =='m' )|| (p->next ->age >=55&&p->next ->sex =='w'))
{
q=p->next;
p->next = q->next ;
if(list==NULL)
{
qd=new employee ;
qd->age =q->age ;
qd->id =q->id ;
qd->sex =q->sex ;
list=qd ;
qd->next =NULL;
s=qd;
}
else
{
qd=new employee;
qd->age =q->age ;
qd->id =q->id ;
qd->sex =q->sex ;
s->next =qd ;
s=qd ;
}
delete q;
}
}
s->next =NULL;
for( p=head;p;p=p->next )
{
if ((p ->age >= 60&&p ->sex =='m')|| (p ->age >=55&&p ->sex =='w')) goto l;
}
}
最下面一个函数求改正
但是我delete的是最后一个新建的s 并没有在链表里
s=new employee ;
cin>> s->id ; cin>> s->age; cin >> s->sex ;
这里的s->next没有赋值为NULL
具体原因是看不出来的,需要自己调试的
好吧
还是不行
不是create而是recreate有问题
第一个show能运行说明create没问题
追答你应该在函数内单步调试,别人要帮你一样要调试