史上最简单的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 ...
随机推荐
- XMPP系列(六)---创建群组
最近公司项目需要,要做一个自己的IMSDK,顺便先把之前没有记录的群聊功能记录一下. 先上资料,查看XMPP群聊相关的资料,可以去这里看协议:XEP-0045 . 创建群组 XMPP 框架里有一个类X ...
- Android旋转动画
Android旋转动画 核心方法 public void startAnimation(Animation animation) 执行动画,参数可以是各种动画的对象,Animation的多态,也可以是 ...
- Android初级教程:单击事件的传递机制初谈
以上仅是小试牛刀,后续有很多事件传递机制,继续探讨.
- Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合
内省的简单运用: JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则. 采用遍历BeanInfo的所有属性方式来查找和 ...
- 开源项目——小Q聊天机器人V1.4
小Q聊天机器人V1.0 http://blog.csdn.net/baiyuliang2013/article/details/51386281 小Q聊天机器人V1.1 http://blog.csd ...
- 开源项目——小Q聊天机器人V1.2
小Q聊天机器人V1.0 http://blog.csdn.net/baiyuliang2013/article/details/51386281 小Q聊天机器人V1.1 http://blog.csd ...
- SDK目录结构
android sdk里的各目录作用 AVD Manager.exe:虚拟机管理工具,用于建立和管理虚拟机. SDK Manager.exe:sdk管理工具,用于管理.下载sdk.sdk工具,能及扩展 ...
- BIP Requests Are Failing With Error "OPP Error Oracle.apps.xdo.XDOException: Error Creating Lock Fil
In this Document Symptoms Cause Solution References Applies to: BI Publisher (formerly XML P ...
- java实现:将一个数逆序输出
前面我们用C语言实现过这个程序,其实java也一样的,很多步骤跟C差不多,但是有些接口和特性可能不同: import java.util.Scanner;//要使用scanner这个类,就需要导入一个 ...
- SQL Server扫盲系列——安全性专题——SQL Server 2012 Security Cookbook
由于工作需要,最近研究这本书:<Microsoft SQL Server 2012 Security Cookbook>,为了总结及分享给有需要的人,所以把译文公布.预计每周最少3篇.如有 ...