史上最简单的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 ...
随机推荐
- Android播放在线音乐文件
Android播放在线音频文件 效果图: 源码下载地址: http://download.csdn.net/detail/q4878802/9020687 添加网络权限: <uses-permi ...
- 剑指Offer--图的操作
剑指Offer–图的操作 前言 企业笔试过程中会涉及到数据结构的方方面面,现将有关图的深度优先搜索与广度优先搜索进行整理归纳,方便日后查阅. 在已做过的笔试题目中,可用DFS解决的题目有: & ...
- Python Skelve 库
在Python中有一个简单的轻量级的类似于Key-value的存储型数据库,那就是Skelve.下面就来一起看一看这个库的简单的使用吧. 小例子 我本人比较喜欢从例子出发,然后再来研究这些内部的行为. ...
- NDK在windows下的开发环境搭建及开发过程
在Android应用的开发工程中,不管是游戏还是普通应用,都时常会用到.so即动态链接库,关于.so是什么玩意儿,有什么好处,这个大家可以在网上查一下,本人不做过多解释..so本是linux下的文件类 ...
- PGM:概率图模型Graphical Model
http://blog.csdn.net/pipisorry/article/details/51461878 概率图模型Graphical Models简介 完全通过代数计算来对更加复杂的模型进行建 ...
- 插件开发之360 DroidPlugin源码分析(三)Binder代理
转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52138483 Hook机制中Binder代理类关系图 Hook机制中Binder代理时 ...
- Unable to instantiate Action, MenuAction, defined for 'QueryMenuAll' in namespace '/'MenuAction
我刚好也遇到这样的情况,发现是自己的配置文件里写错了,spring里的id属性值要对应struts里class属性值.
- Android的AdapterViewFlipper和Stackview-android学习之旅(三十)
AdapterViewFlipper简介 AdapterViewFlipper继承了AdapterViewAnimater.每次只能显示一个组件,用showPrevious()和showNext()来 ...
- JAVA应用程序转换为Applet
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41673295 将一个图形的JAVA应用程序转换为能够嵌入在 ...
- 9.2.1、Libgdx的输入处理之轮询
(官网:www.libgdx.cn) 轮询是检测输入设备的当前状态,比如特定的按键按下,屏幕第一个手指的位置等等.这是一个快速简单的处理用户输入的方式,并且应用到很多的游戏中. 注意:如果你处理轮询, ...