史上最简单的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简易实战教程--第六话《开发一键锁屏应用2·完成》
转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51885687点击打开链接 上一篇,初步开发了这个应用,功能都有了(见http:// ...
- 06 获取Activity的栈管理器
代码 <span style="font-size:18px;">package com.fmy.day8_29task.util; import java.util. ...
- 【一天一道LeetCode】#136. Single Number
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- 择天记OL体验截图
- 从Eclipse插件中读取资源
可以通过Eclipse里的OSGi的Bundle类,获取插件目录下的某个文件的输入流: 1. Bundle bundle = Platform.getBundle(Activator.PLUGIN_I ...
- UNIX网络编程——使用select函数编写客户端和服务器
首先看原先<UNIX网络编程--并发服务器(TCP)>的代码,服务器代码serv.c: #include<stdio.h> #include<sys/types.h> ...
- Get and Post(Unity3D开发之六)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=565 unity3d中的www直 ...
- 海量数据挖掘MMDS week5: 计算广告Computational Advertising
http://blog.csdn.net/pipisorry/article/details/49428053 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- 图文浅析Binder机制
总述: Binder是Android系统提供的一种IPC机制,Android系统基本就可以看做基于Binder的C/S架构,Binder也是C/S形式出现,它属于驱动但是驱动的一段内存而不是设备,框架 ...
- 11.2、Libgdx的音频之音乐
(官网:www.libgdx.cn) 对于任何超过5秒的声音来说,最好将其放到磁盘中而不是内存中.Libgdx提供了一个Music接口来帮我们实现. 以下载入Music实例: Music music ...