Em đang gặp khó khăn chỗ hoán đổi giữa hai Node trong dslk, mọi người giúp em với ạ.
Cụ thể em làm bài toán sắp xếp chọn. Chỗ hoán đổi Node em muôn hoán đổi giờ làm thê1 nào ạ?
Hoán đổi Node trong sắp xếp
This post was flagged by the community and is temporarily hidden.
1 Like
Chỉ cần đổi chỗ data của 2 node là dc.
1 Like
viết 1 hàm swap, đổi chỗ data của node, chứ k đổi chỗ node, k thay đổi liên kết, giống như trên mảng ấy
1 Like
void SwapNode(LIST *l, NODE *node_1, NODE *node_2){
//Trường hợp chỉ có hai Node
if (countNode(*l) == 2){
l->pHead = node_2;
node_2->pNext = node_1;
node_1->pNext = NULL;
}
else{
//Nếu Node p nằm đầu danh sách
if (node_1 == l->pHead){
if (node_1->pNext == node_2){
//Hai Node nằm cạnh nhau
NODE *m = node_2->pNext;
l->pHead = node_2;
node_2->pNext = node_1;
node_1->pNext = m;
}
else{
//Hai Node không nằm cạnh nhau
NODE *k;
for (k = l->pHead; k->pNext != node_2; k = k->pNext);
NODE *m = node_2->pNext;
NODE *n = node_1->pNext;
l->pHead = node_2;
node_2->pNext = n;
k->pNext = node_1;
node_1->pNext = m;
}
}
else{
if (node_1->pNext != node_2){
//Hai Node không nằm cạnh nhau
NODE *m;
for (m = l->pHead; m->pNext != node_1; m = m->pNext);
NODE *n = node_1->pNext;
NODE *u;
for (u = l->pHead; u->pNext != node_2; u = u->pNext);
NODE *v = node_2->pNext;
m->pNext = node_2;
node_2->pNext = n;
u->pNext = node_1;
node_1->pNext = v;
}
else{
//Hai Node nằm cạnh nhau
NODE *m;
for (m = l->pHead; m->pNext != node_1; m = m->pNext);
NODE *n = node_2->pNext;
m->pNext = node_2;
node_2->pNext = node_1;
node_1->pNext = n;
}
}
}
}
void SelectionSort(LIST *l){
for (NODE *p = l->pHead; p != NULL; p = p->pNext){
for (NODE *q = p->pNext; q != NULL; q = q->pNext){
if (p->Data > q->Data){
SwapNode(l, p, q);
}
}
}
}
ý tưởng của em thế này ạ. Em muốn đổi địa chỉ ấy ạ
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?