史上最简单的C语言链表实现,没有之一
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NR(x) (sizeof(x)/sizeof(x[0]))
struct node
{
int data ;
struct node *next ;
};
void top_append_list(struct node *head , int value);
void print_link(struct node head);
void tail_append_list(struct node *head , int value);
int delete_link_node(struct node *head , int number);
int sort_link_node(struct node *head , int flag ); //flag = 1 s->b 0 b->s
void turn_over_node(struct node *head);
int main(void)
{
int array[] = {1,2,5,4,3,8,7,6,9};
struct node head = {.next = NULL} ;
struct node *headp ;
int i ;
for(i = 0 ; i < NR(array) ; i++)
{
tail_append_list(&head , array[i]);
}
print_link(head);
int num ;
sort_link_node(&head , 1);
print_link(head);
//b -> s
sort_link_node(&head , 0);
print_link(head);
turn_over_node(&head);
print_link(head);
return 0 ;
}
void top_append_list(struct node *head , int value)
{
struct node *New = NULL ;
New = malloc(sizeof(struct node));
if(NULL == New){
fprintf(stderr , "分配失败!\n");
return ;
}
New->data = value ;
New->next = head->next ;
head->next = New ;
}
void print_link(struct node head)
{
struct node *tmp = head.next ;
while(tmp)
{
printf("%d " , tmp->data);
tmp = tmp->next ;
}
putchar('\n');
}
void tail_append_list(struct node *head , int value)
{
struct node *New = NULL ;
New = malloc(sizeof(struct node ));
if(NULL == New){
fprintf(stderr , "分配失败!\n");
return ;
}
New->data = value ;
struct node *tmp = head ;
while(tmp->next && (tmp = tmp->next)) ;
New->next = tmp->next ;
tmp->next = New ;
}
int delete_link_node(struct node *head , int number)
{
struct node *after = head->next , *before = head;
int flag = 0 ;
while(after)
{
if(after->data == number)
{
flag = 1 ;
before->next = after->next ;
after->next = NULL ;
free(after);
after = before->next ;
continue ;
}
after = after->next;
before = before->next ;
}
return flag ;
}
int sort_link_node(struct node *head , int flag ) //flag = 1 s->b 0 b->s
{
int tmp ;
struct node *tmp1 , *tmp2 ;
tmp1 = head ;
while(tmp1 = tmp1->next)
{
tmp2 = tmp1->next ;
while(tmp2)
{
if((flag==1)?(tmp1->data > tmp2->data):(tmp1->data < tmp2->data))
{
memcpy(&tmp , &tmp1->data , sizeof(int));
memcpy(&tmp1->data , &tmp2->data , sizeof(int));
memcpy(&tmp2->data , &tmp , sizeof(int));
}
tmp2 = tmp2->next ;
}
}
}
void turn_over_node(struct node *head)
{
struct node *tmp = head->next ;
struct node *cur = NULL;
head->next = NULL ;
while(cur = tmp)
{
tmp = tmp->next ;
cur->next = head->next ;
head->next = cur ;
}
}
史上最简单的C语言链表实现,没有之一的更多相关文章
- 史上最简单,一步集成侧滑(删除)菜单,高仿QQ、IOS。
重要的话 开头说,not for the RecyclerView or ListView, for the Any ViewGroup. 本控件不依赖任何父布局,不是针对 RecyclerView. ...
- [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)
[分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...
- 史上最简单的 SpringCloud 教程
史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)史上最简单的Spri ...
- 史上最简单的 SpringCloud 教程 | 终章
https://blog.csdn.net/forezp/article/details/70148833转载请标明出处:http://blog.csdn.net/forezp/article/det ...
- 史上最简单的 GitHub 教程
史上最简单的 GitHub 教程 温馨提示:本系列博文已经同步到 GitHub,如有需要的话,欢迎大家到「github-tutorial」进行Star和Fork操作! 1 简介 GitHub 是一个面 ...
- (转) 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)
一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...
- 史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心(Finchley版本)
转载请标明出处: 原文首发于 https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f10-eureka/ 本文出自方志朋的博客 文章 史上最简单 ...
- 史上最简单的 MySQL 教程(十五)「列属性 之 自动增长」
自动增长 自动增长:auto_increment,当对应的字段,不给值,或者是默认值,或者是null的时候,就会自动的被系统触发,系统会从当前字段中取已有的最大值再进行+1操作,得到新的字段值. 自增 ...
- 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f1-eureka/ 本文出自方志朋的博客 一.spring ...
随机推荐
- UE4联机烘焙
联机烘焙就是为了利用多台电脑解决烘焙效率的问题 1.UE4的烘焙工具在安装目录下的\Engine\Binaries\DotNET,比如我这里是E:\UnrealEngine-release\Engin ...
- IDEA阅读Spark源码
将spark编译成idea-sbt工程 tar -zxvf spark-1.1.0.tgz cd spark-1.1.0 sbt/sbt gen-idea 等待-- 成功后就能以SBT工程的形式导入i ...
- Servlet之文件上传
上传表单中的注意事项: 表单 method 属性应该设置为 POST 方法,不能使用 GET 方法 表单 enctype 属性应该设置为multipart/form-data 下面的实例是借助于com ...
- 解决Xshell显示中文乱码的问题
执行echo $LANG命令输出的是当前的编码方式,执行locale命令得到系统中所有可用的编码方式.要让Xshell不显示乱码,则要将编码方式改为UTF-8. 在Xshell中[file]-> ...
- TDD实践感悟
每个开发者都想开发出高质量的代码,更少的Bug.更容易维护不仅让人心情愉悦,也让我们有更多时间去学习和生活. 少加一些班,多陪家人,:) 当开发任务非常简单时,比如基本的增删改查,可能使用怎样的方式开 ...
- Beanstalkd 一个高性能分布式内存队列系统
需要一个分布式内存队列,能支持这些特性:任务不重不漏的分发给消费者(最基础的).分布式多点部署.任务持久化.批量处理.错误重试..... 转载:http://rdc.taobao.com/blog/c ...
- HMM:隐马尔科夫模型-前向算法
http://blog.csdn.net/pipisorry/article/details/50722376 目标-解决HMM的基本问题之一:已知HMM模型λ及观察序列O,如何计算P(O|λ)(计算 ...
- 给你的流添加缓冲装置——字节块ByteChunk
这是一个很重要的一个字节数组处理缓冲工具,它封装了字节缓冲器及对字节缓冲区的操作,包括对缓冲区的写入.读取.扩展缓冲区大小等等,另外还提供相应字符编码的转码操作.此工具让缓冲操作变得更加方便,除了缓冲 ...
- java设计模式---调停者模式
中介者模式(Mediator):用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 通用类图: 举例:在一个公司里面 ...
- Spring boot之hello word
环境准备 一个称手的IDE(首选Myeclipse,也可以选Eclipse) Java环境(JDK 1.7或以上版本) Maven 3.0+(Eclipse和Idea IntelliJ内置,如果使用I ...