c版基于链表的插入排序(改进版)
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版基于链表的插入排序(改进版)的更多相关文章
- 教你如何使用Java手写一个基于链表的队列
在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...
- 基于visual Studio2013解决算法导论之022队列实现(基于链表)
题目 基于链表的队列实现 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> ...
- [Swift]LeetCode147. 对链表进行插入排序 | Insertion Sort List
Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...
- 阻塞队列 - java基于链表的简单实现
1.阻塞队列的原理 阻塞队列与普通队列的区别在于:阻塞队列为空时,从队列中获取元素的操作将会被阻塞,当队列为满时,往队列里添加元素的操作会被阻塞. 试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其 ...
- 6.2 集合和映射--集合Set->底层基于链表实现
在6.1中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是之前自己封装的. 1.集合set相关功能 1.1 add()的不同 用于链表本身没有去重的效果,因此 ...
- 基于链表的C语言堆内存检测
说明 本文基于链表实现C语言堆内存的检测机制,可检测内存泄露.越界和重复释放等操作问题. 本文仅提供即视代码层面的检测机制,不考虑编译链接级的注入或钩子.此外,该机制暂未考虑并发保护. 相关性文章参见 ...
- LeetCode题解-147 对链表进行插入排序
对链表进行插入排序. 插入排序的动画演示如上.从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中. 插 ...
- LeetCode题解-147 对链表进行插入排序 Medium
对链表进行插入排序. 插入排序的动画演示如上.从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中. 插 ...
- 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种 ...
随机推荐
- hdu 4112 Break the Chocolate(乱搞题)
题意:要把一块n*m*k的巧克力分成1*1*1的单元,有两种操作方式:1,用手掰(假设力量无穷大),每次拿起一块,掰成两块小的:2,用刀切(假设刀无限长),可以把多块摆在一起,同时切开.问两种方式各需 ...
- 李洪强经典面试题40-可能碰到的iOS笔试面试题-C语言
可能碰到的iOS笔试面试题(4)--C语言 可能碰到的iOS笔试面试题(4)--C语言 C语言,开发的基础功底,iOS很多高级应用都要和C语言打交道,所以,C语言在iOS开发中的重要性,你懂的.里面的 ...
- ifconfig 命令
许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...
- linux .vimrc的设置!
0.记得在配之前先下载vim.不同的版本下载vim使用不同命令 ubuntu使用sudo apt-get install vim 1.vi ~/.vimrc 打开当前用户下的vim的配置文件(修改完 ...
- TensorFlow CNN 測试CIFAR-10数据集
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50738311 1 CIFAR-10 数 ...
- vue实践---vue动态加载组件
开发中遇到要加载10个或者更多的,类型相同的组件时,如果用普通的 import 引入组件,components注册组件,代码显得太啰嗦了,这时候就需要用到 require.context 动态加载这些 ...
- Laravel开发:Laravel核心——Ioc服务容器源码解析(服务器绑定)
服务容器的绑定 bind 绑定 bind 绑定是服务容器最常用的绑定方式,在 上一篇文章中我们讨论过,bind 的绑定有三种: 绑定自身 绑定闭包 绑定接口 今天,我们这篇文章主要从源码上讲解 Ioc ...
- 解决ListView滑动上下出现阴影
网上大部分说在listview的属性中通过设置android:fadingEdge="none"来解决问题,需要说明的是是在2.3版本之前有效! 方法一. public class ...
- css3中font-face属性的用法详解
@font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当中或许有许 ...
- zabbix 主机组管理
分组的目的是将同一属性的主机归类,主机组中可以包含主机,也可以包含模板 建议:同一属性的主机或者模板,尽量归纳到分组中方便以后管理.分组原则如下: 以地理位置进行划分 以业务划分 以机器用途划分 以系 ...