Ở đây chúng ta có hình ảnh ý tưởng thay đổi giá trị Liên kết con trỏ cho việc sắp xếp.
Click vào hình ảnh để lấy hình ảnh lớn

Tên:		ChangeNode1.png
Lần xem:	0
Size:		32.6 KB
ID:		72963
Có rất nhiều thuật toán giải thuật để Sắp xếp và ở đây mình chọn thuật toán Chọn Sắp Xếp.
Đầu tiên dĩ nhiên là phải duyệt Danh sách và duyệt từng phần tử bên trong nó.
Mình sẽ sử dụng 1 vòng lặp For để duyệt từ đầu đến cuối.
Sau đó sẽ dùng 1 vòng lặp For nữa để duyệt từ vị trí thứ 2 đến cuối
Mình sẽ thực hiện so sánh giá trị phần tử số nguyên bên trong vòng lặp thứ 2 này
Click vào hình ảnh để lấy hình ảnh lớn

Tên:		ChangeNode2.png
Lần xem:	0
Size:		31.8 KB
ID:		72964
Câu hỏi đặt ra là làm thế nào để thay đổi con trỏ để nó trỏ đến nơi mà mình muốn? Rất mong nhận được những đóng góp chia sẻ của các anh chị đi trước ạ. Sau nhiều ngày em tìm khắp trên mạng thì mọi hướng dẫn rất là mơ hồ và các đoạn code đều không chạy được.
Và Dưới Đây Là FULL Code chưa có giải pháp thay đổi con Trỏ.
Code:
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
struct CAUTRUC{
	int songuyen;
	CAUTRUC *gautruc;
};
typedef struct CAUTRUC *ct;
ct DSRong(){
	ct ds=NULL; return ds;
}
ct NutMoi(int &x){
	ct nut=(ct)malloc(sizeof(ct));
	nut->songuyen=x; nut->gautruc=NULL; return nut;
}
ct ThemDau(ct &x,int &giatri){
	ct tam=NutMoi(giatri); // Cai NutMoi nay` dang NULL
	if(x==NULL) x=tam;
	else{
		tam->gautruc=x;	//Moc' cai' nay` sang x
		x=tam;			//gia' tri cua? x = tam (NULL)
	}
	return x;
}
ct ThemCuoi(ct &x,int &giatri){
	ct tam=NutMoi(giatri), tam2;
	if(x==NULL) x=tam;
	else{
		tam2=x;
		while(tam2->gautruc!=NULL) tam2=tam2->gautruc;
		tam2->gautruc=tam;
	}
	return x;
}
ct ThemViTri(ct &x,int &giatri,int &vitri){
	if(vitri==0&&x!=NULL) x=ThemDau(x,giatri);
	else{
		int k=1; ct tam=x;
		while(tam->gautruc!=NULL&&k!=vitri){
			tam=tam->gautruc; ++k;
		}
		if(k!=vitri) tam=ThemCuoi(x,giatri); //Auto ThemCuoi
//		if(k!=vitri) Thi` co the thong bao khong co vi tri can` them
		else{
			ct tam2=NutMoi(giatri);
			tam2->gautruc=tam->gautruc;
			tam->gautruc=tam2;
		}
	}
	return x;
}
ct NhapDS(int &n){
	srand(time(NULL));
	ct DS=DSRong(); int rd=0;
	for(int i=0;i<n;++i){
		rd=1+rand()%100;
		DS=ThemCuoi(DS,rd);
	}
	return DS;
}
ct XoaDau(ct &x){
	if(x==NULL) cout<<"Khong Co Gi De Xoa!!!"<<endl;
	else x=x->gautruc; return x;
}
ct XoaCuoi(ct &x){
	if(x==NULL||x->gautruc==NULL) return XoaDau(x);
		ct tam=x;
		while(tam->gautruc->gautruc!=NULL) tam=tam->gautruc;
		tam->gautruc=tam->gautruc->gautruc;
		return x;
}
void InDS(ct &x){
	int c=0;
	for(ct i=x;i!=NULL;i=i->gautruc){
		cout<<"x"<<c<<"="<<i->songuyen<<"\t"; ++c;
	}
	cout<<endl;
}
void DoiGiaTri(int &a,int &b){
	int tam=a; a=b; b=tam;
}
void SapXepDS(ct &x){
	for(ct i=x; i!=NULL; i=i->gautruc){
		for(ct j=i->gautruc; j!=NULL; j=j->gautruc){
			if(i->songuyen>j->songuyen){
				
			}
		}
	}
	InDS(x);
}
void XD(){cout<<endl;}
int main(){
	int n, a=39, z=4, b=79, c=38;
	cout<<"Nhap so luong phan tu n="; cin>>n;
	ct DS=NhapDS(n);
	cout<<"\n\tIn Danh Sach\n"; InDS(DS);
	cout<<"\n\tThem 38 Cuoi' DS\n"; ThemCuoi(DS,c); InDS(DS);
	cout<<"\n\tThem 79 vao Dau` DS\n"; ThemDau(DS,b); InDS(DS);
	cout<<"\n\tThem 39 vao vi tri x4\n"; ThemViTri(DS,a,z); InDS(DS);
	cout<<"\n\tDanh Sach Da Sap Xep\n"; SapXepDS(DS);
	cout<<"\n\tXoa Dau\n"; XoaDau(DS); InDS(DS);
	cout<<"\n\tXoa Cuoi\n"; XoaCuoi(DS); InDS(DS);
	XD(); system("pause");
	free(DS);
}