关于单连表插入后自动从小到达排序问题

原题:来自http://learn.akae.cn/media/ch26s01.html

1、修改 insert 函数实现插入排序的功能,链表中的数据按从小到大排列,每次插入数据都要在链表中找到合适的位置再插入。在 第 6 节 “折半查找” 中我们看到,如果数组中的元素是有序排列的,可以用折半查找算法更快地找到某个元素,想一想如果链表中的节点是有序排列的,是否适用折半查找算法?为什么?
 
 
1、下面是从小到大的插入函数,里面用了两个if 和 (*head)->next = node; 才实现插入自动排序功能。 我想去掉  if(lnode->next == NULL){ 判断和(*head)->next = node;两块语句实现此功能。想了好久也没有实现,请各位指点。
2、我觉得不能用 折半算法查找,因为但连表是从表头开始查找元素的。
 不知道是否正确。请各位给予答案。
 
插入算法:
 44 link insert(link lnode, char ch)
 45 {  
 46     link node = create_node(ch);   
 47     link *head;           
 48     if(lnode==NULL){      
 49         return node;      
 50     }
 51     if(lnode->next == NULL){
 52         if(lnode->element >= ch){      
 53             node->next = lnode;            
 54             return node;
 55         }
 56     }
 57     for(head=&lnode; (*head)->next; head=&(*head)->next){
 58         if((*head)->element >= ch){    
 59             node->next = *head;            
 60             head = &node;    
 61             return lnode;
 62         }
 63     }
 64     (*head)->next = node;
 65     return lnode;
 66 }
 67 

格式定义:
  5 typedef struct node *link;
  6 #include <stdio.h>
  7 struct node{
  8     char element;
  9     link next;
 10 };   

根据字符创建节点
 95 link create_node(char ch)
 96 {
 97     link p = malloc(sizeof *p);
 98     p->element = ch;
 99     p->next = NULL;
100     return p;
101 }
102 
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值