C中链表的几种算法实现(持续中……)

对于链表大家应该都是很熟悉了,不过这种熟悉只是属于理论上,知道它怎么一回事,知道它的插入、删除等等,这里不过是只是给出它的实现。

当然也会涉及到一些简单算法的实现。

比如冒泡算法是最简单的,一般的做法就是一轮一轮的从A端把“每轮中的最小值”移向B端中,这样循环下来就形成了有序排列。当然我们也可以把“最小值”改变下,变成“最大值”,而它移动的方向当然也是可以变化的,这个是很灵活的。现在就拿冒泡算法入手,简单的实现下:

节点的构造如下

typedef struct node{
     int num;
     struct node *next;
}node;


它的实现就是每轮将最大值移向最后一个结点的方向,即假如有5个节点,第一次将最大值移到最后一个节点,而第二次就将最大值移到倒数第二个节点,以此类推。

void sort(node *head)
{
   int temp = 0;
   node *end = NULL;
   node *p1=NULL, *p2=NULL;
   p1 = head;
   while(p1->next != end)
   {
       p2 = p1;
       for(; p2->next != end; p2=p2->next)
       {  
            if(p2->num > p2->next->num)
            {
                temp = p2->next->num;
                p2->next->num = p2->num;
                p2->num = temp;
            }
       }
       end = p2;
   }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值