在C中排序链表(选择排序)

时间:2012-02-20 15:54:08

标签: c

排序链表时更好,直接交换值或更改下一个指针的地址。

我使用交换值技术遇到了许多示例,但没有使用地址更改机制

使用的方法:选择排序

有没有办法通过更改指针的地址

来实现

4 个答案:

答案 0 :(得分:1)

交换指针总是更可取的。原因是对于链表,数据结构包含任意数据,并且必要时包含指向下一个节点的指针。因此,在交换中,仅复制指针比复制指针和数据更有效。

答案 1 :(得分:0)

链接列表通常根据指针进行交换。这是因为每个元素可能对于交换而言太大,并且可能发生链表中的元素被重载。

例如:

struct myelement
{
    linked_list ll;
    lot_of_data;
}

交换指针使您可以在知道大小的情况下交换任何类型的重载白色链接列表whitout的元素。

答案 2 :(得分:0)

嗯,有可能:

struct node {
 int val;
 struct node *next;
};

void sort(struct node **list) {
 if (!*list) return;
 struct node **minadr=list,*cur=*list;
 int min=(*list)->val;
 while (cur) {
  if (cur->val<min) {
   min=cur->val;
   minadr=&(cur->next);
  }
  cur=cur->next;
 }
 if (minadr!=list) {
  cur=*minadr;
  *minadr=*list;
  *list=cur;
 }
 sort(&((*list)->next));
}

答案 3 :(得分:0)

也可以交换实际值。但是,有可能你可能会陷入困境,特别是如果列表很大或者每个节点都有很多字段。您最终可能会交换几个字段而其余字段保持不变会导致不一致。最好使用指向节点的指针以避免所有这些,并且它也很容易像asaelr建议的那样。