124
I. MẢNG MỘT CHIỀU 1. Xây dựng giải thuật và viết hàm nhập mảng bằng tay void nhapmang( int a[], int &n) { cout<<" Nhap so phan tu: "; cin>> n; for (int i=0;i<n;i++) { cout<< " a["<<i<<"]: "; cin>>a[i]; } } 2. Xây dựng giải thuật và viết hàm nhập mảng ngẫu nhiên #include<time.h> // thư viện dùng cho hàm srand(), random theo thời gian. #include<stdlib.h> //thư viện dùng cho hàm rand(), phát sinh số ngẫu nhiên. void nhap_random( int a[], int &n) { srand(time(0)); rand(); cout<<" Nhap so phan tu: "; cin>> n; for (int i=0;i<n;i++) { a[i]=rand()%100; // giá trị phần tử random trong khoảng 0- 99 } cout<<"\n"; } 3. Xây dựng giải thuật và viết hàm nhập mảng đệ quy void nhap_de_quy(int *&a,int n) { if(n==0) return; nhap_de_quy(a,n-1); cout<<" Nhap a["<<n-1<<"]: "; cin>>a[n-1]; } 4. Xây dựng giải thuật và viết hàm xuất mảng void xuat_mang(int a[],int n)

Bài tập CTDL và GT 8

  • Upload
    ho-loi

  • View
    98

  • Download
    3

Embed Size (px)

Citation preview

I. MẢNG MỘT CHIỀU

1. Xây dựng giải thuật và viết hàm nhập mảng bằng tay

void nhapmang( int a[], int &n){

cout<<" Nhap so phan tu: "; cin>> n;for (int i=0;i<n;i++){

cout<< " a["<<i<<"]: "; cin>>a[i];}

}

2. Xây dựng giải thuật và viết hàm nhập mảng ngẫu nhiên

#include<time.h> // thư viện dùng cho hàm srand(), random theo thời gian.#include<stdlib.h> //thư viện dùng cho hàm rand(), phát sinh số ngẫu nhiên.void nhap_random( int a[], int &n){

srand(time(0)); rand();cout<<" Nhap so phan tu: ";cin>> n;for (int i=0;i<n;i++){

a[i]=rand()%100; // giá trị phần tử random trong khoảng 0- 99}cout<<"\n";

}

3. Xây dựng giải thuật và viết hàm nhập mảng đệ quy

void nhap_de_quy(int *&a,int n){

if(n==0)return;

nhap_de_quy(a,n-1);cout<<" Nhap a["<<n-1<<"]: ";cin>>a[n-1];

}

4. Xây dựng giải thuật và viết hàm xuất mảng

void xuat_mang(int a[],int n){

cout<<" cac phan tu mang:\n\n";for(int i=0; i<n; i++)

cout<<a[i]<<" ";cout<<"\n";

}

5. Xây dựng giải thuật và viết hàm tìm giá trị lớn nhất trong mảng một chiều n số nguyên

int lon_nhat(int a[],int n)

{int max=a[0];for(int i=1; i<n; i++)

max=(a[i]>max)?a[i]:max;return max;

}

6. Xây dựng giải thuật và viết hàm tìm giá trị dương đầu tiên trong mảng, không có trả về 0

int duong_dau(int a[],int n){

for(int i=0; i<n; i++)if(a[i]>0)

return a[i];return 0;

}

7. Xây dựng giải thuật và viết hàm tìm số chẵn cuối cùng trong mảng, không có thì trả về 0

int chancuoi(int a[],int n){

for(int i=n-1; i>=0; i--)if(a[i]%2==0)

return a[i];return 0;

}

8. Xây dựng giải thuật và viết hàm tìm vị trí của phần tử nhỏ nhất trong mảng

int vt_min(int a[],int n){

int vtmin=0;for(int i=1; i<n; i++)

if(a[vtmin]>a[i])vtmin=i;

return vtmin;}

9. Xây dựng giải thuật và viết hàm tìm vị trí của giá trị chẵn đầu tiên trong mảng, không có thì trả về 0

int vt_chandau(int a[], int n){

for(int i=0; i<n; i++)if(a[i]%2==0)

return i;return 0;

}

10. Xây dựng giải thuật và viết hàm tìm vị trí số hoàn thiện cuối cùng trong mảng, không có trả về 0

int sohoanthien(int a) // hàm kiểm tra số hoàn thiện.{

int tong=0;for(int i=1; i<=a/2; i++)

if(a%i==0)tong = tong + i;

if(tong==a)return 1;

return 0;}int vt_hoanthiencuoi(int a[],int n) // hàm tìm vị tri số hoàn thiện.{

for(int i=n-1; i>=0; i--)if(sohoanthien(a[i])==1)

return i;return 0;

}

11. Xây dựng giải thuật và viết hàm tìm vị trí dương nhỏ nhất trong mảng, không có trả về 0.

int duongdau(const int a[], int n) // Hàm tìm pt dương đầu tiên{

for(int i=0; i<n; i++)if(a[i]>0)

return a[i];return 0;

}

int vt_duongmin(const int a[], int n) //Hàm tìm vị trí của pt dương min{

int vt, dmin=duongdau(a,n);if(dmin==0)

return 0;for(int i=0; i<n; i++)

if(a[i]>0 && a[i]<dmin){

dmin=a[i];vt=i;

}return vt;

}

12. Xây dựng giải thuật và viết hàm tìm số nguyên tố đầu tiên trong mảng, không có trả về 0.

int ngto(int a) // hàm kiểm tra 1 số có phải là nguyên tố không{

if(a>=2){

for(int i=2; i<=a/2; i++)if(a%i==0)

return 0;return 1;

}return 0;

}

int ngtodau(const int a[],int n) // hàm tìm số nguyên tố đầu tiên{

for(int i=0; i<n; i++)if(ngto(a[i])==1)

return a[i];return 0;

}

13. Xây dựng giải thuật và viết hàm tìm số nguyên tố lớn nhất trong mảng, không có trả về 0.

int ngto(int a){

if(a>=2){

for(int i=2; i<=a/2; i++)if(a%i==0)

return 0;return 1;

}return 0;

}int ngto_max(const int a[],int n) // hàm tìm số nguyên tố lớn nhất{

int max=0;for(int i=0; i<n; i++)

if(ngto(a[i])==1){

max=a[i]; break; }if(max==0)

return 0;for(i=i+1; i<n; i++)

if(ngto(a[i])==1 && a[i] > max)max=a[i];

return max;}

14. Xây dựng giải thuật và viết hàm tìm số hoàn thiện cuối cùng trong mảng, không có trả về 0.

int sohoanthien(int a) // hàm kiểm tra số hoàn thiện.{

int tong=0;for(int i=1; i<=a/2; i++)

if(a%i==0)tong = tong + i;

if(tong==a)return 1;

return 0;}

int pt_hoanthien_cuoi(int a[],int n) // hàm tìm pt hoàn thiện cuối{

for(int i=n-1; i>=0; i--)if(sohoanthien(a[i])==1)

return a[i];return 0;

}

15. Xây dựng giải thuật và viết hàm tìm số hoàn thiện nhỏ nhất trong mảng, không có trả về 0.

int sohoanthien(int a){

int tong=0;for(int i=1; i<=a/2; i++)

if(a%i==0)tong = tong + i;

if(tong==a)return 1;

return 0;}int hoanthien_min(const int a[], int n){

int min=0;for(int i=0; i<n; i++)

if(sohoanthien(a[i])==1){ min=a[i]; break; }

if(min==0)return 0;

for(i=i+1; i<n; i++)if(sohoanthien(a[i])==1 && a[i]<min)

min=a[i];return min;

}

16. Xây dựng giải thuật và viết hàm tìm giá trị chẵn nhỏ nhất trong mảng, không có trả về 0.

int chan_min(const int a[],int n){

int min=0;for(int i=0; i<n; i++)

if(a[i]%2==0){

min=a[i]; break;}

if(min==0)return 0;

for(i=i+1; i<n; i++)if(a[i]%2==0 && a[i]<min)

min=a[i];return min;

}

17. Xây dựng giải thuật và viết hàm tìm vị trí có giá trị âm lớn nhất trong mảng, không có thì trả về -1.

int vt_am_max(int a[],int n){

int vtmax=-1;for(int i=0; i<n; i++)

if(a[i]<0){

vtmax = i; break;}

if( vtmax==-1)return -1;

for(i=i+1; i<n; i++)if(a[i]<0 && a[i]>a[vtmax])

vtmax=i;return vtmax;

}

18. Xây dựng giải thuật và viết hàm tìm những phần tử trong mảng xa giá trị x nhất.

void pt_xa_x_nhat(const int a[], int n, int x){

long kcxn= abs(a[0]-x); int j=0;for(int i=1; i<n; i++)if(abs(a[i]-x) > kcxn){

kcxn = abs(a[i]-x);j=i;

}

cout<<"\n Nhung gia tri xa "<<x<<" nhat:\n";for(j; j<n; j++)

if(abs(a[j]-x)==kcxn)cout<<setw(3)<<" "<<a[j];

cout<<"\n";}

19. Xây dựng giải thuật và viết hàm tìm vị trí trong mảng mà giá trị tại đó gần x nhất.

void vt_gan_x_nhat(const int a[], int n, int x){

long kcxn= abs(a[0]-x); int j=0;for(int i=1; i<n; i++)

if(abs(a[i]-x) < kcxn && abs(a[i]-x)!=0){

kcxn = abs(a[i]-x);j=i;

}cout<<"\n Nhung vi tri co pt gan "<<x<<" nhat:\n";for( j; j<n; j++)

if(abs(a[j]-x)==kcxn)cout<<setw(3)<<" "<<j+1;

cout<<"\n";}

20. Xây dựng giải thuật và viết hàm tìm đoạn [a,b] sao cho đoạn này chứa tất cả các giá trị trong mảng.

void timdoan(const int a[], int n){

int min, max; min = max = a[0]; for (int i=1; i<n; i++) {

max = (max<a[i])?a[i] : max;min = (min>a[i])?a[i] : min;

} cout<< "\n ["<<min<<","<<max<<"] la doan chua cac gia tri trong mang"<<endl;}

21. Xây dựng giải thuật và viết hàm tìm trong mảng giá trị đầu tiên lớn hơn 2010, không có trả về 0.

int dautien(const int a[] , int n){

for( int i=0 ; i<n; i++)if(a[i]>2010)

return a[i]; return 0;}

22. Xây dựng giải thuật và viết hàm tìm trong mảng giá trị đầu tiên nằm trong khoảng (X,Y) cho trước, không có thì trả về X.

int dautientrongdoan(const int a[], int n, int x, int y){

for( int i=0; i<n; i++)if ( a[i] >= x && a[i] <= y )

return a[i]; return x;}

23. Xây dựng giải thuật và viết hàm tìm số chính phương đầu tiên trong mảng, không có thì trả về 0.

int sochinhphuong(int a){

for (int i=1; i<=a/2; i++)if (i*i==a)

return 1;return 0;

}

int chinhphuongdautien(const int a[], int n){

for (int i=0; i<n; i++)if (sochinhphuong(a[i])==1)

return a[i];return 0;

}

24. Xây dựng giải thuật và viết hàm tìm một vị trí của phần tử đầu tiên có giá trị bằng tích hai phần tử lân cận, nếu mảng không tồn tại phần tử thỏa điều kiện trên thì trả về 0.

int tichlancan(const int a[], int n){

for ( int i=1; i< n-1; i++)if (a[i]==((a[i-1])*a[i+1]))

return i;return 0;

}

25. Xây dựng giải thuật và viết hàm tìm giá trị đầu tiên trong mảng thỏa tính chất số gánh không có thì trả về 0 ( ví dụ: 12321).

int soganh(int n){

int t=n;if(n<=100)

return 0; int du,dn=0; while (t!=0)

{du=t%10; dn=dn*10+du;t=t/10 ;

} if ( n==dn)

return 1;return 0;

}

int timsoganh(const int a[], int n){

for ( int i=0; i<n; i++)if ( soganh(a[i]) == 1)

return a[i];return 0;

}

26. Xây dựng giải thuật và viết hàm tìm giá trị đầu tiên có chữ số đầu tiên là chữ số lẻ trong mảng, không có thì trả về 0 ( ví dụ: 110).

int cs_dau_le(int n){

if(n<10) // vì phải tìm cs đầu tiên nên ptreturn 0; // phải có từ hai số trở lên.

while (n>=10)n=n/10;

if (n%2==0)return 0;

return 1;}int ledautien(const int a[], int n){

for(int i=0 ; i<n; i++)if (cs_dau_le(a[i])==1)

return a[i];return 0;

}

27. Xây dựng giải thuật và viết hàm tìm giá trị lớn nhất toàn chữ số lẻ so với những số cùng thỏa điều kiện trong mảng, không có thì trả về 0.

int toanchusole(int n){

int dv; while (n!=0) {

dv = n % 10;if (dv % 2 == 0)

return 0; n=n/10;

}

return 1;}

int csle_max(const int a[], int n){

int max=0; for(int i=0 ; i<n; i++)

if (toanchusole(a[i])==1) {

max = a[i]; break;

}if (max==0)

return 0; for(i=i+1; i<n; i++)

if (toanchusole(a[i])==1)max = (a[i]>max)?a[i]:max ;

return max;}

28. Xây dựng giải thuật và viết hàm tìm giá trị lớn nhất trong mảng có dạng 2^k, so với những số cùng thỏa điều kiện, nếu mảng không có phần tử dạng 2^k thì trả về 0.

int dang2k(int n){

if(n==1) // so 2^k la so sau k lan chia lay nguyen cho 2 thi bang 1 return 1; // va kq moi lan chia phan nguyen deu chan.

while(n>=2) {

if (n%2 != 0)return 0;

n = n/2;}

return 1;}

int pt_2k_max(const int a[], int n){

int max=0; for(int i=0 ; i<n; i++)

if (dang2k(a[i])==1) { max = a[i]; break; }

if (max==0)return 0;

for(i=i+1;i<n; i++)if (dang2k(a[i])==1)

max = (a[i]>max)?a[i]:max;return max;

}

29. Xây dựng giải thuật và viết hàm tìm số chẵn lớn nhất, nhỏ hơn mọi giá trị lẻ có trong mảng một chiều n số nguyên, nếu mảng chỉ chứa các phần tử lẻ hoặc chẵn thì return 0.

int chanmax_lemin(const int a[],int n){

int min, max; max = min=0; for (int i=0; i<n; i++)

if (a[i]%2!=0) {

min = a[i]; break;}

if(min==0) return 0;

for (i=i+1 ; i<n; i++)if (a[i]%2 !=0 && min>a[i])

min = a[i];//---------------------for (int j=0; j<n; j++)

if (a[j]%2==0 && a[j]<min) {

max = a[j]; break;}

if(max==0) return 0;

for (j=j+1 ; j<n; j++)if (a[j]%2==0 && max<a[j] && a[j]<min)

max = a[j];return max;

}

30. Xây dựng giải thuật và viết hàm tìm số nguyên tố nhỏ nhất, lớn hơn mọi giá trị có trong mảng.

int ngtomin_max(const int a[], int n){

int max=a[0]; for( int i=1; i<n; i++)

max=(a[i] > max) ?a[i] : max; for (int k=max+1; k > max; k++)

if (ngto(k)==1)break;

return k;}

31. Xây dựng giải thuật và viết hàm liệt kê các phần tử thuộc đoạn [x,y] cho trước trong mảng.

void lietke_XY( const int a[], int n, int x, int y){

int dem=0;cout<<"\n Cac pt trong doan ["<<x<<","<<y<<"]: ";for (int i=0; i<n; i++)

if (a[i]>=x && a[i]<=y){ dem++; cout<<setw(3)<<a[i];}

if(dem==0)cout<<"\n Khong co pt trong doan ["<<x<<","<<y<<"]: ";

cout<<"\n";}

32. Xây dựng giải thuật và viết hàm liệt kê các số trong mảng một chiều thỏa điều kiện: lớn hơn trị tuyệt đối của số đứng liền sau nó.

void lietke(const int a[], int n){

int dem = 0;cout<<"\n Cac pt lon hon tri tuyet doi cua pt lien sau: ";

for ( int i=0; i<n; i++)if (a[i]>abs(a[i+1])){

dem++;cout<<setw(3)<<a[i];

}cout<<endl;if (dem == 0)

cout<<" Mang co thu tu tang dan"<<endl;}

33. Xây dựng giải thuật và viết hàm tính tổng các phần tử trong mảng một chiều n số nguyên.

int tong(const int a[], int n){

int s=0; for (int i=0; i<n; i++) {

s+= a[i];}

return s;}

34. Xây dựng giải thuật và viết hàm tính tổng các phần tử dương trong mảng.

int tong_pt_duong (const int a[], int n){

int s = 0; for (int i=0; i<n; i++)

if (a[i]>0) {

s+= a[i];

}return s;

}

35. Xây dựng giải thuật và viết hàm tính tổng các phần tử có chữ số đầu là lẻ trong mảng, vd: 15, 30, ...

int cs_daule(int n){

if(n<10)return 0;

while (n>=10)n=n/10;

if (n%2==0)return 0;

return 1;}

int tongdaule(const int a[], int n){

int s=0; for (int i=0; i<n; i++)

if (cs_daule(a[i])==1)s+= a[i];

return s;}

36. Xây dựng giải thuật và viết hàm tính tổng các phần tử có chữ số hàng chục là 5 trong mảng.

int hangchuc5(int a){

a=abs(a);if(a<50)

return 0;else{

a=a/10; int c=a%10;if(c==5)

return 1;return 0;

}}

int tong_hc5(const int a[], int n){

int s=0;for (int i=0; i<n; i++)

if (hangchuc5(a[i])==1)s+=a[i];

return s;

}

37. Xây dựng giải thuật và viết hàm tính tổng các phần tử lớn hơn phần tử đứng liền trước nó trong mảng.

int tong_sau_truoc(const int a[], int n){

int s = 0 ; for (int i=1; i<n; i++)

if (a[i]>a[i-1])s+=a[i];

return s;}

38. Xây dựng giải thuật và viết hàm tính tổng các phần tử lớn hơn giá trị tuyệt đối của phần tử đứng liền sau nó.

int tong_lien_sau(const int a[], int n){

int s=0; for (int i=0; i<n-1; i++)

if ( a[i] > abs(a[i+1]) )s+= a[i];

return s;}

39. Xây dựng giải thuật và viết hàm tính tổng các phần tử lớn hơn phần tử xung quanh trong mảng.

int tong_xungquanh(const int a[], int n){

int s=0; for (int i=0; i<n; i++)

{if (i==0 && a[i]>a[i+1])

s+= a[i];else if (i!=0 && a[i]>a[i+1] && a[i] > a[i-1])

s+= a[i];else if (i==n-1 && a[i] > a[i-1])

s+= a[i];}

return s;}

40. Xây dựng giải thuật và viết hàm tính tổng các phần tử cực trị trong mảng. Phần tử cực trị là phần tử lớn hơn hoặc nhỏ hơn hai phần tử xung quanh.

int tong_cuctri(const int a[], int n){

int s=0; for (int i= 0; i<n; i++) {

if (i==0 && a[i]!=a[i+1])

s += a[i];else if (i==n-1 && a[i]!= a[i-1])

s += a[i]; else if ((a[i]<a[i+1] && a[i]<a[i-1]) || (a[i]>a[i+1] && a[i]>a[i-1]) )

s += a[i];}

return s;}

41. Xây dựng giải thuật và viết hàm tính tổng các phần tử là số chính phương trong mảng.

int chinhphuong(int a){

for (int i=1; i<=a/2; i++)if (i*i == a)

return 1;return 0;

}int tong_chinh_phuong(const int a[], int n){

int s=0; for (int i= 0; i<n; i++)

if (chinhphuong(a[i])==1)s+=a[i];

return s;}

42. Xây dựng giải thuật và viết hàm tính tổng các phần tử là số đối xứng trong mảng, vd:12321( số gánh ).

int sodoixung(int n){

if(n<=100)return 0;

int donvi, tam = n, sodn = 0; while(tam!=0) {

donvi = tam%10; sodn = sodn*10 + donvi; tam = tam/10;

} if (sodn == n)

return 1; return 0;}

int tong_dx(const int a[], int n){int s=0; for (int i= 0; i<n; i++)

if (sodoixung(a[i])==1)s += a[i];

return s;}

43. Xây dựng giải thuật và viết hàm tính tổng các phần tử có chữ số đầu là chẵn trong mảng.

int sodauchan(int n){

while(n>=10)n=n/10;

if (n%2 == 0)return 1;

return 0;}

int tong_dau_chan(const int a[], int n){

int s=0;for (int i= 0; i<n; i++)

if (sodauchan(a[i])==1) {

s += a[i];}

return s;}

44. Xây dựng giải thuật và viết hàm tính trung bình cộng các phần tử dương trong mảng.

float tb_cong_sd(const int a[], int n){

int s=0; float dem=0; for (int i= 0; i<n; i++)

if (a[i]>0) {

s += a[i];dem ++;

}if (dem == 0)

return 0;return s/dem;

}

45. Xây dựng giải thuật và viết hàm tính trung bình cộng các số nguyên tố trong mảng.

int songuyento(int n){

for(int i=2; i<= n/2; i++)if (n % i == 0)

return 0;return 1;

}

float tb_so_ngto(const int a[], int n){

int s=0; float dem=0; for (int i= 0; i<n; i++)

if (songuyento(a[i])==1) { s += a[i]; dem ++; }

if (dem == 0)return 0;

return s/dem;}

46. Xây dựng giải thuật và viết hàm tính trung bình cộng các phần tử trong mảng lớn hơn x.

float tb_hon_x(const int a[], int n, int x){

int s=0; float dem=0;for (int i= 0; i<n; i++)

if (a[i]>x) {

s += a[i]; dem ++;}

if (dem == 0) return 0;

return s/dem;}

47. Xây dựng giải thuật và viết hàm tính khoảng cách trung bình giữa các phần tử trong mảng.

float kc_tb(const int a[], int n){

int s=0; float y=0;for (int i= 0; i<n-1; i++)

for (int j=i+1; j<n; j++) {

s = s+ abs(a[i]-a[j]); y++;

}return s/y;

}

48. Xây dựng giải thuật và viết hàm đếm số lượng phần tử chẵn có trong mảng một chiều n số nguyên.

int demsochan(const int a[], int n){

int dem = 0; for (int i=0; i<n; i++)

if (a[i]%2 == 0)dem ++;

return dem;}

49. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử dương chia hết cho 7 trong mảng.

int dem_duong_7(const int a[], int n){ int dem = 0; for (int i=0; i<n; i++)

if (a[i]>0 && a[i]%7 == 0) dem ++; return dem;}

50. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử thỏa tính chất số gánh ( số đối xứng ) trong mảng.

int sodx(int n){

if(n<=100)return 0;

int donvi, tam = n; int sodn = 0; while(tam!=0) {

donvi = tam%10; sodn= sodn*10 + donvi; tam = tam/10;

} if (sodn == n)

return 1;return 0;

}

int dem_dx (const int a[], int n){

int dem = 0;for (int i=0; i<n; i++)

if (sodx (a[i])==1)dem ++;

return dem;}

51. Xây dựng giải thuật và viết hàm đếm số lần xuất hiện của giá trị X trong mảng.

int dem_x (const int a[], int n, int x){

int dem = 0;for (int i=0; i<n; i++)

if (a[i] ==x)dem ++;

return dem;}

52. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử có chữ số tận cùng bằng 5 trong mảng.

int dem_cuoi_5 (const int a[], int n){

int dem = 0;for (int i=0; i<n; i++)

if (a[i]%10 == 5)dem ++;

return dem;}

53. Xây dựng giải thuật và viết hàm cho biết sự tương quan giữa số lượng chẵn và lẻ trong mảng, hàm trả về một trong ba giá trị: -1, 0, 1. -1 là lẻ nhiều hơn chẵn; 0 là chẵn bằng lẻ; 1 là chẵn nhiều hơn lẻ.

int sosanh_chanle(const int a[], int n){

int demchan = 0;for (int i=0; i<n; i++)

if (a[i]%2 == 0)demchan++;

if (demchan > n - demchan) return -1; else if (demchan== n - demchan)

return 0; else return 1;}

54. Xây dựng giải thuật và viết hàm đếm phần tử cùng lớn hơn hoặc nhỏ hơn các phần tử xung quanh trong mảng ( đếm phần tử cực trị ).

int demcuctri(const int a[], int n){

int i , tam=0;for (i=0; i<n; i++){

if (i==0 && a[i]!=a[i+1])tam++;

else if ( i==n-1 && a[i]!=a[i-1])tam++;

else if ((a[i-1]>a[i] && a[i]<a[i+1]) || (a[i-1]<a[i] && a[i]>a[i+1])) tam++;

} return tam;}

55. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử là số nguyên tố trong mảng.

int so_ngto(int a){

if (a>=2){

for (int i=2; i<=a/2; i++)if (a%i==0)

return 0;return 1;

}return 0;

}

int dem_ngto(const int a[], int n){

int i, dem=0;for (i=0; i<n; i++)

if (so_ngto(a[i])==1)dem++;

return dem;}

56. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử là số hoàn thiện trong mảng.

int kt_hoanthien(int n){

int tong=0;for (int i=1 ; i<= n/2; i++)

if(n%i==0)tong = tong + i;

if (tong == n)return 1;

return 0;} int dem_hoanthien(const int a[], int n){

int i=0, dem=0;for (i=0; i<n; i++)

if (kt_hoanthien(a[i])==1)dem++;

return dem;}

57. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử lớn nhất trong mảng.

int dem_max(const int a[], int n){

int i, dem=0; int max = a[0];

for (i=0; i<n; i++){

if (max == a[i])dem++;

else if (max < a[i]){

max = a[i]; dem = 1;}

}return dem;

}

58. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử kề nhau mà cả hai đều là chẵn (kề trước hoặc kề sau và chẵn).

int dem_ke_chan(const int a[], int n){ int i, dem=0;

for (i=1; i<n; i++)if (a[i]%2==0 && a[i+1]%2==0 || a[i]%2==0 && a[i-1]%2==0)

dem++;return dem;

}

59. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử kề nhau mà cả hai trái dấu nhau ( kề trước hoặc kề sau và trái dấu).

int dem_traidau(const int a[], int n){

int i, dem=0;for (i=1; i<n; i++)

if (a[i]*a[i+1]<0 || a[i]*a[i-1]<0)dem++;

return dem;}

60. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử kề nhau, mà số đứng trước cùng dấu với số đứng sau và có giá trị tuyệt đối nhỏ hơn trị tuyệt đối của số đứng sau.

int dem_cungdau_nho(const int a[], int n){ int i, dem=0;

for (i=0; i<n; i++)if (a[i]*a[i+1]>0 && abs(a[i])<abs(a[i+1]))

dem++;return dem;

}

61. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử có giá trị phân biệt trong mảng.

int dem_pb(const int a[], int n){

int i, j, dem=0, test;for (i=0; i<n; i++){

for (test=1, j=i+1; j<n; j++)if (a[i]==a[j]){

test =0; break;}

if (test == 1)dem++;

}return dem;

}

62. Xây dựng giải thuật và viết hàm liệt kê tần suất xuất hiện của các phần tử trong mảng, mỗi phần tử liệt kê một lần.

void lietke_lan_xh(const int a[], int n){

for (int i=0; i<n; i++){

for (int dem=0, j=0; j<n; j++)if (a[i] == a[j]){

if (j<i)break;

elsedem++;

}if (dem!=0 )

cout<<"\n Gia tri "<<a[i]<<" co tan suat xuat hien la: "<<dem<<endl ;

}}

63. Xây dựng giải thuật và viết hàm liệt kê các phần tử chỉ xuất hiện đúng một lần trong mảng.

void lk_mot_lan(const int a[], int n){

int c[100]; int dem[100]; int vt = 0;for (int i=0; i<n; i++){

for (int demtam=0, j=0; j<n; j++)if (a[i] == a[j]){

if (j<i)break;

elsedemtam++;

}if (demtam!=0 ){

c[vt] = a[i]; dem[vt] = demtam;vt++;

}}cout<<"\n Gia tri chi xuat hien dung 1 lan:\n";for (int k=0; k<vt; k++)

if (dem[k] == 1)cout<<setw(3)<<c[k]<<" ";

cout<<endl;}

64. Xây dựng giải thuật và viết hàm liệt kê các phần tử xuất hiện quá một lần trong mảng, mỗi phần tử liệt kê một lần.

void lk_hon_motlan(const int a[], int n){

int c[100]; int dem[100]; int vt = 0;for (int i=0; i<n; i++){

for (int demtam=0, j=0; j<n; j++)if (a[i] == a[j]){

if (j<i)break;

elsedemtam++;

}if (demtam!=0 ){ c[vt] = a[i]; dem[vt] = demtam;

vt++; }}cout<<"\n Gia tri xuat hien qua mot lan:\n";for (int k=0; k<vt; k++)

if (dem[k] != 1)cout<<c[k]<<" ";

cout<<endl;}

65. Cho hai mảng a, b. Xây dựng giải thuật và viết hàm đếm số lượng phần tử chỉ xuất hiện một trong hai mảng.

int dem(const int a[], const int b[], int na, int nb){

int i, j, test, dem=0;for (i=0; i<na; i++){

test=1;for (j=0; j<nb; j++)

if (a[i]==b[j]){ test = 0; break; }

if (test==1)dem++;

}for (i=0;i<nb;i++){

test=1;for (j=0; j<na;j++)

if (b[i]==a[j]){ test=0; break; }

if (test==1)dem++;

}return dem;

}

66. Cho hai mảng a, b. Xây dựng giải thuật và viết hàm cho biết số lần xuất hiện của mảng a trong mảng b.

int dem_a_trong_b(const int a[],const int b[], int na, int nb){

int i, j, h, test, dem=0;for (i=0; i<nb; i++)

if (b[i]==a[0] && nb-i>=na){

h=i;for (test=1, j=0; j<na; j++,h++)

if (a[j] != b[h]){ test=0; break; }

if (test==1)dem++;

}return dem;

}

67. Xây dựng giải thuật và viết hàm tìm một giá trị có số lần xuất hiện nhiều nhất trong mảng.

int gt_xh_max(const int a[], int n){

int flag[100]={0}, i, j, dem;

for (i=0; i<n ; i++)if (flag[i]==0)

for (dem=0, j=0; j<n; j++)if (a[i] == a[j])

flag[j] = dem++;

int xh_max = flag[0], vt=0;for (i=1; i<n; i++)

if (xh_max < flag[i]){

xh_max = flag[i];vt = i;

}return a[vt];

}

68. Xây dựng giải thuật và viết hàm đếm số lượng phần tử nguyên tố phân biêt trong mảng.

int kt_ngto(int a){

if (a>=2){

for (int i=2; i<a; i++)if (a%i==0)

return 0;return 1;

}return 0;

}int dem_ngto_pb (const int a[], int n){

int i, j, test, dem=0;for (i=0; i<n; i++){

if (kt_ngto(a[i])==1)for (test=1, j=i+1; j<n; j++)

if (a[i] == a[j] ){ test =0; break; }

if (test == 1)dem++;

}return dem;

}

69. Xây dựng giải thuật và viết hàm kiểm tra mảng có phần tử chẵn hay không? có trả về 1, không có trả về 0.

int kiemtrachan(const int a[] , int n){

int flag = 0; // khong co pt chan for(int i=0 ; i<n ;i++)

if(a[i]%2 == 0){

flag = 1; return flag;

} return flag;}

70. Xây dựng giải thuật và viết hàm kiểm tra mảng có tồn tại hai phần tử kề nhau, không mang giá trị liên tiếp

int kt_hai_lientiep(const int a[], int n){

int flag;for(int i=0; i<n-1; i++){

flag=1; // mang co 2 pt thoa yeu caufor(int j=i+1; j<n; j++){

if( (a[i]+1) ==a[j] || (a[i]-1) == a[j]){ flag=0; break;}else

return flag;}

}return flag;

}

71. Xây dựng giải thuật và viết hàm kiểm tra mảng có số nguyên tố hay không? có trả về 1, không có trả về 0.

int xd_ngto(int a){

if (a<=1)return 0;

for (int i=2; i<a; i++)if (a%i==0)

return 0;return 1;

}int kt_ngto_mang(const int a[] , int n){

int flag = 0; for(int i=0 ; i<n ;i++)

if(xd_ngto(a[i]) == 1){

flag = 1;return flag;

}return flag;

}

72. Xây dựng giải thuật và viết hàm kiểm tra mảng có thỏa tính chất: không có số hoàn thiện lớn hơn 256. Thỏa trả về 1, không thỏa trả về 0.

int hoan_thien(int n){

int tong=0; for (int i=1 ; i<n/2; i++)

if(n%i==0)tong = tong + i;

if (tong == n)return 1;

return 0;}

int kt_tinhchat(const int a[] , int n){

int flag = 1; // mang thoa tinh chat bai cho for(int i=0 ; i<n ;i++)

if(hoan_thien(a[i])==1 && a[i] > 256) {

flag = 0; return flag;

}return flag;

}

73. Xây dựng giải thuật và viết hàm kiểm tra mảng có toàn số chẵn hay không? có trả về 1, không có trảvề 0.

int kt_toanchan(const int a[] , int n){

int flag = 1;for(int i=0 ; i<n ;i++)

if(a[i]%2!=0) {

flag = 0; return flag;}

return flag;}

74. Xây dựng giải thuật và viết hàm kiểm tra mảng có đối xứng không? có trả về 1, không có trả về 0.

int kt_doixung(const int a[] , int n){

int flag = 1;for(int i=0 ; i<n/2 ; i++)

if(a[i] != a[n-i-1]) {

flag = 0; return flag;

}return flag;

}

75. Xây dựng giải thuật và viết hàm kiểm tra mảng có tính chẵn lẻ không? có trả về 1, không trả về 0. Mảng có tính chẵn lẻ là mảng có tổng hai phần tử liên tiếp luôn là lẻ.

int kt_tinh_chanle(const int a[] , int n){

int flag = 1;for(int i=0 ; i<n-1 ;i++)

if( (a[i]+a[i+1])%2==0) { flag = 0; return flag; }

return flag;}

76. Xây dựng giải thuật và viết hàm kiểm tra mảng có tăng dần hay không? tăng trả về 1, không tăng trả về 0.

int kt_tangdan(const int a[] , int n){

int flag = 1;for(int i=0 ; i<n-1 ; i++)

if(a[i] > a[i+1]) {

flag = 0; return flag; }

return flag;}

77. Xây dựng giải thuật và viết hàm kiểm tra các phần tử trong mảng có lập thành cấp số cộng hay không? Nếu có chỉ ra công sai d, nếu không trả về 0.

int kt_capsocong(const int a[] , int n , int &d){

d = a[1] - a[0]; int flag = 1;for(int i=2 ; i<n-1 ;i++)

if( (a[i+1] - a[i])!=d)

{flag = 0; return flag;

}return flag;

}

78. Xây dựng giải thuật và viết hàm kiểm tra các phần tử trong mảng có bằng nhau không? bằng nhau trả về 1, không bằng nhau trả về 0.

int kt_bangnhau(const int a[] , int n){

int flag; for(int i = 0 ; i <n-1 ; i++)

{flag = 0;for(int j = i+1 ; j<n ; j++)

if(a[i] == a[j]) { flag = 1; break; }

}return flag;

}

79. Xây dựng giải thuật và viết hàm kiểm tra mảng có dạng sóng hay không? có trả về 1, không trả về 0. Một mảng có dạng sóng là mảng có các phần tử thứ i lớn hơn hoặc nhỏ hơn hai phần tử xung quanh.

int kt_dangsong(const int a[] , int n){

int flag = 1; for(int i = 1 ; i < n-1 ; i++)

if( (a[i-1] > a[i] && a[i] > a[i+1]) || (a[i-1] < a[i] && a[i] < a[i+1]) ) {

flag = 0; return flag; }

return flag;}

80. Hãy cho biết tất cả các phần tử trong mảng a có nằm trong mảng b không? có trả về 1, không có trả về 0.

int ktA_trong_B(const int a[] ,const int b[] , int n , int m){

int flag = 0; int dem = 0; for(int i = 0 ; i < n ; i++)

for(int j = 0 ; j < m ;j++)if(a[i] == b[j]){

dem++; break;}

if(dem == n)flag = 1;

return flag;}

81. Xây dựng giải thuật và viết hàm đếm giá trị trong mảng thỏa điều kiện: lớn hơn tất cả các giá trị đứng trước nó.

int dem_pt_lon_sau(const int a[] , int n){

int dem = 0; for(int i = 1 ; i < n ; i++) {

int flag = 1;for(int j = 0; j < i ; j++)

if( a[i] <= a[j] ){ flag = 0; break; }

if(flag == 1)dem++;

} return dem;}

82. Xây dựng giải thuật và viết hàm sắp xếp mảng một chiều n số nguyên theo thứ tự tăng dần.

void sx_tang(int a[], int n){

int tg, i, j, min; for(i=0; i<n-1; i++){

min=i; for(j=i+1; j<n; j++){

if(a[min]>a[j])min=j;

}tg=a[min];a[min]=a[i]; a[i]=tg;

}}

83. Xây dựng giải thuật và viết hàm sắp xếp phần tử lẻ tăng dần, các phần tử khác giữ nguyên vị trí.

+ Yêu cầu: Sắp xếp các phần tử lẻ theo thứ tự tăng dần các phần tử khác giữ nguyên vị void sx_le_tang(int a[],int n){

for (int i=0; i<n-1; i++)if (a[i]%2!=0)

for (int j=i+1; j<n; j++)if (a[j]%2!=0 && a[i]>a[j])

{int tg=a[i];

a[i] = a[j]; a[j]=tg; }}

84. Xây dựng giải thuật và viết hàm sắp xếp số nguyên tố tăng dần, các phần tử khác giữ nguyên vị trí.

int SoNguyenTo(int a){

if (a<=1)return 0;

for (int i=2; i<=a/2; i++) if (a%i==0)

return 0;return 1;

}void sx_ngto_tang(int a[],int n){

for (int i=0; i<n-1; i++)if (SoNguyenTo (a[i] ) ==1)

for (int j=i+1; j<n; j++)if (SoNguyenTo (a[j] ) ==1 && a[i]>a[j])

{int tg=a[i];a[i] = a[j];

a[j]=tg; }}

85. Xây dựng giải thuật và viết hàm sắp xếp số hoàn thiện giảm dần, các phần tử khác giữ nguyên vị trí.

int so_hoanthien(int n){

int tong=0; for (int i=1; i<=n/2; i++)

if(n%i==0)tong = tong + i;

if (tong == n)return 1;

return 0;}void sx_hoanthien_giam(int a[],int n){

for (int i=0; i<n-1; i++)if (so_hoanthien (a[i] ) ==1)

for (int j=i+1;j<n;j++)if (so_hoanthien (a[j] ) ==1 && a[i]<a[j]){

int temp=a[i];

a[i] = a[j]; a[j]=temp; }}

86. Cho hai mảng a, b. Xây dựng giải thuật và viết hàm cho biết mảng b có phải là hoán vị của mảng a hay không.

void sapxep(int a[],int n){

for (int i=0; i<n-1; i++)for (int j=i+1; j<n; j++)

if (a[i]>a[j]) {

int temp=a[i]; a[i] = a[j]; a[j]=temp; }}void KetQua(int a[],int b[],int na,int nb){

if (na != nb) {

cout<<"\n mang b ko phai là hoan vi cua mang a!"<<endl;return ;

} sapxep(a, na); sapxep(b, nb); for (int i=0; i<na; i++)

if (a[i]!=b[i]) {

cout<<"\n mang b ko phai la hoan vi cua mang a!"<<endl; return; }

cout<<"\n mang b la hoan vi cua mang a!"<<endl; return;}

87. Xây dựng giải thuật và viết hàm sắp xếp các số dương tăng dần, các số âm giữ nguyên vị trí.

void sx_duong_tang(int a[],int n){

for (int i=0; i<n-1; i++)if (a[i]>0)

for (int j=i+1; j<n; j++)if (a[j]>0 && a[i]>a[j])

{int temp=a[i]; a[i] = a[j]; a[j]=temp;

}

}

88. Xây dựng giải thuật và viết hàm sắp xếp chẵn, lẻ tăng dần nhưng giữ vị trí tương đối giữa các phần tử chẵn và lẻ.

void sx_chanle_tang( int a[],int n ){

for (int i=0; i<n-1; i++)for (int j=i+1; j<n; j++)

if (( (a[i]%2==0 && a[j]%2==0) ||(a[i]%2!=0 && a[j]%2!=0)) && a[i]>a[j]){ int tg=a[i];a[i] = a[j];

a[j]=tg; }}

89. Xây dựng giải thuật và viết hàm sắp xếp số dương tăng dần, số âm giảm dần, vị trí tương đối không thay đổi.

void sx_duongtang_amgiam(int a[], int n){

for (int i=0; i<n-1; i++)for (int j=i+1; j<n; j++){

if (a[i]>0 && a[j]>0 && a[i]>a[j]) { int tg=a[i];a[i] = a[j]; a[j]=tg; } else if (a[i]<0 && a[j]<0 && a[i]<a[j]) {

int tg=a[i];a[i] = a[j]; a[j]=tg; }

}}

90. Cho hai mảng a, b. Xây dựng giải thuật và viết hàm trộn hai mảng thành một mảng giảm dần.

void tron_mang_giam(int a[], int b[], int c[], int na, int nb, int &nc){ sapxep(a,na); //Sap xep tang mang A sapxep(b,nb); //Sap xep tang mang B; hàm sapxep ở đầu kỹ thuật sx.

nc = na + nb; int vta= na-1,vtb= nb-1; for (int i=0; i<nc; i++)

{if (vta >=0&& vtb >= 0)

{if (a[vta] > b[vtb])

{ c[i] = a[vta]; vta--; } else {

c[i] = b[vtb]; vtb--; }

}else if (vtb < 0)

{c[i] = a[vta]; vta--; }

else {

c[i] = b[vtb]; vtb--; }

}}

91. Xây dựng giải thuật và viết hàm thêm một phần tử x vào vị trí k trong mảng một chiều n số nguyên.

void them_gt_x(int a[], int &n, int x, int k){

if( k>=n){

a[n]=x; n++; return;

}for (int i=n; i>k; i--)

a[i] = a[i-1];a[k] = x; n++;

}

92. Xây dựng giải thuật và viết hàm thêm phần tử x vào trong mảng tăng nhưng vẫn giữ nguyên tính tăng của mảng.

void them_x_mangtang(int a[], int &n, int x){

int dem=0;for (int i=0; i<n;i++)

if (a[i]>x){

dem=1;for (int k = n; k>i; k--)

a[k] = a[k-1];a[i] = x;break;

}if(dem==0)

a[n]=x;n++;

}

93. Xây dựng giải thuật và viết hàm thêm phần tử x vào sau phần tử là số nguyên tố đầu tiên trong mảng, nếu không có phần tử nguyên tố thì thêm vào cuối mảng.

int kt_ngto(int a){

if (a<=1)return 0;

for (int i=2; i<=a/2; i++)if (a%i==0)

return 0;return 1;

}

void them_x_sau_ngto(int a[], int &n, int x){

int dem=0;for (int i=0; i<n; i++)

if (kt_ngto(a[i])==1){

dem++; i=i+1;for (int k = n; k>i; k--)

a[k] = a[k-1];a[i] = x;break;

}if(dem==0)

a[n]=x;n++;

}

94. Xây dựng giải thuật và viết hàm xóa phần tử có chỉ số k trong mảng một chiều n số nguyên.

void xoa_pt_k(int a[], int &n, int k){

for(int i=k; i<n;i++)a[i] = a[i+1];

n--;}

95. Hãy xóa tất cả các phần tử lớn nhất trong mảng.

int tim_max(int a[], int n){ int max = a[0]; for (int i=1; i<n ; i++) { max=(max<a[i])?a[i]:max; } return max;}void xoa_pts_max(int a[], int &n){

int max=tim_max(a,n); for (int i=0; i<n; i++)

if (a[i]==max) { for (int k=i; k<n; k++) a[k] = a[k+1]; n--;

}}

96. Xây dựng giải thuật và viết hàm xóa tất cả các số chẵn trong mảng.

void xoa_pts_chan(int a[], int &n){

for (int i=0; i<n; i++)if (a[i]%2==0)

{for (int k=i; k<n; k++)

a[k] = a[k+1];n--;

}}

97. Xây dựng giải thuật và viết hàm xóa tất cả các số chính phương trong mảng.

int so_chinhphuong(int n){

for (int i=1; i<=n/2; i++)if (i*i == n)

return 1;return 0;

}

void xoa_pts_cp(int a[], int &n){

for (int i=0; i<n; i++)if (so_chinhphuong(a[i])==1)

{for (int k=i; k<n; k++)

a[k] = a[k+1];n--;

}}

98. Xây dựng giải thuật và viết hàm xóa tất cả các số trùng với x trong mảng.

void xoa_pts_x(int a[], int &n, int x){

for (int i=0; i<n; i++) if (a[i]==x)

{ for (int k=i; k<n; k++)

a[k] = a[k+1];n--;

}}

99. Xây dựng giải thuật và viết hàm xóa tất cả các số nguyên tố trong mảng.

int so_nguyento(int n){

if(n>=2){

for (int i=2; i<=n/2; i++)if (n%i==0)

return 0;return 1;

}return 0;

}

void xoa_ngto(int a[], int &n){

for(int i=0; i<n; i++)if (so_nguyento(a[i])==1){

for (int k=i; k<n; k++)a[k]=a[k+1];

n--;}

}

100. Xây dựng giải thuật và viết hàm xóa tất cả các phần tử trùng nhau trong mảng và chỉ giữ lại duy nhất một phần tử.

void xoa_pts_trung(int a[], int &n){

for (int i=0; i<n-1; i++) for(int j=i+1; j<n; j++)

if (a[i]==a[j]) {

for (int k=j; k<n; k++) a[k]=a[k+1];

n--; }}

101. Xây dựng giải thuật và viết hàm xóa tất cả các phần tử xuất hiện nhiều hơn một lần trong mảng.

void xoa_pts_hon1(int a[], int &n){

for (int i=0; i<n-1; i++) {

for(int test = 0, j=i+1; j<n; j++) //xóa ptu tai j if (a[i]==a[j])

{for (int k=j; k<n; k++)

a[k] = a[k+1];n--; j--; test=1;

}if (test == 1) //Xóa luôn chính nó {

for (int k=i; k<n; k++) a[k] = a[k+1];

n--; i--;}

}}

102. Xây dựng giải thuật và viết hàm đưa số 1 về đầu mảng.

void duaMotvedau(int a[], int n){

for (int i=1; i<n; i++)if (a[i] == 1){

int tg=a[i];for(int k=i ; k>0; k--)

a[k] = a[k-1];a[0] = tg;

} }

103. Xây dựng giải thuật và viết hàm đưa chẵn về đầu, lẻ về cuối, phần tử 0 nằm giữa mảng.

void sx_chandau_0_lecuoi(int a[], int n){

int i; int vtle=0; for (i=1; i<n; i++)

if (a[i] %2 == 0 && a[i]!=0 || a[0]==0) {

int tg=a[i]; for(int k=i ; k>0; k--)

a[k] = a[k-1];a[0] = tg;

} int dem=0;for (i=0; i<n; i++){

if (dem==0 && a[i]%2!=0){

vtle = i;dem=1;

}

if(a[i]==0 && vtle==0)continue;

else if (a[i]==0) {

for(int k=i ; k>vtle; k--) a[k] = a[k-1];

a[vtle] =0; }

}}

104. Xây dựng giải thuật và viết hàm đưa các số chia hết cho 3 về đầu mảng.

void chiahetchoba(int a[], int n){

for (int i=1; i<n; i++)if (a[i] %3 == 0)

{ int tg = a[i]; for(int k = i ; k>0; k--) a[k] = a[k-1]; a[0] = tg; }}

105. Xây dựng giải thuật và viết hàm đảo ngược mảng ban đầu.

void dao_nguoc(int a[], int n){

for (int i=0, j=n-1; i<j; i++, j--) { int tg=a[i]; a[i]=a[j]; a[j]=tg; }}

106. Xây dựng giải thuật và viết hàm đảo ngược thứ tự các số chẵn trong mảng.

void daochan(int a[], int n){

for (int i=0; i<n-1; i++)for (int j = i+1; j<n; j++)

if (a[j]%2==0 &&a[i] %2 == 0) {

int tg=a[i]; a[i]=a[j];a[j]=tg;

}}

107. Xây dựng giải thuật và viết hàm dịch trái các phần tử trong mảng.

void dichtrai(int a[], int n){

int tg = a[0];for (int i=0; i<n-1; i++)

a[i]=a[i+1];

a[n-1]= tg;}

108. Xây dựng giải thuật và viết hàm xuất mảng: chẵn nằm 1 hàng, lẻ nằm hàng tiếp theo.

void chanle_haihang(const int a[], int n){

cout<<"\n Cac pt chan: " ;for (int i=0; i<n; i++)

if (a[i]%2==0) {

cout<<setw(3)<<a[i]; }

cout<<"\n Cac pt le: "; for (i=0; i<n; i++)

if (a[i]%2!=0) {

cout<<setw(3)<<a[i]; }}

109. Xây dựng giải thuật và viết hàm đảo thứ tự số chẵn, lẻ trong mảng nhưng vẫn giữ vị trí tương đối.

void hoanvi(int &a, int &b){

int temp = a; a = b;b = temp;

}

void daonguoc_chanle(int a[], int n){

int i, j;for (i=0; i<n-1; i++)

for(j=i+1; j<n; j++) {

if (a[i]%2==0 && a[j]%2 == 0)hoanvi(a[i],a[j]);

else if (a[i]%2!=0 && a[j]%2!=0)hoanvi(a[i],a[j]);

}}

110. Xây dựng giải thuật và viết hàm biến đổi mảng bằng cách thay giá trị max = giá trị min và ngược lại.

void minmax(int a[], int n, int &max, int &min){

max= min= a[0]; for (int i=1; i<n; i++) {

max=(max<a[i])?a[i]:max;min=(min>a[i])?a[i]:min;

}}

void biendoi(int a[], int n){

int max,min;minmax(a, n, max, min);for(int i=0; i<n; i++)

{if (a[i]==max)

a[i]=min; else if (a[i]==min)

a[i]=max; }}

111. Xây dựng giải thuật và viết hàm liệt kê tất cả các mảng con có độ dài hơn 2 phần tử.

void xuatmangcon(const int b[], int nb){

for(int i=0; i<nb; i++)cout<<setw(4)<<b[i];

cout<<endl; }void lk_mang_hon2(const int a[], int n){

int b[100], nb, d;for (int i=0; i<n-1; i++)

for (d = i+3; d<=n; d++){

nb=0; b[0]=a[i]; nb++; for(int j=i+1; j<d; j++){

b[nb]=a[j]; nb++;

}xuatmangcon(b,nb); cout<<endl;while(nb>3){

for(int m=1; m<nb; m++)b[m]=b[m+1];

nb--;xuatmangcon(b,nb); cout<<endl;

} }}

112. Xây dựng giải thuật và viết hàm liệt kê tất cả các mảng con tăng dần trong mảng.

void lk_mangcon_tang(const int a[], int n){

int b[100], nb, d;for (int i=0; i<n-1; i++)

for (d = i+2; d<=n; d++){

nb=0; b[0]=a[i]; nb++; int co=0; for(int j=i+1; j<d; j++) {

if(a[j]>b[nb-1]){ co=1; b[nb]=a[j]; nb++; }else if(nb!=1 && a[j]<b[0])

co=0;else if(nb!=1 && a[j]<b[nb-1] && a[j]>b[0]){

co=1;for(int k=1; k<nb; k++)

if(b[k]>a[j]){

b[k]=a[j]; break;}

while(nb>k+1)nb--;

} }

if(co!=0){

xuatmangcon(b,nb); cout<<endl;while(nb>2){

for(int m=1; m<nb; m++)b[m]=b[m+1];

nb--;xuatmangcon(b,nb); cout<<endl;

}}

}}

113. Xây dựng giải thuật và viết hàm liệt kê tất cả mảng con tăng và có chứa giá trị lớn nhất trong mảng.

void lk_mangcon_tangmax(const int a[], int n){ int b[100], nb, d, max=a[0];

for(int k=1; k<n; k++)max=(a[k]>max)?a[k]:max;

for (int i=0; i<n-1; i++)

for (d = i+2; d<=n; d++){

nb=0; b[0]=a[i]; nb++; int co=0; for(int j=i+1; j<d; j++) {

if(a[j]>b[nb-1]){ co=1; b[nb]=a[j]; nb++; }else if(nb!=1 && a[j]<b[0])

co=0;else if(nb!=1 && a[j]<b[nb-1] && a[j]>b[0]){

co=1;for(int k=1; k<nb; k++)

if(b[k]>a[j]){ b[k]=a[j]; break; }

while(nb>k+1)nb--;

} }

if(co!=0){

for(int m=0; m<nb; m++)if(b[m]==max){ xuatmangcon(b,nb); break; }

if(kt_tang(b,nb)==1 &&nb>2)while(nb>2){

for(int m=1; m<nb; m++)b[m]=b[m+1];

nb--;for(int n=0; n<nb; n++)

if(b[n]==max){ xuatmangcon(b,nb); break; }

}}

}}

114. Xây dựng giải thuật và viết hàm liêt kê tất cả mảng con tăng và tính tổng cho từng mảng con đó.

int tongs(const int b[],int nb){

long s=0;for(int i=0; i<nb; i++)

s+=b[i];return s;

}

void lk_mangcon_tang_tong(const int a[], int n){

int b[100], nb, d;for (int i=0; i<n-1; i++)

for (d = i+2; d<=n; d++){

nb=0; b[0]=a[i]; nb++; int co=0; for(int j=i+1; j<d; j++) {

if(a[j]>b[nb-1]){ co=1; b[nb]=a[j]; nb++; }else if(nb!=1 && a[j]<b[0])

co=0;else if(nb!=1 && a[j]<b[nb-1] && a[j]>b[0]){

co=1;for(int k=1; k<nb; k++)

if(b[k]>a[j]){ b[k]=a[j]; break; }

while(nb>k+1)nb--;

} }

if(co!=0){

xuatmangcon(b,nb);int s=tongs(b,nb);cout<<"\t\t co tong la: "<<s<<endl;while(nb>2){

for(int m=1; m<nb; m++)b[m]=b[m+1];

nb--;xuatmangcon(b,nb);int s=tongs(b,nb);cout<<"\t\t co tong la: "<<s<<endl;

}}

}}

115. Xây dựng giải thuật và viết hàm đếm số mảng con tăng trong mảng ban đầu.

int dem_mangcon_tang(const int a[], int n){

int b[100], nb, d, dem=0;for (int i=0; i<n-1; i++)

for (d = i+2; d<=n; d++){

nb=0; b[0]=a[i]; nb++; int co=0; for(int j=i+1; j<d; j++) {

if(a[j]>b[nb-1]){ co=1; b[nb]=a[j]; nb++; }else if(nb!=1 && a[j]<b[0])

co=0;else if(nb!=1 && a[j]<b[nb-1] && a[j]>b[0]){

co=1;for(int k=1; k<nb; k++)

if(b[k]>a[j]){

b[k]=a[j]; break;}

while(nb>k+1)nb--;

} }

if(co!=0){

dem++;while(nb>2){

for(int m=1; m<nb; m++)b[m]=b[m+1];

nb--; dem++;}

} }

return dem;}

116. Xây dựng giải thuật và viết hàm liệt kê tất cả mảng con toàn dương và có độ dài hơn 1.

void lk_mangduong_hon1(const int a[], int n){

int b[100], nb, d;for (int i=0; i<n-1; i++)

for (d = i+2; d<=n; d++){

int co=0;if(a[i]>0){

nb=0; b[0]=a[i];nb++; for(int j=i+1; j<d; j++){

if(a[j]>0){

co=1; b[nb]=a[j]; nb++;

}else if(a[j]<0)

co=0;}

}if(co!=0){

xuatmangcon(b,nb); cout<<endl;while(nb>2){

for(int m=1; m<nb; m++)b[m]=b[m+1];

nb--;xuatmangcon(b,nb); cout<<endl;

}}

}}

117. Xây dựng giải thuật và viết hàm tìm mảng con toàn dương có tổng lớn nhất.

void mangduong_smax(const int a[], int n){

int b[100], nb, d; int max=0, s;for (int i=0; i<n-1; i++)

for (d = i+2; d<=n; d++){

int co=0;if(a[i]>0){

nb=0; b[0]=a[i]; nb++; for(int j=i+1; j<d; j++){

if(a[j]>0){

co=1; b[nb]=a[j]; nb++;

}else if(a[j]<0)

co=0;}

}if(co!=0){

int c[100], nc;

s=tongs(b,nb);if(max<s){

max=s; nc=0;for(int k=0; k<nb; k++){ c[nc]=b[k]; nc++; }

}else{

xuatmangcon(c,nc); cout<<endl; return;}

} }}

II: DANH SÁCH LIÊN KẾT ĐƠN

118. Cấu trúc dữ liệu

Cấu trúc phần tửtypedef struct tag_Node{ int data; struct tag_Node *pNext;} Node;Cấu trúc danh sách các phần tửtypedef struct tag_List{

Node*pHead; Node*pTail;

}List;

119. Xây dựng giải thuật và viết hàm xóa phần tử đầu

int xoadau(List &l){ if ( l.pHead= =NULL)

return 0; else { l.pHead=l.pHead->pNext; return 3;

}}

120. Xây dựng giải thuật và viết hàm xóa phần tử cuối

int xoa cuoi(List &l){

Node *k; If(l.pTail= =NULL)

Return 0; Else { For(k=l.pHead;k->pNext!=pTail) K=k->pNext; k->pNext=NULL;

l.pTail=k; return 3; } }

121. Xây dựng giải thuật và viết hàm xóa một phần tử đứng sau một phần tử x:

Int xoa ptx(List &l,int x){ Node *p=tim x(l,x); If(l.pHead= =NULL)

Return 0; If(p= =NULL) Return 1; If(p= =l.pTail) { Return 2; } Else { Node *k=p->pNext; Node *m=->pNext; p->pNext=m; }}

122. Xây dựng giải thuật và viết hàm xóa một phần tử đứng trước một phần tử x:

Int xoapt_truoc x(List &l,int x){ Node *p=tim x(l,x); If(l.pHead= =NULL) Return 0; If(p= =NULL) Return 1; If(p= =l.pHead) Return 2; If(l.pHead->pNext= =p) { Xoadau(l); Return 3; } Else { Node *k=l.pHead; While(q->pNext!=k) q=q->pNext; q->pNext=p; return 4; }}

123. Xây dựng giải thuật và viết hàm xóa toàn bộ danh sách:

Void xoa_toanbods(List &L){

Node* Temp = L.First;while (Temp!= NULL){

L.First = L.First ->Next;Temp ->Next = NULL;

if (L.First != NULL) L.First ->Pre = NULL;

delete Temp;Temp=L.First;

}}

124. Xây dựng giải thuật và viết hàm xóa một phần tử x:

int xoapt_Node (List &l, int x){

Node *p = l.pHead;while (p != NULL){

if (p->data== x) break; p = p->pNext;}

125. Xây dựng giải thuật và viết hàm xóa phần tử nhỏ nhất trong danh sách:

126. Xây dựng giải thuật và viết hàm xóa hai phần tử trước và sau X:

127. Xây dựng giải thuật và viết hàm liệt kê các số âm trong danh sách:

void List_ke_so_am(List &l){

Node *p=l.pHead;int dem=0;while(p!=NULL){

if(p->data<0){

cout<<p->data<<" ";dem++;

}p=p->pNext;

}if(dem==0)

cout<<"danh sach khong co so am";

}

128. Xây dựng giải thuật và viết hàm tìm phần tử có giá trị max trong danh sách:

Node *timmax(List l){

Node *p=l.pHead;for(Node *k=l.pHead->pNext,k,k=k->pNext){

if(k->data<p->data)p=k;

}cout<<"\n gia tri max="<<p->data;cout<<"\n ";

return p;return NULL;

}

129. Xây dựng giải thuật và viết hàm tìm phần tử có giá trị min trong danh sách:

Node *timmin(List l){

Node *p=l.pHead;for(Node *k=l.pHead->pNext,k;k=k->pNext){

if(k->data<p->data)k=p;

}cout<<"\n gia tri min="<<p->data;cout<<"\n ";return p;return NULL;

}

130. Xây dựng giải thuật và viết hàm tìm phần tử chẵn đầu trong danh sách:

Node *tim_chan_dau(List l){

Node *p=l.pHead;while(p!=NULL){

if(p->data%2==0){

return p;break;

}p=p->pNext;

}return NULL;

}

131. Xây dựng giải thuật và viết hàm tìm phần tử lẽ cuối cùng trong danh sách:

Node *tim_le_cuoi(List l){ Node *p=l.pHead;Node *k=NULL;

while(p!=NULL){

if(p->data%2!=0){

k=p;}p=p->pNext;

}if(k!=NULL)

return k;

elsereturn NULL;

}

132. Xây dựng giải thuật và viết hàm tìm phần tử chẵn max lớn hơn lẽ max:

void chanmax_max_minmax(LIST &l){

Node *cm = chanmax(l);Node *lm = lemax(l);if(cm->data < lm->data)

cout<<"Khong thoa y/c! So chan lon nhat la: "<<cm->data<<" nho hon so le lon nhat la: "<<lm->data;

if(cm->data > lm->data)cout<<"Thoa y/c! So chan lon nhat la: "<<cm->data<<" va so le lon nhat la:

"<<lm->data;else if(cm->data == lm->data)

cout<<"Khong thoa y/c! So chan lon nhat: "<<cm->data<<" bang so le lon nhat: "<<lm->data; }

133. Xây dựng giải thuật và viết hàm đếm nguyên tố trong danh sách

int dem_so_nto(List l){

Node *k=l.pHead;int dem=0;for(k;k!=NULL;k=k->pNext){

if(ktsnt(k->data)==1)cout<<k->data<<" ";

}}

134. Xây dựng giải thuật và viết hàm đếm số node

int demsoNode(List l){ int dem=0; Node *p=l.pHead; While(q!=NULL) { Dem++; q=q->pNext; } Return dem;}

135. Xây dựng giải thuật và viết hàm đếm số phần tử chẵn:

int demchan(List l){ int dem=0;

Node *p; p=l.pHead; while(p) { if(p->data%2= = 0) dem++; p=p->pNext; } return dem;}

136. Xây dựng giải thuật và viết hàm đếm phần tử lẻ:

Int demle(List l){ Int dem=0; Node *p; P=l.pHead; While(p) { If(p->data%2!=0) Dem++; p=p->pNext; } Return dem;}

137. Xây dựng giải thuật và viết hàm đếm số phần tử chia hết cho 2:

Int ptu_chia2(list l){ int dem=0; Node *p; p=l.pHead; while(p) { if(p->data%2= =0) dem++; p=p->pNext; } return dem;}

138. Xây dựng giải thuật và viết hàm đếm số phần tử dương:

int demduong(List l) { int dem=0; Node *p; p=l,pHead; while(p) {

if(p->data>0) dem++; p=p->pNext; } return dem; }

139. Xây dựng giải thuật và viết hàm tìm các số chắn trong danh sách

int kt_chan(int k){ int flag=0;

if(k%2= =0)flag=1;

return flag;}

140. Xây dựng giải thuật và viết hàm in ra các số chẵn

void xuatchan(List l){ int flag=0; Node *; p=l.pHead; while(p) { if(kt_chan(p->data)= =1) { cout<<” “<<p->data; flag=1; } p=p->pNext; } if(flag= = 0) cout<<”\n khong co so chan nao trong danh sach “;}

141. Xây dựng giải thuật và viết hàm tìm các số lẽ trong danh sách

int kt_le(int k){ int flag=0;

if(k%2!=0) flag=1; return flag; }

142. Xây dựng giải thuật và viết hàm in ra các số lẽ

void xuatle(List l) { int flag=0;

Node *p; p=l.pHead; while(p) { if(kt_le(p->data)= = 1) { cout<<” “<<p->data; flag=1; } p=p->pNext;

} if(flag= =0) cout<<”\n khong co so le nao trong danh sach “;}

143. Xây dựng giải thuật và viết hàm tìm các số nguyên tố trong danh sách:

int KT_NgTo(int k){

int dem=0;for(int i=2;i<=k;i++)

if(k%i==0)dem++;

return dem;}

144. Xây dựng giải thuật và viết hàm in ra các số nguyên tố

void XuatNgTo(List l){

int flag=0;Node *p;p=l.pHead;while(p){

if(KT_NgTo(p->data)==1){

cout<<" "<<p->data;flag=1;

}p=p->pNext;

}if(flag==0)

cout<<"\n Khong co so nguyen to nao trong danh sach";}

145. Xây dựng giải thuật và viết hàm tìm các số chia hết cho 2:

int KT_ChiaHet2(int k){

int flag=0;if(k%2==0)

flag=1;return flag;

}

146. Xây dựng giải thuật và viết hàm in ra các số chẵn

void XuatChiaHet2(List l){

int flag=0;Node *p;p=l.pHead;while(p){

if(KT_ChiaHet2(p->data)==1){

cout<<" "<<p->data;flag=1;

}p=p->pNext;

}if(flag==0)

cout<<"\n Khong co so nao chia het cho 2 trong danh sach";}

147. Xây dựng giải thuật và viết hàm đổi chổ trực tiếp –Interchange Sort:

void inter_sort(List l){

for(Node *p=l.pHead,p!=l.pTail,p=p->pNext){

for(Node *k=p->pNext,k,k=k->pNext){

if(p->data,k->data);}

}}

148. Xây dựng giải thuật và viết hàm sắp xếp “chọn trực tiếp –Selection Sort”

void selection_sort(List l) {

for(Node*p=l.pHead;p!=l.pTail;p=p->pNext) {

Node*k=p; for(Node *q=p->pNext;q;q=q->pNext) {

if (k->data>q->data)k=q;

}

hoanvi(k->data,p->data); }

}

149. Xây dựng giải thuật và viết hàm sắp xếp “chèn trực tiêp –Insertion Sort”

void insertion_sort(List l){

for(Node *p=l.pHead->pNext;p;p=pNext){

Node *pos=l.pHead;while(pos!=p){

if(pos->data>p->data)

hoanvi(pos->data,p->data);pos=pos->pNext;

}}

}}

150. Xây dựng giải thuật và viết hàm sắp xếp “dựa trên phân hoạch- Quick Sort”

void quick_sort(List &l){

List l1;List l2;if (l.pHead==NULL)

return ;else

khoitao(l1); khoitao(l2);

Node *x=l.pHead;l.pHead=p->pNext;while(l.pHead!=NULL){

Node *p=l.pHead;l.pHead=p->pNext;p->pNext=NULL;if(p->data<=x->data)

themdau2(l1,p);else

themdau2(l2,p);}quick_sort(l1);quick_sort(l2);if(l1.pHead==NULL)

l.pHead=x;else

{l.pHead=l1.pHead;l1.pTail->pNext=x;

}x->pNext=l2.pHead;if(l2.pHead==NULL)

l.pTail=x;else{

l.pTail=l2.pTail;}

}

151. Xây dựng giải thuật và viết hàm sắp xếp “nổi bọt –Buble”

void bubble(List l){

Node *cuoi=l.pTail,*tcuoi;for(Node *dau=l.pHead;dau;dau=dau->pNext;{

while(cuoi!=l.pHead){

tcuoi=dau->pNext;if(cuoi->data<tcuoi->data)

hoanvi(cuoi->data,tcuoi->data);cuoi=tcuoi;

}}

}

152. Xây dựng giải thuật và viết hàm thêm vào đầu danh sách

void themdau(List &l);{//khoitao(l);

int x;cout<<"\n nhap x=";cin>>x;Node *p=tao_nut(*);if(l.pHead==NULL)

l.pHead=l.pTail=p;else{

p->pNext=pHead;l.pHead=p;

}}

153. Xây dựng giải thuật và viết hàm thêm vào cuối danh sách

void themcuoi(List &l);

{//khoitao(l);int x;cout<<"\n nhap x";cin>>x;Node *p=tao_nut(x);if (l.pHead=l.pTail=p;l.pHead=l.pTail=p;else{

l.pTail->pNext=p;l.pTail=p;

}}

154. Xây dựng giải thuật và viết hàm thêm vào danh sách sau một phần tử x

int them_sau_y_ptx(List &l,int x,int y){Node *p=tao_nut(y);Node *q=tim x(l,x);if (l.pHead==NULL)return 0;if (q==NULL)return 1;if(q==k.pTail)themcuoi(l);else {

p->pNext=q->pNext;q->pNext=p;return 3;

}

155. Xây dựng giải thuật và viết hàm thêm vào danh sách trước một phần tử x

int them_truoc_y_ptx(List &l,int x,int y){

Node *p=tao_nut(y);Node *q=timx(l,x);if(l.pHead==NULL)

return 0;else{

if(q==NULL)return 1;

if(q==l.pHead)themdau(l);

else{

Node*k=l.pHead;while(k->pNext!=q)

k=k->pNext;p->pNext=q;k->pNext=p;return 3;

}}

}

156. Xây dựng giải thuật và viết hàm thêm phần tử x trước chẵn đầu

void themx_truoc_chan_dau(List &l){

Node *p;int y;if(tim_chan_dau(l)==NULL)

themdau(l);else{

cout<<" nhap ptu y can them truoc chan dau"<<tim_chan_dau(l)->data<<" ";cin>> y;them_truoc_y_ptx(l,tim_chan_dau(l)->data,y);

}}

157. Xây dựng giải thuật và viết hàm thêm phần tử x sau lẽ cuối

void themx_sau_le_cuoi(List &l){

Node *p;int y;if(tim_le_cuoi(l)==NULL)

themcuoi(l);else{

cout<<" nhap ptu y can them sau le cuoi"<<tim_le_cuoi(l)->data<<" ";cin>> y;them_sau_y_ptx(l,tim_le_cuoi(l)->data,y);

}}

158. Xây dựng giải thuật và viết hàm tạo một danh sách liên kết:

void tao_ds(List &l){

int x,Node *p;do{

cout<<"\n nhap x=";cin>> x;if(x==-1)

break;p=tao_nut(x);if (l.pHead==NULL);

l.pHead=l.pTail=p; else

{l.pTail->pNext=p;l.pTail=p;

}}while(1);

}

159. Xây dựng giải thuật và viết hàm in số nguyên tố trong danh sách

void in_so_nto(List l){

Node *k=l.pHead;for(k;k!=NULL;k=k->pNext){

if(ktsnt(k->data)==1)cout<<k->data<<" ";

}}

160. Xây dựng giải thuật và viết hàm xuất các số nguyên trong danh sách

Void xuat_songuyen(List l){ For(Node *p=l.pHead;p!=NULL;p=p->pNext) { Cout<< pi->data<<” “; }}

161. Xây dựng giải thuật và viết hàm xuất phần tử âm đầu tiên trong danh sách

Void xuat_pt_am_dau tien(List l, int n) { Node *p=l.pHead;int dem=0; { Cout<<”\n nhap pt n=:”; Cin>> n; } While(p!=NULL) { If(p->data<0) { Cout<<”\n phan tu am dau tien=”; Dem++; } } If(dem= =0) Cout<<” khong tim thay”;}

162. Xây dựng giải thuật và viết hàm tạo danh sách random có sắp xếp

Void tao_ds_random_sort(List l){ Node *p; int x; int n; { For(int i=1;i<=n;i++) { X=random()%100; P=tao_random(x); If(l.pHead= =NULL) l.pHead=l.pTail=p; else { p->pPrew=l.pTail; l.pTail->pNext=p; l.pTail=p; } }}

163. Xây dựng giải thuật và viết hàm tạo một node mới:

Node *tao_node_moi(List l){ Node *p; p=new_Node; If(p= =NULL) Return NULL; p->data=l; p->pNext=NULL; retutn p;}

164. Xây dựng giải thuật và viết hàm nhập một số nguyên vào danh sách:

Void nhap_songuyen(List &l){ Int n; Cout<<”\n nhap so luong node:”; Cin>> n; Init(l); For(int i=1;i<=n;i++) { Int x; Cout<<”\n nhap mot so nguyen:”; Cin>> x; Node*p=getnode(x); Themdau(l,p);

}}

165. Xây dựng giải thuật và viết hàm duyệt qua các nút trong một danh sách:

Void duyet_ds(List l){ Node *p; p=l.pHead; while (p!=NULL) { Duyet_Node(p); p=p->pNext; }}

166. Xây dựng giải thuật và viết hàm tìm kiếm một phần tử X trong danh sách:

Node *search(List l,int x){ Node *p; P=l.pHead; While((p!=NULL)&&(p->data!=x)) p=p->link; return p;}

167. Xây dựng giải thuật và viết hàm sao chép danh sách thành môt danh sách và sắp sếp:

Void sao_chep_va_sap_xep(List &l)

168. Xây dựng giải thuật và viết hàm đảo ngược danh sách:

Void dao_ds(List &l)

169. Xây dựng giải thuật và viết hàm cộng liên tiếp hai phần tử trong danh sách:

Void cong_lien_tiep_2pt(List &l)

170. Xây dựng giải thuật và viết hàm tách danh sách:

Void tach_List(List &l, List &l1,List &l2){ Khoitao(l1); Khoitao(l2); Do { P=l.pHead; l.pHead=p->pNext; p->pHead=NULL; if(p->data%2==0) themdau2(l1,p); else

themdau2(l2,p); } While(l.pHead!=NULL) l.pTail=NULL; }

171. Xây dựng giải thuật và viết hàm nối hai danh sách:

Void noi_ds(List &l,List &l1,List &l2){ Khoitao(l1); Khoitao(l2);Cout<<”\n nhap danh sach l1.ketthuc-1”;Tao_ds(l1);Cout <<”\n nhap danh sachl2.ketthuc-1”;Tao_ds(l2);If(l1.pHead==NULL) l=l2;if(l2.pHead==NULL) l=l1;else { l1.pTail->pNext=l2.pHead; l.pHead=l1.pHead; l.pTail=l2.pTail; }}

III: DANH SÁCH LIÊN KẾT KÉP

172. Khai báo cấu trúc dữ liệu của một danh sách liên kết đơn tổng quát

typedef struct tagNode{

int data;struct tagNode *pnext;

}Node;

173. Xây dựng giải thuật và viết hàm khởi tạo danh sách liên kết đơn

void khoi_tao(List &l){

l.phead=l.ptail=NULL;}

174. Xây dựng giải thuật và viết hàm định nghĩa danh sách liên kết

Typedef struct tag_List{

Node *phead;Node *ptail;

}List;

175. Xây dựng giải thuật và viết hàm tạo nút danh sách liên kết đơn

Node* getNode(int x){Node *p=new Node; if(p==NULL)

{cout<<"\nKhong du bo nho"; exit(0);}p->pprev=NULL;p->data=x;p->pnext=NULL;

return p;}

176. Xây dựng giải thuật và viết hàm tạo danh sách ngẫu nhiên

void tao_dsng(List &l){int n,x; Node *p; cout<<"Nhap so pt n:\t"; cin>>n; for(int i=1;i<=n;i++)

{ x=rand()%500-rand()%500; //nh?p ng?u nhiên p=getNode(x);if(l.phead==NULL)

l.phead=l.ptail=p;else

{p->pnext=l.phead;

l.phead->pprev=p; l.phead=p;}

}}

177. Nhập bằng tay

void tao_ds(List &l){int n,x; Node *p; cout<<"Nhap so pt n:\t"; cin>>n; for(int i=1;i<=n;i++)

{cout<<"Nhap x:"; cin>>x; p=getNode(x);if(l.phead==NULL)

l.phead=l.ptail=p;else

{p->pnext=l.phead; l.phead->pprev=p; l.phead=p;}

}}

178. Xây dựng giải thuật và viết hàm duyệt danh sách liên kết

void xuat_ds(List l)

{Node *p=l.phead; while(p)

{cout<<p->data<<" -> "; p=p->pnext;}

cout<<"Null"<<endl;}

179. Xây dựng giải thuật và viết hàm đếm số lượng node trong danh sách liên kết đơn

180. Xây dựng giải thuật và viết hàm đếm số lượng node có giá trị âm

181. Xây dựng giải thuật và viết hàm kiểm tra danh sách liên kết tồn tại node có giá trị dương hay không?

182. Chèn 1 pt vào đầu ds

void them_dau(List &l,int x){

cout<<"\nNhap pt muon them:";cin>>x;Node *p=getNode(x);

if(l.phead==NULL)l.phead=l.ptail=p;

else{ p->pnext=l.phead; l.phead->pprev=p; l.phead=p;}

}

183. Xây dựng giải thuật và viết hàm chèn phần tử vào cuối danh sách

void them_cuoi(List &l,int x){ cout<<"Nhap pt muon them:";

cin>>x;Node *p=getNode(x);if(l.ptail==NULL)

l.phead=l.ptail=p;else

{p->pprev=l.ptail; l.ptail->pnext=p; l.ptail=p;}

}

184. Xây dựng giải thuật và viết hàm thêm 1 nút vào sau pt có giá trị là y

void themsau_q(List &l,int x,int y){

if(l.phead==NULL)cout<<"danh sach rong";

else{ Node *q;

q=timpt_y(l,y);if(q==NULL)

cout<<"khong tim thay pt thoa yeu cau";else{

if(q==l.ptail)them_cuoi(l,x);

else{

Node *k;cout<<"nhap pt can them: ";cin>>x;cout<<endl;k=getNode(x);k->pnext=q->pnext;q->pnext=k;k->pprev=q;

}}

}}

185. Xây dựng giải thuật và viết hàm thêm 1 nút vào trước phần tử có giá trị y

void themtruoc_q(List &l,int x,int y){ if(l.phead==NULL)

cout<<"danh sach rong"; else

{ Node *q;q=timpt_y(l,y);if(q==NULL)

cout<<"khong tim thay pt thoa y/cau";else{

if(q==l.phead)them_dau(l,x);

else{ cout<<"nhap pt can them: "; cin>>x; Node *p=getNode(x); (q->pprev)->pnext=p; p->pprev=q->pprev; q->pprev=p; p->pnext=q;}

}}

}

186. Xây dựng giải thuật và viết hàm thêm 1 nút vào trước chẳn đầu

void ThemX_truoc_chan_dau(LIST &l){

NODE *p;int y;if(chan_dau(l) = = NULL) // khong tim thay chan dau, them x vao dau dsach

themdau(l);else // tim thay, thuc hien them truoc chan dau{

cout<<"Nhap phan tu Y can them truoc chan dau "<<tim_chan_dau(l)->data<<" ";cin>>y;

themtruoc_q( l , chan_dau(l)->data,y);}

}

187. Xây dựng giải thuật và viết hàm xóa đầu

void xoa_dau(List &l){Node *p; if(l.phead==NULL)

cout<<"DANH SACH RONG~"; else

{if(l.phead==l.ptail)

l.phead=l.ptail=NULL;else

{p=l.phead; l.phead=p->pnext; l.phead->pprev=NULL; delete(p);}

}

}

188. Xây dựng giải thuật và viết hàm xóa cuối

void xoa_cuoi(List &l){

Node *p;if(l.phead==NULL)

cout<<"DANH SACH RONG~";else

{if(l.phead==l.ptail)

l.phead=l.ptail=NULL;else

{p=l.ptail; l.ptail=p->pprev;l.ptail->pnext=NULL; delete(p);}

}}

189. Xây dựng giải thuật và viết hàm xóa 1 nút trước pt có giá trị y

void xoatruoc_q(List &l,int y){

Node *q,*p;if(l.phead==NULL)

cout<<"Danh sach rong~";else

{p=timpt_y(l,y);if(p!=NULL)

{q=p->pprev;if(q!=NULL)

{p->pprev=q->pprev;if(q==l.phead) l.phead=p;else

q->pprev->pnext=p;delete(q);

}else cout<<"\nkhong co pt xoa\t";

}

else xoa_cuoi(l);}

}

190. Xây dựng giải thuật và viết hàm xóa 1 nút sau pt có giá trị y

void xoasau_q(List &l,int y){

Node *p;Node *q;if(l.phead==NULL)

cout<<"Danh sach rong~";else

{cout<<"Nhap pt y can tim:\t";cin>>y;q=timpt_y(l,y);if(q!=NULL){ p=q->pprev;

if(p!=NULL){

q->pnext=p->pnext;p->pnext->pprev=q;delete(p);

{cout<<"lol~...Null";

}else xoa_dau(l);

}}

191. Xây dựng giải thuật và viết hàm xóa phần tử x

void xoapt_y(List l,int y){ Node *q;

if(l.phead->data==y)xoa_dau(l);

else

{if(l.ptail->data==y)xoa_cuoi(l);

else{ Node *p=l.phead->pnext; while(p)

{ if(p->data==y)

q=p->pnext; q=p->pnext; q->pprev=p->pprev; p->pprev->pnext=q; delete(p); p=q; continue;}

p=p->pnext;}

}}

192. Xây dựng giải thuật và viết hàm xóa phần tử lớn nhất

void xoa_max(List &l,int max){if(l.phead==NULL)

cout<<"ds rong"; else

{if(l.phead==l.ptail)l.phead=l.ptail=NULL;

else{if(l.phead->data==max)

xoa_dau(l); if(l.ptail->data==max)

xoa_cuoi(l); else

{ Node *p=l.phead->pnext; while(p)

{ if(p->data==max)

Node *q=p->pnext; q->pprev=p->pprev; p->pprev->pnext=q; delete(p); p=q;continue;}

p=p->pnext;}

}}

}

193. Xây dựng giải thuật và viết hàm xóa List

void xoa_LIST(List &l){

Node *k = l.phead;while(k!=NULL){

l.phead=k->pnext;k=l.phead;

}}

194. Xây dựng giải thuật và viết hàm đổi chỗ trực tiếp (interchange sort)

void inter_sort(List l){

for(Node *p=l.phead;p!=l.ptail;p=p->pnext){for(Node *k=p->pnext;k;k=k->pnext)

{if(p->data>k->data)hoanvi(p->data,k->data);

}}

}

195. Xây dựng giải thuật và viết hàm sắp xếp chọn trực tiếp (selection sort)

void selection_sort(List l){

for(Node *p=l.phead;p!=l.ptail;p=p->pnext){

Node *k=p;for(Node *q=p->pnext;q;q=q->pnext){

if(k->data>q->data)k=q;

}hoanvi(k->data,p->data);}

}

196. Xây dựng giải thuật và viết hàm sắp xếp nổi bọt(Bubble sort)

void bubble(List l){

Node *dau, *cuoi;for(dau=l.phead;dau!=l.ptail;dau=dau->pnext){

for(cuoi=l.ptail;cuoi!=dau;cuoi=cuoi->pprev){

if(cuoi->data < (cuoi->pprev)->data)hoanvi(cuoi->data,(cuoi->pprev)->data);

}

}}

197. Xây dựng giải thuật và viết hàm sắp xếp chèn trực tiếp (insertion sort)_

void insertion_sort(List l){

Node *pos;int x;for(Node *p=l.phead->pnext;p;p=p->pnext){

x = p->data; pos=p->pprev; while( (pos!= NULL) && (pos->data > x ) ){ x = pos->data;

pos=pos->pprev;}pos->data = x;

}

198. Xây dựng giải thuật và viết hàm sắp xếp phân hoạch nhanh (Quick sort)

void quick_sort(List &l){ List l1;List l2;

if(l.phead= =NULL) // rongreturn;

elsekhoi_tao(l1);khoi_tao(l2);Node *x=l.phead;l.phead=x->pnext;while(l.phead!=NULL){

Node *p=l.phead;l.phead=p->pnext;p->pnext=NULL;if(p->data <= x->data)

them_dau2(l1,p);else

them_dau2(l2,p);}

quick_sort(l1);quick_sort(l2);if(l1.phead==NULL)

l.phead=x;else{

l.phead = l1.phead;l1.ptail->pnext = x;

}x->pnext = l2.phead;

if(l2.phead==NULL)l.ptail = x;

else{

l.ptail = l2.ptail;}

}

199. Xây dựng giải thuật và viết hàm tổng danh sách

long tong_list(List l){

Node*k=l.phead;int tong = 0;for(k;k!=NULL;k=k->pnext){

tong+=k->data;}return tong;

}

200. Xây dựng giải thuật và viết hàm tổng các phần tử dương

long tong_duong(List l){

Node *pi=l.phead;int s = 0;for(pi;pi!=NULL;pi=pi->pnext){if(pi->data>0)

s+=pi->data;}return s;

}

201. Xây dựng giải thuật và viết hàm tổng các phần tử âm

long tong_am(List l){

Node *pi=l.phead;int s = 0;for(pi;pi!=NULL;pi=pi->pnext){if(pi->data<0)

s+=pi->data;}return s;

}

202. Xây dựng giải thuật và viết hàm tổng các phần tử lớn hơn pt liền trước nó

long tonglonlientruoc(List l){

int s=0;

for(Node *pi=l.phead->pnext;pi;pi=pi->pnext){if(pi->data > pi->pprev)

s+=pi->data}return s;

}

203. Xây dựng giải thuật và viết hàm tổng các phần tử lớn hơn trị tuyệt đối đứng liền sau nó

long ttd_liensau(List l){ int s=0; for(Node *p=l.phead;p;p=p->pnext)

{ if(p->data > abs(p->pnext) ) { s+=p->data; }}return s;

}

204. Xây dựng giải thuật và viết hàm trung bình cộng các số dương

long tbc_duong(List l){int s=0;int dem=0; for(Node *p=l.phead;p;p=p->pnext)

{if(p->data>0)s+=p->data;dem++;

}if(dem= =0){cout<<”\nKo co pt thoa y/c”; return 0;}

return s/dem;}

205. Xây dựng giải thuật và viết hàm trung bình cộng các số lớn hơn x

long tbc_lon_x(List l,int x){int s=0;int dem=0; for(Node *p=l.phead;p;p=p->pnext)

{if(p->data>x)s+=p->data;dem++;

}if(dem= =0){cout<<”\nKo co pt thoa y/c”; return 0;}

return s/dem;}

206. Xây dựng giải thuật và viết hàm tổng các pt lớn hơn pt xung quanh

long lonhonptxungquanh(List l,){int s=0; for(Node *p=l.phead;p;p=p->pnext)

{if(p= =l.phead && p->data > p->pnext)

s+ =p->data; if(p!=l.phead && p->data > p->pnext && p->data > p->pprev)

s+ =p->data; if(p=l.ptail && p->data>p->pprev)

s+ =p->data;}return s;

}

207. Xây dựng giải thuật và viết hàm đếm số chẳn

long dem_chan(List l){

int dem=0;for(Node *p=l.phead;p;p=p->pnext){

if(p->data%2==0)dem++;

}return dem;}

208. Xây dựng giải thuật và viết hàm đếm số lẻ

long dem_le(List l){

int dem=0;for(Node *p=l.phead;p;p=p->pnext){

if(p->data%2!=0)dem++;

}return dem;}

209. Xây dựng giải thuật và viết hàm đếm dương chia hết cho 7

long duongchia7(List l){

int dem=0;for(Node *p=l.phead;p;p=p->pnext){

if(p->data>0 && p->data%7==0){

dem++;}

}return dem;}

210. Xây dựng giải thuật và viết hàm đếm số lần xuất hiện của x

long demlanxuathien(List l,int x){

int dem=0;for(Node *p=l.phead;p;p=p->pnext){

if(p->data==x)dem++;

}return dem;

}

211. Xây dựng giải thuật và viết hàm đếm 2 pt kề nhau mà cả 2 trái dấu

long demketraidau(List l){

int dem=0;for(Node *p=l.phead;p;p=p->pnext){

if( (p->data) * (p->pnext) <0 )dem++;

}return dem;

}

212. Xây dựng giải thuật và viết hàm đếm pt lớn hơn hay nhỏ hơn pt xung quanh

long demlonnho(List l){int dem=0; for(Node *p=l.phead;p;p=p->pnext)

{if(p= =l.phead && p->data!=p->pnext)dem++;

if(p= =l.ptail && p->data!=p->pprev)dem++;

if((p->data>p->pnext && p->data>p->pprev) | | (p->data<p->pnext && p->data<p->pprev))

dem++;}return dem;

}

213. Xây dựng giải thuật và viết hàm đếm pt max

long dem_max(List l){int dem=0; Node *pmax=l.phead; for(pmax;pmax;pmax=pmax->pnext)

{for(p=pmax->pnext;p;p=p->pnext){if(pmax->data < p->data)

{pmax=p;dem++;}}

}return dem;}

214. Xây dựng giải thuật và viết hàm đếm pt kề nhau mà cà đều chẳn

long ke_chan(List l){int dem=0; for(Node *p=l.phead;p;p=p->pnext)

{if(p->data%2= =0 && p->pnext%2= =0)

dem++;}

return dem;}

215. Xây dựng giải thuật và viết hàm đếm số nguyên tố

int KTSNT(int n){

if(n<2) return 0;for(int i=2;i<=n/2;i++)

if(n%i= =0) return 0;return 1;

}int dem_so_ngto(List l){

Node *k=l.phead;int dem=0;for(k;k!=NULL;k=k->pnext){

if(KTSNT(k->data) = = 1)dem++;

}return dem;

}

216. Xây dựng giải thuật và viết hàm đếm số nút trong danh sách

int count_node(List l){

Node *k=l.phead;int count = 0;for(k;k!=NULL;k=k->pnext){

count++;}return count;

}

217. Kiểm tra danh sách có giá trị 0?

int kt0(List l){int flag=0;

for(Node *p=l.phead;p;p=p->pnext){

if(p->data= =0){flag=1; break;}

}return flag;

}

218. Kiểm tra danh sách có số chẳn hay ko?

int kt_chan(List l){

int flag=0;for(Node *p=l.phead;p;p=p->pnext){

if(p->data%2= =0){

flag=1;cout<<"\nDS CO GIA TRI CHAN";break;

}}if(flag= =0){cout<<"\nKO TIM THAY GTRI CHAN";}return flag;

}

219. Xây dựng giải thuật và viết hàm kiểm tra danh sách có tính chất lẻ(lẻ khi tổng 2 pt liên tiếp luôn lẻ)

int kt_chanle(List l){

int flag=1;for(Node *p=l.phead;p!=l.ptail;p=p->pnext){

if( (p->data+p->pnext->data)%2==0){

flag=0;cout<<"\nDS KO CO TINH CHAT LE";break;

}}if(flag= =1){cout<<"DS CO TC LE";}return flag;

}

220. Xây dựng giải thuật và viết hàm kiểm tra danh sách co tăng dần

int kt_tang(List l){

int flag=1;for(Node *p=l.phead;p!=l.ptail;p=p->pnext){

if(p->data>p->pnext->data){

flag=0;cout<<"\n DS CHUA TANG";break;

}}if(flag= =1){cout<<"\nDS DA DUOC SX TANG DAN";}return flag;

}

221. Xây dựng giải thuật và viết hàm kiểm tra phần tử trong danh sách có bằng nhau

int kt_bang(List l){

int flag=0;for(Node *p=l.phead;p;p=p->pnext){

for(Node *k=p->pnext;k;k=k->pnext){

if(p->data==k->data){

flag=1;cout<<"\nDS CO PT BANG NHAU";break;

}}

}if(flag= =0){cout<<"\nDS KO CO PT NAO BANG NHAU";}return flag;

}

222. Xây dựng giải thuật và viết hàm kiểm tra danh sách có giảm dần

int kt_giam(List l){

int flag=1;for(Node *p=l.phead;p!=l.ptail;p=p->pnext){

if(p->data<p->pnext->data){

flag=0;cout<<"\n DS CHUA TANG";break;

}}if(flag= =1){cout<<"\nDS DA DUOC SX TANG DAN";}return flag;

}

223. Xây dựng giải thuật và viết hàm đếm thỏa: lớn hơn các pt trước nó

int dem_kt(List l){int flag=1; for(Node *p=l.ptail;p!=l.phead;p=p->pprev){for(Node *k=p->pprev;k;k=k->pprev)

{if(p->data<k->data | | p->data = = k->data)flag=0;break;

}} if(flag= =1){cout<<”\n Co pt thoa y/c”; else cout<<”\nKhong thoa”;

return flag;}

224. Xây dựng giải thuật và viết hàm kiểm tra danh sách có 2 giá trị 0 liên tiếp ?

int kt0_lientiep(List l){int flag=0;

for(Node *p=l.phead;p!=l.ptail;p=p->pnext){

if(p->data= =0 && p->pnext->data = = 0){flag=1; break;}

}return flag;}

225. Xây dựng giải thuật và viết hàm kiểm tra danh sách có toàn sồ chẳn ?

int kt_toan_chan(List l){

int flag=1;for(Node *p=l.phead;p;p=p->pnext){

if(p->data%2 ! =0){

flag=0;break;

}}return flag;

}

226. Xây dựng giải thuật và viết hàm tìm pt chẳn max và lớn hơn pt lẻ max

int kiem_tra_chan(List l){

Node *p =l.phead; int dem=0;while(p){

if(p->data % 2==0)dem++;

p=p->pnext;}if( dem == 0)

return 0;return 1;

}int kiem_tra_le(List l){

Node *p =l.phead; int dem=0;while(p)

{if(p->data % 2!=0)

dem++;p=p->pnext;

}if( dem == 0)

return 0;return 1;

}Node* chanmax(List l){

int x;Node *p=l.phead;Node *maxx = getNode(x);if(kiem_tra_chan(l) == 0)

return NULL;else{

while(p){

if((p->data % 2 == 0) && (p->data > maxx->data))maxx=p;

p=p->pnext;}return maxx;

}}Node* lemax(List l){

int x;Node *p=l.phead; Node *maxx = getNode(x);if(kiem_tra_le(l) == 0)

return NULL;else{

while(p){

if((p->data % 2 != 0) && (p->data > maxx->data))maxx=p;

p=p->pnext;}return maxx;

}}void chanmax_max_minmax(List &l){

Node *chanm = chanmax(l);Node *lem = lemax(l);if(chanm->data < lem->data)

cout<<"Khong thoa y/c! So chan lon nhat la: "<<chanm->data<<" nho hon so le lon nhat la: "<<lem->data;

if(chanm->data > lem->data)cout<<"Thoa y/c! So chan lon nhat la: "<<chanm->data<<" va so le lon nhat

la: "<<lem->data;}

227. Xây dựng giải thuật và viết hàm tìm max

Node *tim_max(List l){

Node *pmax=l.phead;for(Node *pi=l.phead->pnext;pi!=NULL;pi=pi->pnext){

if(pi->data>pmax->data)pmax=pi;

}cout<<"Pt max la: "<<pmax->data;

return pmax;}

228. Xây dựng giải thuật và viết hàm tìm dương đầu tiên

Node *duong_dau(List l){

Node *pi=l.phead;for(pi;pi;pi=pi->pnext){

if(pi->data>0){

cout<<"\n Pt duong dau tien la: "<<pi->data;return pi;

}}cout<<"\nKO TIM THAY PT DUONG";

}

229. Xây dựng giải thuật và viết hàm tìm chẳn cuối cùng

Node *chan_cuoi(List l){

for(Node *pi=l.ptail;pi;pi=pi->pprev){

if(pi->data%2==0){

cout<<"\n Chan cuoi la: "<<pi->data;return pi;}

}cout<<"\n KO TIM THAY SO CHAN CUOI";}

230. Xây dựng giải thuật và viết hàm tìm chẳn đầu

Node *chan_dau(List l){

for(Node *pi=l.phead;pi;pi=pi->pnext){

if(pi->data%2==0){

cout<<"\n Chan dau la: "<<pi->data;return pi;}

}cout<<"\n KO TIM THAY SO CHAN DAU";}

231. Xây dựng giải thuật và viết hàm tìm dương min

Node *duong_min(List l){

Node *duongmin;for(duongmin=l.phead;duongmin;duongmin=duongmin->pnext){

if(duongmin->data>0){

break;}

}if(duongmin!=NULL){

for(Node *k=duongmin->pnext;k;k=k->pnext){

if( (k->data>0) && (duongmin->data>k->data) ){

duongmin=k;cout<<"\nDuong min:"<<duongmin->data;break;

}}return k;

}else cout<<"\n KO THAY PT DUONG MIN";}

232. Xây dựng giải thuật và viết hàm tìm min

Node *tim_min(List l){

Node *pmin=l.phead;for(Node *pi=l.phead->pnext;pi!=NULL;pi=pi->pnext){

if(pi->data<pmin->data)pmin=pi;

}cout<<"Pt min la: "<<pmin->data;

return pmin;}

233. Xây dựng giải thuật và viết hàm tìm âm đầu

Node *am_dau(List l){

Node *pi=l.phead;for(pi;pi;pi=pi->pnext)

{if(pi->data<0){

cout<<"\n Am dau la: "<<pi->data;return pi;}

}cout<<"\n KO TIM THAY PT AM DAU";}

IV: CÂY NHỊ PHÂN

234. Khai báo cây nhị phân

struct Tree{    int Data;    Tree *Left;    Tree *Right;};

235. Xây dựng giải thuật và viết hàm tạo cây nhị phân tìm kiếm

void InsertNode(Tree* &T,int d)//Tao Cay Nhi Phan Tim Kiem{    if(T!=NULL)    {        if(T->Data==d)            return;        if(T->Data>d)            InsertNode(T->Left,d);        if(T->Data<d)            InsertNode(T->Right,d);    }    else    {                T=new Tree;        T->Data=d;        T->Left=NULL;        T->Right=NULL;        return;    }    }

236. Xây dựng giải thuật và viết hàm duyệt cây nhị phân

void Left_Node_Right(Tree* T)//In Kieu LNR;{    if(T!=NULL)    {        Left_Node_Right(T->Left);        printf("%5d",T->Data);        Left_Node_Right(T->Right);    }}

237. Xây dựng giải thuật và viết hàm duyệt cây nhị phân

void Get_Tree(Tree* &T)//Nhap Cay Nhi phan Tim Kiem{    int i,d=10,x;    printf("\nNhap so phan tu cua mot cay : ");

    scanf("%d",&d);    for(i=0;i<d;i++)    {        printf("Nhap phan tu thu %d = ",i+1);        scanf("%d",&x);        InsertNode(T,x);    }

    }

238. Xây dựng giải thuật và viết hàm đếm số nút của cây

int Count_Node(Tree* T)//dem so nut{    static int dem=0;    if(T!=NULL)    {        Count_Node(T->Left);        dem++;        Count_Node(T->Right);    }    return dem;}

239. Xây dựng giải thuật và viết hàm đếm số nút có giá trị dương có trong cây

240. Xây dựng giải thuật và viết hàm tìm phần tử có giá trị lớn nhất trong cây

241. Xây dựng giải thuật và viết hàm đếm số nút lá

int Count_Leaf_Node(Tree* T)//Dem so nut la{    static int dem=0;    if(T!=NULL)    {        Count_Leaf_Node(T->Left);        if(T->Left==NULL&&T->Right==NULL)        dem++;        Count_Leaf_Node(T->Right);    }    return dem;}

242. Xây dựng giải thuật và viết hàm đếm số nút có một cây con trái

int Count_Left_Node(Tree* T)//Dem so nut co mot cay con trai{    static int dem=0;    if(T!=NULL)    {        Count_Left_Node(T->Left);        if(T->Left!=NULL)

        dem++;        Count_Left_Node(T->Right);    }    return dem;}

243. Xây dựng giải thuật và viết hàm đếm số nút có một cây con

int Count_One_Node(Tree* T)//Dem so nut co mot cay con{    static int dem=0;    if(T!=NULL)    {        Count_One_Node(T->Left);        if(T->Left!=NULL&&T->Right==NULL||T->Left==NULL&&T->Right!=NULL)        dem++;        Count_One_Node(T->Right);    }    return dem;}

244. Xây dựng giải thuật và viết hàm đếm độ sâu

int Count_Depth(Tree *T,int dem=0)//Dem do sau{    static int max=0;    if(T!=NULL)    {        Count_Depth(T->Left,++dem);        dem--;        Count_Depth(T->Right,++dem);        dem--;    }    else    {        if(dem>max)            max=dem;    }        return max;}

245. Xây dựng giải thuật và viết hàm hủy một nút có khóa là X trong cây nhị phân

246. Xây dựng giải thuật và viết hàm tính tổng các nút trong cây

247. Xây dựng giải thuật và viết hàm tính tổng các nút là trong cây

248. Xây dựng giải thuật và viết hàm tính tổng các nút có một nút con

249. Xây dựng giải thuật và viết hàm tính tổng các nút có đúng hai nút con

250. Xây dựng giải thuật và viết hàm tính tổng các nút có giá trị lẽ

251. Xây dựng giải thuật và viết hàm tìm giá trị lớn nhất trong cây

252. Xây dựng giải thuật và viết hàm tìm giá trị âm lớn nhất trong cây

1. Xây dựng giải thuật và viết hàm nhập mảng bằng tay.........................................1

2. Xây dựng giải thuật và viết hàm nhập mảng ngẫu nhiên.....................................1

3. Xây dựng giải thuật và viết hàm nhập mảng đệ quy............................................1

4. Xây dựng giải thuật và viết hàm xuất mảng..........................................................1

5. Xây dựng giải thuật và viết hàm tìm giá trị lớn nhất trong mảng một chiều n số nguyên............................................................................................................................1

6. Xây dựng giải thuật và viết hàm tìm giá trị dương đầu tiên trong mảng, không có trả về 0............................................................................................................................2

7. Xây dựng giải thuật và viết hàm tìm số chẵn cuối cùng trong mảng, không có thì trả về 0...........................................................................................................................2

8. Xây dựng giải thuật và viết hàm tìm vị trí của phần tử nhỏ nhất trong mảng. .2

9. Xây dựng giải thuật và viết hàm tìm vị trí của giá trị chẵn đầu tiên trong mảng, không có thì trả về 0...............................................................................................2

10. Xây dựng giải thuật và viết hàm tìm vị trí số hoàn thiện cuối cùng trong mảng, không có trả về 0................................................................................................................3

11. Xây dựng giải thuật và viết hàm tìm vị trí dương nhỏ nhất trong mảng, không có trả về 0............................................................................................................................3

12. Xây dựng giải thuật và viết hàm tìm số nguyên tố đầu tiên trong mảng, không có trả về 0............................................................................................................................3

13. Xây dựng giải thuật và viết hàm tìm số nguyên tố lớn nhất trong mảng, không có trả về 0............................................................................................................................4

14. Xây dựng giải thuật và viết hàm tìm số hoàn thiện cuối cùng trong mảng, không có trả về 0................................................................................................................5

15. Xây dựng giải thuật và viết hàm tìm số hoàn thiện nhỏ nhất trong mảng, không có trả về 0............................................................................................................................5

16. Xây dựng giải thuật và viết hàm tìm giá trị chẵn nhỏ nhất trong mảng, không có trả về 0............................................................................................................................6

17. Xây dựng giải thuật và viết hàm tìm vị trí có giá trị âm lớn nhất trong mảng, không có thì trả về -1.........................................................................................................6

18. Xây dựng giải thuật và viết hàm tìm những phần tử trong mảng xa giá trị x nhất......................................................................................................................................6

19. Xây dựng giải thuật và viết hàm tìm vị trí trong mảng mà giá trị tại đó gần x nhất......................................................................................................................................7

20. Xây dựng giải thuật và viết hàm tìm đoạn [a,b] sao cho đoạn này chứa tất cả các giá trị trong mảng........................................................................................................7

21. Xây dựng giải thuật và viết hàm tìm trong mảng giá trị đầu tiên lớn hơn 2010, không có trả về 0................................................................................................................7

22. Xây dựng giải thuật và viết hàm tìm trong mảng giá trị đầu tiên nằm trong khoảng (X,Y) cho trước, không có thì trả về X...............................................................8

23. Xây dựng giải thuật và viết hàm tìm số chính phương đầu tiên trong mảng, không có thì trả về 0..........................................................................................................8

24. Xây dựng giải thuật và viết hàm tìm một vị trí của phần tử đầu tiên có giá trị bằng tích hai phần tử lân cận, nếu mảng không tồn tại phần tử thỏa điều kiện trên thì trả về 0...........................................................................................................................8

25. Xây dựng giải thuật và viết hàm tìm giá trị đầu tiên trong mảng thỏa tính chất số gánh không có thì trả về 0 ( ví dụ: 12321)...................................................................8

26. Xây dựng giải thuật và viết hàm tìm giá trị đầu tiên có chữ số đầu tiên là chữ số lẻ trong mảng, không có thì trả về 0 ( ví dụ: 110).......................................................9

27. Xây dựng giải thuật và viết hàm tìm giá trị lớn nhất toàn chữ số lẻ so với những số cùng thỏa điều kiện trong mảng, không có thì trả về 0.................................9

28. Xây dựng giải thuật và viết hàm tìm giá trị lớn nhất trong mảng có dạng 2^k, so với những số cùng thỏa điều kiện, nếu mảng không có phần tử dạng 2^k thì trả về 0. 10

29. Xây dựng giải thuật và viết hàm tìm số chẵn lớn nhất, nhỏ hơn mọi giá trị lẻ có trong mảng một chiều n số nguyên, nếu mảng chỉ chứa các phần tử lẻ hoặc chẵn thì return 0.............................................................................................................................11

30. Xây dựng giải thuật và viết hàm tìm số nguyên tố nhỏ nhất, lớn hơn mọi giá trị có trong mảng...................................................................................................................11

31. Xây dựng giải thuật và viết hàm liệt kê các phần tử thuộc đoạn [x,y] cho trước trong mảng........................................................................................................................11

32. Xây dựng giải thuật và viết hàm liệt kê các số trong mảng một chiều thỏa điều kiện: lớn hơn trị tuyệt đối của số đứng liền sau nó.......................................................12

33. Xây dựng giải thuật và viết hàm tính tổng các phần tử trong mảng một chiều n số nguyên..........................................................................................................................12

34. Xây dựng giải thuật và viết hàm tính tổng các phần tử dương trong mảng......12

35. Xây dựng giải thuật và viết hàm tính tổng các phần tử có chữ số đầu là lẻ trong mảng, vd: 15, 30, .............................................................................................................13

36. Xây dựng giải thuật và viết hàm tính tổng các phần tử có chữ số hàng chục là 5 trong mảng........................................................................................................................13

37. Xây dựng giải thuật và viết hàm tính tổng các phần tử lớn hơn phần tử đứng liền trước nó trong mảng.................................................................................................14

38. Xây dựng giải thuật và viết hàm tính tổng các phần tử lớn hơn giá trị tuyệt đối của phần tử đứng liền sau nó..........................................................................................14

39. Xây dựng giải thuật và viết hàm tính tổng các phần tử lớn hơn phần tử xung quanh trong mảng............................................................................................................14

40. Xây dựng giải thuật và viết hàm tính tổng các phần tử cực trị trong mảng. Phần tử cực trị là phần tử lớn hơn hoặc nhỏ hơn hai phần tử xung quanh...............14

41. Xây dựng giải thuật và viết hàm tính tổng các phần tử là số chính phương trong mảng........................................................................................................................15

42. Xây dựng giải thuật và viết hàm tính tổng các phần tử là số đối xứng trong mảng, vd:12321( số gánh )...............................................................................................15

43. Xây dựng giải thuật và viết hàm tính tổng các phần tử có chữ số đầu là chẵn trong mảng........................................................................................................................16

44. Xây dựng giải thuật và viết hàm tính trung bình cộng các phần tử dương trong mảng..................................................................................................................................16

45. Xây dựng giải thuật và viết hàm tính trung bình cộng các số nguyên tố trong mảng..................................................................................................................................16

46. Xây dựng giải thuật và viết hàm tính trung bình cộng các phần tử trong mảng lớn hơn x...........................................................................................................................17

47. Xây dựng giải thuật và viết hàm tính khoảng cách trung bình giữa các phần tử trong mảng........................................................................................................................17

48. Xây dựng giải thuật và viết hàm đếm số lượng phần tử chẵn có trong mảng một chiều n số nguyên.....................................................................................................17

49. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử dương chia hết cho 7 trong mảng.....................................................................................................................18

50. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử thỏa tính chất số gánh ( số đối xứng ) trong mảng.....................................................................................18

51. Xây dựng giải thuật và viết hàm đếm số lần xuất hiện của giá trị X trong mảng.18

52. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử có chữ số tận cùng bằng 5 trong mảng...........................................................................................................19

53. Xây dựng giải thuật và viết hàm cho biết sự tương quan giữa số lượng chẵn và lẻ trong mảng, hàm trả về một trong ba giá trị: -1, 0, 1. -1 là lẻ nhiều hơn chẵn; 0 là chẵn bằng lẻ; 1 là chẵn nhiều hơn lẻ..............................................................................19

54. Xây dựng giải thuật và viết hàm đếm phần tử cùng lớn hơn hoặc nhỏ hơn các phần tử xung quanh trong mảng ( đếm phần tử cực trị )............................................19

55. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử là số nguyên tố trong mảng........................................................................................................................20

56. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử là số hoàn thiện trong mảng........................................................................................................................20

57. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử lớn nhất trong mảng..................................................................................................................................21

58. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử kề nhau mà cả hai đều là chẵn (kề trước hoặc kề sau và chẵn)...................................................................21

59. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử kề nhau mà cả hai trái dấu nhau ( kề trước hoặc kề sau và trái dấu)........................................................21

60. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử kề nhau, mà số đứng trước cùng dấu với số đứng sau và có giá trị tuyệt đối nhỏ hơn trị tuyệt đối của số đứng sau.......................................................................................................................21

61. Xây dựng giải thuật và viết hàm đếm số lượng các phần tử có giá trị phân biệt trong mảng........................................................................................................................22

62. Xây dựng giải thuật và viết hàm liệt kê tần suất xuất hiện của các phần tử trong mảng, mỗi phần tử liệt kê một lần.......................................................................22

63. Xây dựng giải thuật và viết hàm liệt kê các phần tử chỉ xuất hiện đúng một lần trong mảng........................................................................................................................22

64. Xây dựng giải thuật và viết hàm liệt kê các phần tử xuất hiện quá một lần trong mảng, mỗi phần tử liệt kê một lần.......................................................................23

65. Cho hai mảng a, b. Xây dựng giải thuật và viết hàm đếm số lượng phần tử chỉ xuất hiện một trong hai mảng.........................................................................................24

66. Cho hai mảng a, b. Xây dựng giải thuật và viết hàm cho biết số lần xuất hiện của mảng a trong mảng b................................................................................................24

67. Xây dựng giải thuật và viết hàm tìm một giá trị có số lần xuất hiện nhiều nhất trong mảng........................................................................................................................24

68. Xây dựng giải thuật và viết hàm đếm số lượng phần tử nguyên tố phân biêt trong mảng........................................................................................................................25

69. Xây dựng giải thuật và viết hàm kiểm tra mảng có phần tử chẵn hay không? có trả về 1, không có trả về 0..............................................................................................26

70. Xây dựng giải thuật và viết hàm kiểm tra mảng có tồn tại hai phần tử kề nhau, không mang giá trị liên tiếp............................................................................................26

71. Xây dựng giải thuật và viết hàm kiểm tra mảng có số nguyên tố hay không? có trả về 1, không có trả về 0..............................................................................................26

72. Xây dựng giải thuật và viết hàm kiểm tra mảng có thỏa tính chất: không có số hoàn thiện lớn hơn 256. Thỏa trả về 1, không thỏa trả về 0........................................27

73. Xây dựng giải thuật và viết hàm kiểm tra mảng có toàn số chẵn hay không? có trả về 1, không có trả về 0...............................................................................................27

74. Xây dựng giải thuật và viết hàm kiểm tra mảng có đối xứng không? có trả về 1, không có trả về 0..............................................................................................................28

75. Xây dựng giải thuật và viết hàm kiểm tra mảng có tính chẵn lẻ không? có trả về 1, không trả về 0. Mảng có tính chẵn lẻ là mảng có tổng hai phần tử liên tiếp luôn là lẻ. 28

76. Xây dựng giải thuật và viết hàm kiểm tra mảng có tăng dần hay không? tăng trả về 1, không tăng trả về 0..........................................................................................28

77. Xây dựng giải thuật và viết hàm kiểm tra các phần tử trong mảng có lập thành cấp số cộng hay không? Nếu có chỉ ra công sai d, nếu không trả về 0........................28

78. Xây dựng giải thuật và viết hàm kiểm tra các phần tử trong mảng có bằng nhau không? bằng nhau trả về 1, không bằng nhau trả về 0......................................29

79. Xây dựng giải thuật và viết hàm kiểm tra mảng có dạng sóng hay không? có trả về 1, không trả về 0. Một mảng có dạng sóng là mảng có các phần tử thứ i lớn hơn hoặc nhỏ hơn hai phần tử xung quanh...................................................................29

80. Hãy cho biết tất cả các phần tử trong mảng a có nằm trong mảng b không? có trả về 1, không có trả về 0...............................................................................................29

81. Xây dựng giải thuật và viết hàm đếm giá trị trong mảng thỏa điều kiện: lớn hơn tất cả các giá trị đứng trước nó...............................................................................30

82. Xây dựng giải thuật và viết hàm sắp xếp mảng một chiều n số nguyên theo thứ tự tăng dần........................................................................................................................30

83. Xây dựng giải thuật và viết hàm sắp xếp phần tử lẻ tăng dần, các phần tử khác giữ nguyên vị trí...............................................................................................................30

84. Xây dựng giải thuật và viết hàm sắp xếp số nguyên tố tăng dần, các phần tử khác giữ nguyên vị trí......................................................................................................31

85. Xây dựng giải thuật và viết hàm sắp xếp số hoàn thiện giảm dần, các phần tử khác giữ nguyên vị trí......................................................................................................31

86. Cho hai mảng a, b. Xây dựng giải thuật và viết hàm cho biết mảng b có phải là hoán vị của mảng a hay không.......................................................................................32

87. Xây dựng giải thuật và viết hàm sắp xếp các số dương tăng dần, các số âm giữ nguyên vị trí......................................................................................................................32

88. Xây dựng giải thuật và viết hàm sắp xếp chẵn, lẻ tăng dần nhưng giữ vị trí tương đối giữa các phần tử chẵn và lẻ...........................................................................33

89. Xây dựng giải thuật và viết hàm sắp xếp số dương tăng dần, số âm giảm dần, vị trí tương đối không thay đổi...........................................................................................33

90. Cho hai mảng a, b. Xây dựng giải thuật và viết hàm trộn hai mảng thành một mảng giảm dần.................................................................................................................33

91. Xây dựng giải thuật và viết hàm thêm một phần tử x vào vị trí k trong mảng một chiều n số nguyên.....................................................................................................34

92. Xây dựng giải thuật và viết hàm thêm phần tử x vào trong mảng tăng nhưng vẫn giữ nguyên tính tăng của mảng...............................................................................34

93. Xây dựng giải thuật và viết hàm thêm phần tử x vào sau phần tử là số nguyên tố đầu tiên trong mảng, nếu không có phần tử nguyên tố thì thêm vào cuối mảng.. 34

94. Xây dựng giải thuật và viết hàm xóa phần tử có chỉ số k trong mảng một chiều n số nguyên.......................................................................................................................35

95. Hãy xóa tất cả các phần tử lớn nhất trong mảng.................................................35

96. Xây dựng giải thuật và viết hàm xóa tất cả các số chẵn trong mảng.................36

97. Xây dựng giải thuật và viết hàm xóa tất cả các số chính phương trong mảng..36

98. Xây dựng giải thuật và viết hàm xóa tất cả các số trùng với x trong mảng.......36

99. Xây dựng giải thuật và viết hàm xóa tất cả các số nguyên tố trong mảng.........37

100. Xây dựng giải thuật và viết hàm xóa tất cả các phần tử trùng nhau trong mảng và chỉ giữ lại duy nhất một phần tử...............................................................................37

101. Xây dựng giải thuật và viết hàm xóa tất cả các phần tử xuất hiện nhiều hơn một lần trong mảng..........................................................................................................37

102. Xây dựng giải thuật và viết hàm đưa số 1 về đầu mảng......................................38

103. Xây dựng giải thuật và viết hàm đưa chẵn về đầu, lẻ về cuối, phần tử 0 nằm giữa mảng.........................................................................................................................38

104. Xây dựng giải thuật và viết hàm đưa các số chia hết cho 3 về đầu mảng..........39

105. Xây dựng giải thuật và viết hàm đảo ngược mảng ban đầu................................39

106. Xây dựng giải thuật và viết hàm đảo ngược thứ tự các số chẵn trong mảng....39

107. Xây dựng giải thuật và viết hàm dịch trái các phần tử trong mảng..................39

108. Xây dựng giải thuật và viết hàm xuất mảng: chẵn nằm 1 hàng, lẻ nằm hàng tiếp theo.............................................................................................................................40

109. Xây dựng giải thuật và viết hàm đảo thứ tự số chẵn, lẻ trong mảng nhưng vẫn giữ vị trí tương đối...........................................................................................................40

110. Xây dựng giải thuật và viết hàm biến đổi mảng bằng cách thay giá trị max = giá trị min và ngược lại....................................................................................................40

111. Xây dựng giải thuật và viết hàm liệt kê tất cả các mảng con có độ dài hơn 2 phần tử..............................................................................................................................41

112. Xây dựng giải thuật và viết hàm liệt kê tất cả các mảng con tăng dần trong mảng..................................................................................................................................42

113. Xây dựng giải thuật và viết hàm liệt kê tất cả mảng con tăng và có chứa giá trị lớn nhất trong mảng........................................................................................................42

114. Xây dựng giải thuật và viết hàm liêt kê tất cả mảng con tăng và tính tổng cho từng mảng con đó.............................................................................................................43

115. Xây dựng giải thuật và viết hàm đếm số mảng con tăng trong mảng ban đầu. 44

116. Xây dựng giải thuật và viết hàm liệt kê tất cả mảng con toàn dương và có độ dài hơn 1...........................................................................................................................45

117. Xây dựng giải thuật và viết hàm tìm mảng con toàn dương có tổng lớn nhất.. 46

118. Cấu trúc dữ liệu.......................................................................................................48

119. Xây dựng giải thuật và viết hàm xóa phần tử đầu...............................................48

120. Xây dựng giải thuật và viết hàm xóa phần tử cuối..............................................48

121. Xây dựng giải thuật và viết hàm xóa một phần tử đứng sau một phần tử x:....48

122. Xây dựng giải thuật và viết hàm xóa một phần tử đứng trước một phần tử x: 49

123. Xây dựng giải thuật và viết hàm xóa toàn bộ danh sách:....................................49

124. Xây dựng giải thuật và viết hàm xóa một phần tử x:..........................................50

125. Xây dựng giải thuật và viết hàm xóa phần tử nhỏ nhất trong danh sách:........50

126. Xây dựng giải thuật và viết hàm xóa hai phần tử trước và sau X:.....................50

127. Xây dựng giải thuật và viết hàm liệt kê các số âm trong danh sách:.................50

128. Xây dựng giải thuật và viết hàm tìm phần tử có giá trị max trong danh sách: 50

129. Xây dựng giải thuật và viết hàm tìm phần tử có giá trị min trong danh sách:. 51

130. Xây dựng giải thuật và viết hàm tìm phần tử chẵn đầu trong danh sách:........51

131. Xây dựng giải thuật và viết hàm tìm phần tử lẽ cuối cùng trong danh sách:....51

132. Xây dựng giải thuật và viết hàm tìm phần tử chẵn max lớn hơn lẽ max:.........52

133. Xây dựng giải thuật và viết hàm đếm nguyên tố trong danh sách.....................52

134. Xây dựng giải thuật và viết hàm đếm số node......................................................52

135. Xây dựng giải thuật và viết hàm đếm số phần tử chẵn:......................................52

136. Xây dựng giải thuật và viết hàm đếm phần tử lẻ:................................................53

137. Xây dựng giải thuật và viết hàm đếm số phần tử chia hết cho 2:.......................53

138. Xây dựng giải thuật và viết hàm đếm số phần tử dương:...................................53

139. Xây dựng giải thuật và viết hàm tìm các số chắn trong danh sách....................54

140. Xây dựng giải thuật và viết hàm in ra các số chẵn..............................................54

141. Xây dựng giải thuật và viết hàm tìm các số lẽ trong danh sách..........................54

142. Xây dựng giải thuật và viết hàm in ra các số lẽ....................................................54

143. Xây dựng giải thuật và viết hàm tìm các số nguyên tố trong danh sách:..........55

144. Xây dựng giải thuật và viết hàm in ra các số nguyên tố......................................55

145. Xây dựng giải thuật và viết hàm tìm các số chia hết cho 2:................................55

146. Xây dựng giải thuật và viết hàm in ra các số chẵn..............................................56

147. Xây dựng giải thuật và viết hàm đổi chổ trực tiếp –Interchange Sort:.............56

148. Xây dựng giải thuật và viết hàm sắp xếp “chọn trực tiếp –Selection Sort”......56

149. Xây dựng giải thuật và viết hàm sắp xếp “chèn trực tiêp –Insertion Sort”......57

150. Xây dựng giải thuật và viết hàm sắp xếp “dựa trên phân hoạch- Quick Sort” 57

151. Xây dựng giải thuật và viết hàm sắp xếp “nổi bọt –Buble”................................58

152. Xây dựng giải thuật và viết hàm thêm vào đầu danh sách..................................58

153. Xây dựng giải thuật và viết hàm thêm vào cuối danh sách.................................58

154. Xây dựng giải thuật và viết hàm thêm vào danh sách sau một phần tử x.........59

155. Xây dựng giải thuật và viết hàm thêm vào danh sách trước một phần tử x.....59

156. Xây dựng giải thuật và viết hàm thêm phần tử x trước chẵn đầu......................60

157. Xây dựng giải thuật và viết hàm thêm phần tử x sau lẽ cuối..............................60

158. Xây dựng giải thuật và viết hàm tạo một danh sách liên kết:.............................60

159. Xây dựng giải thuật và viết hàm in số nguyên tố trong danh sách.....................61

160. Xây dựng giải thuật và viết hàm xuất các số nguyên trong danh sách..............61

161. Xây dựng giải thuật và viết hàm xuất phần tử âm đầu tiên trong danh sách...61

162. Xây dựng giải thuật và viết hàm tạo danh sách random có sắp xếp..................62

163. Xây dựng giải thuật và viết hàm tạo một node mới:............................................62

164. Xây dựng giải thuật và viết hàm nhập một số nguyên vào danh sách:..............62

165. Xây dựng giải thuật và viết hàm duyệt qua các nút trong một danh sách:.......63

166. Xây dựng giải thuật và viết hàm tìm kiếm một phần tử X trong danh sách:....63

167. Xây dựng giải thuật và viết hàm sao chép danh sách thành môt danh sách và sắp sếp:..............................................................................................................................63

168. Xây dựng giải thuật và viết hàm đảo ngược danh sách:.....................................63

169. Xây dựng giải thuật và viết hàm cộng liên tiếp hai phần tử trong danh sách:..63

170. Xây dựng giải thuật và viết hàm tách danh sách:................................................63

171. Xây dựng giải thuật và viết hàm nối hai danh sách:............................................64

172. Khai báo cấu trúc dữ liệu của một danh sách liên kết đơn tổng quát................65

173. Xây dựng giải thuật và viết hàm khởi tạo danh sách liên kết đơn....................65

174. Xây dựng giải thuật và viết hàm định nghĩa danh sách liên kết.........................65

175. Xây dựng giải thuật và viết hàm tạo nút danh sách liên kết đơn......................65

176. Xây dựng giải thuật và viết hàm tạo danh sách ngẫu nhiên...............................65

177. Nhập bằng tay..........................................................................................................66

178. Xây dựng giải thuật và viết hàm duyệt danh sách liên kết.................................66

179. Xây dựng giải thuật và viết hàm đếm số lượng node trong danh sách liên kết đơn 66

180. Xây dựng giải thuật và viết hàm đếm số lượng node có giá trị âm...................66

181. Xây dựng giải thuật và viết hàm kiểm tra danh sách liên kết tồn tại node có giá trị dương hay không?................................................................................................66

182. Chèn 1 pt vào đầu ds...............................................................................................66

183. Xây dựng giải thuật và viết hàm chèn phần tử vào cuối danh sách...................67

184. Xây dựng giải thuật và viết hàm thêm 1 nút vào sau pt có giá trị là y...............67

185. Xây dựng giải thuật và viết hàm thêm 1 nút vào trước phần tử có giá trị y.....68

186. Xây dựng giải thuật và viết hàm thêm 1 nút vào trước chẳn đầu......................68

187. Xây dựng giải thuật và viết hàm xóa đầu.............................................................69

188. Xây dựng giải thuật và viết hàm xóa cuối.............................................................69

189. Xây dựng giải thuật và viết hàm xóa 1 nút trước pt có giá trị y.........................69

190. Xây dựng giải thuật và viết hàm xóa 1 nút sau pt có giá trị y.............................70

191. Xây dựng giải thuật và viết hàm xóa phần tử x...................................................70

192. Xây dựng giải thuật và viết hàm xóa phần tử lớn nhất.......................................71

193. Xây dựng giải thuật và viết hàm xóa List.............................................................72

194. Xây dựng giải thuật và viết hàm đổi chỗ trực tiếp (interchange sort)...............72

195. Xây dựng giải thuật và viết hàm sắp xếp chọn trực tiếp (selection sort)...........72

196. Xây dựng giải thuật và viết hàm sắp xếp nổi bọt(Bubble sort)...........................72

197. Xây dựng giải thuật và viết hàm sắp xếp chèn trực tiếp (insertion sort)_.........73

198. Xây dựng giải thuật và viết hàm sắp xếp phân hoạch nhanh (Quick sort)........73

199. Xây dựng giải thuật và viết hàm tổng danh sách.................................................74

200. Xây dựng giải thuật và viết hàm tổng các phần tử dương..................................74

201. Xây dựng giải thuật và viết hàm tổng các phần tử âm........................................74

202. Xây dựng giải thuật và viết hàm tổng các phần tử lớn hơn pt liền trước nó.....74

203. Xây dựng giải thuật và viết hàm tổng các phần tử lớn hơn trị tuyệt đối đứng liền sau nó.........................................................................................................................75

204. Xây dựng giải thuật và viết hàm trung bình cộng các số dương........................75

205. Xây dựng giải thuật và viết hàm trung bình cộng các số lớn hơn x...................75

206. Xây dựng giải thuật và viết hàm tổng các pt lớn hơn pt xung quanh................75

207. Xây dựng giải thuật và viết hàm đếm số chẳn......................................................76

208. Xây dựng giải thuật và viết hàm đếm số lẻ...........................................................76

209. Xây dựng giải thuật và viết hàm đếm dương chia hết cho 7...............................76

210. Xây dựng giải thuật và viết hàm đếm số lần xuất hiện của x..............................76

211. Xây dựng giải thuật và viết hàm đếm 2 pt kề nhau mà cả 2 trái dấu.................77

212. Xây dựng giải thuật và viết hàm đếm pt lớn hơn hay nhỏ hơn pt xung quanh.77

213. Xây dựng giải thuật và viết hàm đếm pt max.......................................................77

214. Xây dựng giải thuật và viết hàm đếm pt kề nhau mà cà đều chẳn.....................77

215. Xây dựng giải thuật và viết hàm đếm số nguyên tố.............................................78

216. Xây dựng giải thuật và viết hàm đếm số nút trong danh sách............................78

217. Kiểm tra danh sách có giá trị 0?............................................................................78

218. Kiểm tra danh sách có số chẳn hay ko?................................................................79

219. Xây dựng giải thuật và viết hàm kiểm tra danh sách có tính chất lẻ(lẻ khi tổng 2 pt liên tiếp luôn lẻ)........................................................................................................79

220. Xây dựng giải thuật và viết hàm kiểm tra danh sách co tăng dần.....................79

221. Xây dựng giải thuật và viết hàm kiểm tra phần tử trong danh sách có bằng nhau80

222. Xây dựng giải thuật và viết hàm kiểm tra danh sách có giảm dần....................80

223. Xây dựng giải thuật và viết hàm đếm thỏa: lớn hơn các pt trước nó.................80

224. Xây dựng giải thuật và viết hàm kiểm tra danh sách có 2 giá trị 0 liên tiếp ?. .81

225. Xây dựng giải thuật và viết hàm kiểm tra danh sách có toàn sồ chẳn ?............81

226. Xây dựng giải thuật và viết hàm tìm pt chẳn max và lớn hơn pt lẻ max...........81

227. Xây dựng giải thuật và viết hàm tìm max.............................................................83

228. Xây dựng giải thuật và viết hàm tìm dương đầu tiên..........................................83

229. Xây dựng giải thuật và viết hàm tìm chẳn cuối cùng...........................................83

230. Xây dựng giải thuật và viết hàm tìm chẳn đầu....................................................83

231. Xây dựng giải thuật và viết hàm tìm dương min.................................................84

232. Xây dựng giải thuật và viết hàm tìm min.............................................................84

233. Xây dựng giải thuật và viết hàm tìm âm đầu.......................................................84

234. Khai báo cây nhị phân............................................................................................86

235. Xây dựng giải thuật và viết hàm tạo cây nhị phân tìm kiếm..............................86

236. Xây dựng giải thuật và viết hàm duyệt cây nhị phân..........................................86

237. Xây dựng giải thuật và viết hàm duyệt cây nhị phân..........................................86

238. Xây dựng giải thuật và viết hàm đếm số nút của cây..........................................87

239. Xây dựng giải thuật và viết hàm đếm số nút có giá trị dương có trong cây......87

240. Xây dựng giải thuật và viết hàm tìm phần tử có giá trị lớn nhất trong cây......87

241. Xây dựng giải thuật và viết hàm đếm số nút lá....................................................87

242. Xây dựng giải thuật và viết hàm đếm số nút có một cây con trái.......................87

243. Xây dựng giải thuật và viết hàm đếm số nút có một cây con..............................88

244. Xây dựng giải thuật và viết hàm đếm độ sâu........................................................88

245. Xây dựng giải thuật và viết hàm hủy một nút có khóa là X trong cây nhị phân89

246. Xây dựng giải thuật và viết hàm tính tổng các nút trong cây.............................89

247. Xây dựng giải thuật và viết hàm tính tổng các nút là trong cây.........................89

248. Xây dựng giải thuật và viết hàm tính tổng các nút có một nút con....................89

249. Xây dựng giải thuật và viết hàm tính tổng các nút có đúng hai nút con............89

250. Xây dựng giải thuật và viết hàm tính tổng các nút có giá trị lẽ..........................89

251. Xây dựng giải thuật và viết hàm tìm giá trị lớn nhất trong cây.........................89

252. Xây dựng giải thuật và viết hàm tìm giá trị âm lớn nhất trong cây...................89