đề: Cho một danh sách liên kết đơn L, mỗi nút là một số nguyên.
a. Tạo một danh sách LL chứa các số nguyên tố từ danh sách L.
b. Tách danh sách L thành 2 danh sách, một danh sách chứa toàn số chẵn, một danh sách chứa toàn số lẻ.
Mình mới học về danh sách liên kết nên cũng chưa thành thạo lắm. Mọi người xem đoạn code của mình rùi cho mình ý kiến nha. Nếu ai có giải thuật tốt hơn thì share cho mình với nhá.
a. Tạo một danh sách LL chứa các số nguyên tố từ danh sách L.
b. Tách danh sách L thành 2 danh sách, một danh sách chứa toàn số chẵn, một danh sách chứa toàn số lẻ.
Mình mới học về danh sách liên kết nên cũng chưa thành thạo lắm. Mọi người xem đoạn code của mình rùi cho mình ý kiến nha. Nếu ai có giải thuật tốt hơn thì share cho mình với nhá.
- Code:
#include"iostream.h"
typedef struct nut
{
int a;
nut *tiep;
};
typedef struct List
{
nut *dau;
nut *cuoi;
};
nut *TaoNut(int x)
{
nut *p=new nut;
if(p==NULL)
cout<<"Khong du bo nho";
p->a=x;
p->tiep=NULL;
return p;
}
void TaoList(List &L)
{
L.dau=L.cuoi=NULL;
}
void ThemDau(List &L,nut *x)
{
if(L.dau==NULL)
{
L.dau=L.cuoi=x;
}
else
{
x->tiep=L.dau;
L.dau=x;
}
}
nut *ChenDau(List &L,int x)
{
nut *p=TaoNut(x);
if(p==NULL)
return NULL;
ThemDau(L,p);
return p;
}
void Xuat(List L)
{
nut *p;
for(p=L.dau;p!=NULL;p=p->tiep)
cout<<p->a<<" ";
}
int KiemTraSNT(int n)
{
for(int i=2;i<=n/2;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
void DanhSachSNT(List &L)
{
nut *p;
List LL;
TaoList(LL);
for(p=L.dau;p!=NULL;p=p->tiep)
{
if(p->a>1 && KiemTraSNT(p->a)==1)
ChenDau(LL,p->a);
}
Xuat(LL);
}
void Tach(List &L)
{
nut *p;
List L1,L2;
TaoList(L1);
TaoList(L2);
for(p=L.dau;p!=NULL;p=p->tiep)
{
if( p->a%2==0 )
ChenDau(L1,p->a);
else
ChenDau(L2,p->a);
}
cout<<"\nDanh sach cac so chan: ";Xuat(L1);
cout<<"\nDanh sach cac so le: ";Xuat(L2);
}
main()
{
List L;
int n,x,i;
TaoList(L);
cout<<"Nhap so phan tu n= ";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"a"<<i<<"= ";
cin>>x;
ChenDau(L,x);
}
cout<<"Danh sach L la: ";Xuat(L);
cout<<"\nDanh sach chua cac so nguyen to la: "; DanhSachSNT(L);
Tach(L);
}