Кориткие программы по работе со строками на C++ / прогрШП3
.doc20) Все элементы которые больше порядкового
номера поместить в другой список.
struct sp { int inf;
struct sp *next;
} *F;
strust sp *func(void)
{ struct sp *F1,*T,*T1,*posl1;
int p_n;
F1=NULL;
if(F==NULL) return;
p_n=1;
while(F!=NULL)
{
if(F->inf>p_n)
{
if(F1==NULL)
{
F1=F;
F=F->next;
posl1=F1;
posl1->next=NULL;
p_n++;
}
else
{
posl1->next=F;
posl1=F;
F=F->next;
posl1->next=NULL;
p_n++;
}
}
else break;
}
T=F;
while(T->next!=NULL)
{
T1=T->next;
p_n++;
if(T1->inf>p_n)
{
if(F1==NULL)
{
T->next=T1->next;
F1=T1;
posl1=T1;
posl1->next=NULL;
}
else
{
T->next=T1->next;
posl1->next=T1;
posl1=T1;
posl1->next=NULL;
}
}
else
T=T->next;
}
return;
}
21) Чередует 1 и 2 список, и делает 3 список.
struct sp { int inf;
struct sp *next;
} *F1,*F2;
struct sp* func(void)/* *F1,*F2-globalnie */
{ struct sp *F3,*posl3;
F3=NULL;
if(F1==NULL) return F3;
F3=F1;
posl3=F1;
F1=F1->next;
posl3->next=NULL;
while(1)
{
if(F2==NULL) return F3;
posl3->next=F2;
posl3=F2;
F2=F2->next;
posl3->next=NULL;
if(F1==NULL) return F3;
posl3->next=F1;
posl3=F1;
F1=F1->next;
posl3->next=NULL;
}
}
22) Все элементы которые четные в другой список.
struct sp { int inf;
struct sp *next;
} *F;
struct sp* func(void)
{ struct sp *F1,*T,*T1,*posl1;
while(F!=NULL)
{
if(F->inf%2==0)
{
if(F1==NULL)
{
F1=F;
F=F->next;
posl1=F1;
posl1->next=NULL;
}
else
{
posl1->next=F;
posl1=F;
F=F->next;
posl1->next=NULL;
}
}
else break;
}
T=F;
while(T->next!=NULL)
{
T1=T->next;
if(T1->inf%2==0)
{
if(F1==NULL)
{
T->next=T1->next;
F1=T1;
posl1=T1;
posl1->next=NULL;
}
else
{
T->next=T1->next;
posl1->next=T1;
posl1=T1;
posl1->next=NULL;
}
}
else T=T->next;
}
return;
}
23) Отрезает список который длинней,
а остаток помещает в третий.
struct sp { int inf;
struct sp *next;
} *F1,*F2;
struct sp* func(void)/* *F1,*F2-globalnie */
{
struct sp *F3,*T;
int k,k1,k2;
k=k1=k2=0;
F3=NULL;
for(T=F1;T!=NULL;T=T->next)
k1++;
for(T=F2;T!=NULL;T=T->next)
k2++;
if(k1==k2) return F3;
if(k1>k2)
for(T=F1,k=0;;T=T->next)
{
k++;
if(k==k2)
{
F3=T->next;
T->next=NULL;
return F3;
}
}
if(k2>k1)
for(T=F2,k=0;;T=T->next)
{
k++;
if(k==k1)
{
F3=T->next;
T->next=NULL;
return F3;
}
}