Sắp xếp trong danh sách liên kết đơn

Tình hình e có làm 1 danh sách liên kết đơn bao gồm họ và tên sinh viên,mã số.E muốn sắp xếp theo mã số nhưng khi sắp xếp chỉ có mã số sắp xếp theo thứ tự còn thông tin thì nó không thay đổi(Cái này e cũng đoán ra vì e chỉ cho con trỏ trỏ đến mã số)Ai có ý tưởng gì để nó lấy luôn cả họ và tên đi theo không?Tiện e cũng hỏi luôn ý tưởng sắp xếp theo họ và tên :smile: .Gà mới mong mn giúp đỡ

1 Like

Không biết bác đã học đến struct chưa, nếu học rồi thì dùng struct rất là đơn giản :smiley:

3 Likes

e làm dslk bằng struct mà nhưng khác là thêm 1 con trỏ liên kết *next

1 Like

Tức là dùng danh sách liên kết hả?
Mà bác đã dùng struct tức là mỗi sinh viên được bao gói trong 1 struct, vậy thì làm gì có chuyện thay đổi mã số thông tin sv không thay đổi theo, nó luôn đi với nhau mà

2 Likes
void HoanVi(int &a, int &b)
{
	int c = a;
	a = b;
	b = c;
}
void SapXep(List &l)
{
	NhanVien *i, *j;
	for (i = l.dau;i != l.cuoi;i = i->next)
	{
		for (j = i->next;j != NULL;j = j->next)
		{
			if (i->ms>j->ms)
			{
				HoanVi(i->ms, j->ms);
			}
		}
	}
	HienThi(l);
}

hàm sắp xếp của mình ntn.Và nó lấy mã số người này gán cho người kia

Mình cũng hiểu sơ sơ về code của bạn rồi. Điểm chốt mà bạn sai là hoán vị ở đây là phải hoán vị cả cái struct chứ ko phải hoán vị mỗi cái ‘ms’. Bạn tráo đổi 2 sinh viên cho nhau chứ có phải tráo đổi ms của 2 sinh viên đâu ( mã số của thằng A cũng như Chứng minh thư của nó, ai lại đi cho thằng bạn được).
Còn cách tráo đổi 2 sinh viên cho nhau thì bạn dùng hàm HoanVi (NhanVien *a, NhanVien *b);

1 Like

để mình thử xem.Cám ơn bạn nhé

đã thử và nó không đổi vị trí

Bạn up code lên mình thử xem có sửa đc ko.

1 Like

Bạn phải làm 1 cái hàm đổi. ví dụ struct SV của bạn có ms, tên, điểm.

void swap(sv s1,sv s2){
sv temp;
strcpy(temp.ms,s1.ms);
strcpy(temp.ten,s1.ten);
temp.diem=s1.diem;
// Ở phần sau thì tương tự cái trên
}

Theo mình thì làm như thế này. Đổi từng giá trị hết.

1 Like

khi thay đổi thứ tự thì phải thay đổi cả struct hoặc class của sv đó , chứ k phải thay đổi mỗi trường mã số, vì bạn đang làm 1 bài toán mà kiểu dữ liệu của nó k có sẵn trong c / c++ nên bạn phải dùng struct hoặc class để tạo ra 1 kiểu dl phù hợp cho bài toán, khi thay đổi chú ý bạn thay đổi thứ tự của cái gì>?

1 Like

Cám ơn bác đã chia sẻ.Đã làm và thành công rực rỡ :yum:)
E xin chia sẻ thêm là trong hàm strcpy còn phả thêm 2 bước nữa là copy s2 cho s1,và copy temp cho s2
Cám ơn luôn bạn Nấm lùn IT nhé :smile: mn giúp đỡ nhiệt tình quá

1 Like

Tiện topic này hỏi luôn mn có ý tưởng gì về sắp xếp danh sách theo tên sinh viên không?Xem 1 số thì có bảo dùng hàm strcmp so sánh mà e còn hơi mơ hồ

ý tưởng của e là tách riêng hotendem va ten thanh 2 chuỗi làm thì cũng ok rồi nhưng e muốn mn cho e ý kiến ví dụ là chỉ 1 chuỗi hovaten luôn mà nó biết đâu là ten để so sánh :sunny:

Do mình lười nên không ghi tiếp ấy mà :v

1 Like

bạn ơi bạn có thể gởi code phân này lên cho mình tham khảo được không

Google said: What does search mean?? :slight_smile:

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?