1. [代码][C/C++]代码

/**
 * @todo    c版基于链表的插入排序
 * @author  Koma
 **/
#include<stdio.h>
#include<stdlib.h>
 
typedef struct node{
    int data;
    struct node *next;
}LNode, *LinkList;
 
/**
 * 创建并初始化一个带头节点的链表
 **/
LinkList init() {
    LinkList p, r, list;
    list = (LinkList)malloc(sizeof(LNode));
    list->next = NULL;
    int e;
    while ( scanf("%d", &e) != 0 ) {
        p = (LinkList)malloc(sizeof(LNode));
        p->data = e;
        p->next = NULL;
        if ( !list->next ) {
            list->next = p;
        } else {
            r->next = p;
        }
        r = p;
    }
    return list;
}
 
 
/**
 * 打印链表 
 **/
void printLink( LinkList l ) {
    LinkList q;
    q = l->next;
    while ( q->next != NULL ) {
        printf("%d ", q->data);
        q = q->next;
    }情侣图片
    printf("%d\n", q->data);
}http://www.huiyi8.com/qinglv/​
 
void innserSort( LinkList list1, LinkList q ) { 
    int in;     //标志量
    LinkList p, t, r;
     
    in = 0;
    r = p = list1;
    t = (LinkList)malloc(sizeof(LNode));
    t->next = NULL;
    t->data = q->data;
    if ( !p->next ) {
        p->next = t;
    } else {
        while ( p->next != NULL ) {
            r = p;
            p = p->next;
            if ( t->data > p->data ) {
                continue;
            } else {
                r->next = t;
                t->next = p;
                in = 1;
                break;
            }
        }
        //处理新链最后一个元素
        if ( !in ) {
            p->next = t;
        }
    }
}
 
/**
 * 实现插入排序
 **/
LinkList sort( LinkList l ) {
    LinkList q, list1;
     
    list1 = (LinkList)malloc(sizeof(LNode));
    list1->next = NULL;
    q = l->next;
    while ( q->next != NULL ) {
        innserSort(list1, q);
        q = q->next;
    }
    //处理旧链最后一个元素
    innserSort(list1, q);
    return list1;
}
 
int main() {
    LinkList l, l1;
    l = init();
    printLink(l);
    l1 = sort(l);
    printLink(l1);
    printLink(l);
    return 0;
}

c版基于链表的插入排序(改进版)的更多相关文章

  1. 教你如何使用Java手写一个基于链表的队列

    在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...

  2. 基于visual Studio2013解决算法导论之022队列实现(基于链表)

     题目 基于链表的队列实现 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> ...

  3. [Swift]LeetCode147. 对链表进行插入排序 | Insertion Sort List

    Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...

  4. 阻塞队列 - java基于链表的简单实现

    1.阻塞队列的原理 阻塞队列与普通队列的区别在于:阻塞队列为空时,从队列中获取元素的操作将会被阻塞,当队列为满时,往队列里添加元素的操作会被阻塞. 试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其 ...

  5. 6.2 集合和映射--集合Set->底层基于链表实现

    在6.1中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是之前自己封装的. 1.集合set相关功能 1.1 add()的不同 用于链表本身没有去重的效果,因此 ...

  6. 基于链表的C语言堆内存检测

    说明 本文基于链表实现C语言堆内存的检测机制,可检测内存泄露.越界和重复释放等操作问题. 本文仅提供即视代码层面的检测机制,不考虑编译链接级的注入或钩子.此外,该机制暂未考虑并发保护. 相关性文章参见 ...

  7. LeetCode题解-147 对链表进行插入排序

    对链表进行插入排序. 插入排序的动画演示如上.从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中. 插 ...

  8. LeetCode题解-147 对链表进行插入排序 Medium

    对链表进行插入排序. 插入排序的动画演示如上.从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中. 插 ...

  9. SNMP 原理及配置简述 net-snmp-utils net-snmp 第2版基于SNMP 群体名(community name) 第3版引入了安全性更高的访问控制方法 SNMP协议操作只有4种 Apache的php_snmp 模块

    SNMP 原理及配置简述  net-snmp-utils  net-snmp 第2版基于SNMP 群体名(community name) 第3版引入了安全性更高的访问控制方法 SNMP协议操作只有4种 ...

随机推荐

  1. Java设计模式透析之 —— 策略(Strategy)

    今天你的leader兴致冲冲地找到你,希望你能够帮他一个小忙.他如今急着要去开会.要帮什么忙呢?你非常好奇. 他对你说.当前你们项目的数据库中有一张用户信息表.里面存放了非常用户的数据.如今须要完毕一 ...

  2. 【Mac系统 + Python + Django】之开发一个发布会系统【Django视图(二)】

    此学习资料是通过虫师的python接口自动化出的书学习而来的,在此说明一下,想学习更多的自动化的同学可以找虫师的博客园,非广告,因为我python+selenium自动化也是跟虫师学的,学习效果很好的 ...

  3. wamp 两个不同的php.ini

    最近在本地开发的windows wamp环境安装一个vld 扩展,碰见一个奇怪的问题,phpinfo() 有 而cli 命令模式里面却没有 最后发现wamp phpinfo()和cli命令模式指向的p ...

  4. 二级导航内容均分--jquery

    这个是去年做过的一个项目中的算法,个人感觉还可以,所以拿出来分享下. 背景:头部导航二级导航有些内容太长,一列的话太过难看,就要分成两列,要做到按块尽量均分,排列顺序没有限制. 原理: 1.把各个二级 ...

  5. 44.Android MD5Util

    44.Android MD5Util public class MD5Util { public static String getMD5String(String key) { char hexDi ...

  6. ASP.NET动态网站制作(22)-- ADO.NET(1)

    前言:这节课开始真正地学习WEB开发,ADO.NET就是一组允许.NET开发人员使用标准的.机构化的,甚至无连接的方式与数据交互的技术.所属的类库为:System.Data.dll. 内容: 1.AD ...

  7. Linux进程间通信(四) - 共享内存

    共享内存的优势 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝.对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只 ...

  8. Jmeter监控Linux服务器性能

    ①.下载JMeterPlugins相关的jar包,放jmeter的安装路径\lib\ext下——这个时候启动jmeter会发现,添加监听器时,出现了一堆的jp@jc……,这些就是插件的功劳. JMet ...

  9. [Sdoi2014]数数[数位dp+AC自动机]

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 834  Solved: 434[Submit][Status][ ...

  10. 洛谷P2296 寻找道路==codevs3731 寻找道路

    P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...