Đề: Cho 1 dslk đơn, mỗi phần tử là một số nguyên.
a. Đếm số nguyên tố trong danh sách.
b. tạo một ds chỉ chứa số chẳn và chia hết cho 3 từ ds trên.
c. sắp xếp ds giảm dần.
a. Đếm số nguyên tố trong danh sách.
b. tạo một ds chỉ chứa số chẳn và chia hết cho 3 từ ds trên.
c. sắp xếp ds giảm dần.
- Code:
#include"iostream.h"
typedef struct nut
{
int a;
nut *tiep;
};
typedef struct DanhSach
{
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 TaoDS(DanhSach &DS)
{
DS.dau=DS.cuoi=NULL;
}
void ThemDau(DanhSach &DS,nut *x)
{
if(DS.dau==NULL)
{
DS.dau=DS.cuoi=x;
}
else
{
x->tiep=DS.dau;
DS.dau=x;
}
}
nut *ChenDau(DanhSach &DS,int x)
{
nut *p=TaoNut(x);
if(p==NULL)
return NULL;
ThemDau(DS,p);
return p;
}
void Nhap(DanhSach &DS)
{
int n,x,i;
TaoDS(DS);
cout<<"Nhap so phan tu cua danh sach n= ";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"a"<<i<<"= ";
cin>>x;
ChenDau(DS,x);
}
cout<<"Danh sach gom: ";
}
void Xuat(DanhSach DS)
{
nut *p;
for(p=DS.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;
}
int DemSNT(DanhSach DS)
{
int d=0;
nut *p;
for(p=DS.dau;p!=NULL;p=p->tiep)
{
if( p->a > 1 && KiemTraSNT(p->a) == 1)
d++;
}
return d;
}
void DanhSachSoChanChiaHetCho3(DanhSach DS)
{
nut *p;
DanhSach ds;
TaoDS(ds);
for(p=DS.dau;p!=NULL;p=p->tiep)
{
if( p->a % 2 == 0 && p->a % 3 == 0 )
ChenDau(ds,p->a);
}
Xuat(ds);
}
void HoanVi(int &x,int &y)
{
int t;
t=x;
x=y;
y=t;
}
void SapXepGiam(DanhSach DS)
{
nut *p,*q;
for(p=DS.dau;p!=NULL;p=p->tiep)
{
for(q=p->tiep;q!=NULL;q=q->tiep)
if(q->a > p->a)
HoanVi(p->a,q->a);
}
Xuat(DS);
}
main()
{
DanhSach DS;
Nhap(DS);
Xuat(DS);
cout<<"\nCo "<<DemSNT(DS)<<" so nguyen to trong danh sach";
cout<<"\nDanh sach chua cac so chan va chia het cho 3 la: "; DanhSachSoChanChiaHetCho3(DS);
cout<<"\nDanh sach sau khi sap xep giam la: ";SapXepGiam(DS);cout<<endl;
}