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. Vim使用个人心得

    个人最近在Windows上使用gVim 1.移动光标 h,j,k,l 键为左,下,上,右,方向键,控制光标移动,插入状态下不可用,插入状态下,按V键进入查看状态,可使用. 2.进入编辑模式:按 i 键 ...

  2. Android下的数据存储与访问、权限

    弹出吐司 在onCreate中可以先获取控件对象 /data/data/程序的包名/          在这个目录下面进行文件的读写可能因为包名的改变而变得不可靠. this可以是Activity,也 ...

  3. [效果不错] nginx 高并发参数配置及linux内核参数优化,完整的内核优化设置。PHP-FPM高负载解决办法。

    背景:对vps小资源的实践中对,https://justwinit.cn/post/7536/ 的再优化,再实践,再优化,特别是Nginx,PHP,内核: 零)Nginx: error_log /da ...

  4. spring boot集成activemq

    spring boot集成activemq 转自:https://blog.csdn.net/maiyikai/article/details/77199300

  5. flex弹性盒模型

    flex 意思是弹性布局,用来给盒模型提供最大的灵活度,指定容器中的项目为弹性布局,类似于float:left; 比float的好处是容器没有设置高度,会根据项目来自适应高度,我们都知道,设置floa ...

  6. 精通 Android Data Binding

    转自:https://github.com/LyndonChin/MasteringAndroidDataBinding 官方虽然已经给出了教程 - Data Binding Guide (中文版 - ...

  7. python#模拟发送电子邮件

    #-*- coding:utf-8 -*- #模拟发送电子邮件 from email.mime.text import MIMEText from_addr = 'aa@sss.com' passwo ...

  8. 实战c++中的vector系列--creating vector of local structure、vector of structs initialization

    之前一直没有使用过vector<struct>,如今就写一个简短的代码: #include <vector> #include <iostream> int mai ...

  9. apache常用模块介绍

      mod_actions 基于媒体类型或请求方法,为执行CGI脚本而提供 mod_alias 提供从文件系统的不同部分到文档树的映射和URL重定向 mod_asis 发送自己包含HTTP头内容的文件 ...

  10. Python一些基础练习题

    可变的数据类型:list, dict, set(可修改其中的元素) 不可变的数据类型:str, tuple 重点:str, list, dict (1).推导式练习 # 利用列表推导式: 找出100以 ...