自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

coding__madman的博客

不积跬步无以至千里---厚积薄发!

  • 博客(83)
  • 资源 (1)
  • 收藏
  • 关注

原创 二叉树通用树层次遍历、前序遍历、中序遍历、后序遍历栈结构非递归实现

目的:主要是刷二叉树相关的题,把之前的源码拿来用顺便学习复现一遍,锻炼一下编程能力。其中层次遍历用栈实现是自己写的,前、中、后序遍历以前学过的也有好多同志网上有相关博客!过程分析的比较详细,我自己学习方法是画图,举例一个二叉树,然后用笔一步一步推演,寻找其中的 规律,这其中也参考了别人的思考成果。想明白后,然后自己实现起来就比较容易了,对代码的理解也更深刻,这里只源贴代码以及运行结果!(网上的也参...

2018-12-01 15:59:21 734

原创 二叉通用树C语言实现---双亲孩子法

还是国嵌之前数据结构和算法视频里面唐老师的代码,最近刷二叉树的相关题目,整好拿来用用,先贴源代码,顺便复习一下,老师的代码真的很棒!后边借助老师之前的链表以及栈的实现,非递归实现二叉树的前序遍历、中序遍历、后续遍历、以及层次遍历-全部用栈实现。目标实现如下二叉树,并且打印结果,/举例/************************************              A...

2018-12-01 15:23:31 868

原创 单链表系列

题目:输入一个链表的头结点,从尾到头反过来打印出每一个节点的值。(不能改变原有链表的结构)这里单链表的实现用的是当初学习国嵌数据结构和算法视频里面唐老师实现的源码,老师的代码实现的非常经典。今天复习算是领悟到了!该链表实现精妙之处:写的链表不受业务结构而限制,在我们用的数据类型发生改变时并不需要去改变底层的链表结构。链表结点LinkListNode中只放next指针域。数据业务数据可以根据...

2018-11-19 17:30:11 334

原创 递归深度实战

递归与回溯1. 递归在程序设计中也常用于需要回溯算法的场合2. 回溯算法的基本思想:(穷举搜索算法) 1> 从问题的某一种状态出发,搜索可以到达的所有状态 2> 当某个状态到达后,可向前回退,并继续搜索其它可达状态 3> 当所有状态都达到后,回溯算法结束3. 程序设计中可利用函数活动对象保存回溯算法的状态数据,因此可以利用递归完成回溯算法4. 回溯算法是递归应用的重要场合,同时利用函数调用的活动对象可以保存回溯算法中重要的变量信息,递归是回溯

2016-04-06 22:41:13 4733

原创 通用树的存储结构

树的存储结构难点:无法直接用数组表示树的逻辑结构但是却可以设计结构体数组对结点间的关系进行表述如下图:(用一个表格描述图中的树)那么问题来了:1. 树结构需要添加和删除结点,数组存储是否足够灵活?答:树经常需要动态的插入和删除结点,数组存储肯定不够灵活。2. 每个结点的子节点可以有多个,如何存储?答:看下面树的存储结构:1. 利用链表组织树中的各

2016-03-13 20:57:37 2267

原创 树的定义

树的定义:1. 树是一种非线性的数据结构2. 树是由n(n >= 0)个节点组成的有限集合如果 n = 0, 称为空树如果n > 0,则:1. 有一个特定的称之为根(root)的节点,它只有直接后继,但没有直接前驱2. 除根以外的其它结点划分为 m (m ≥ 0) 个 互不相交的有限集合T0, T1, …, Tm-1,每个集合又是一棵树,并且称之为根的子树(subTre

2016-03-13 16:04:46 891

原创 二分查找算法递归和非递归实现

自己接触和了解过的查找算法总结起来分为3个吧:1. 静态查找(主要是二分查找,效率较高)2. 动态查找(二叉查找树)3. 哈希表首先来说二分查找吧!基本思想:时间复杂度:空间复杂度:代码示例:#include //二分查找非递归实现 int BinSearch1(int Array[], int low, int high, int key){

2016-03-10 00:44:09 8159

原创 归并排序

基本思想:归并排序采用的是经典的分治法思想,基本步骤可以分为两步,一归二并。先说简单的并,就是将两个有序的数列合并成一个有序的序列(这个代码实现和容易),难点在于怎么让二组数据组内数据有序,算法采用递归的思想,将两个小组分成四个小组,继续分直到每个小组内只有一个数据时可以认为每个小组组内数组已经是有序的了,然后再合并相邻的两个小组直到整个排序完成。时间复杂度:O(n*log(n))空间复杂...

2016-03-06 17:05:20 579

原创 希尔排序

基本思想:时间复杂度:n*log(n)空间复杂度:O(1)是否是稳定排序:不是稳定排序代码示例:

2016-03-06 14:52:42 520

原创 快速排序

算法思想:快排是采用的分治思想。一般取第一个元素为基准,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比基准要小,另一部分数据都比基准要大,然后用同样的方法对着两部分数据分别进行快排,快排使用递归思想,直至整个数列变为有序数列。时间复杂度:n*logn(平均时间复杂度)空间复杂度:O(1)是否是稳定排序:不是稳定排序代码示例: #include &l...

2016-03-03 11:42:14 682

原创 选择排序和插入排序及其优化

选择排序(固定位置,找元素)基本思想:对于长度为N的无序数列,第一次遍历,将第0个元素和后边所有元素相比较,找出最小的元素,然后和第0个元素交换,第二遍历,将第1个元素和后边所有的元素比较,找出剩下元素中最小的元素,然后和第1个元素交换,重复以上步骤直至最后一次遍历只剩下两个元素的时候,排序完成。时间复杂度:O(n*n)空间复杂度:O(1)是否是稳定排序:不是稳定排序代码示例:...

2016-03-02 15:51:08 1002

原创 不修改数组查找数组中任意一个重复的数字

题目:在一个长度为n+1的数组里所有的数字都在1~n的范围内,所以数组中至少有一个数字是重复的,请找出数组中任意一个数字,但不能修改输入的数组。#include <stdio.h>#include <stdlib.h>//统计数字start 到 end 中的数字在整个数组中出现的次数 int countRange(const int* Array, int l...

2018-11-18 23:59:09 282

原创 数组中重复的数字03---剑指offer

一本好书,书已看完(作者已提供所有习题编程源码),不多说。现在第二遍准备慢慢刷题来提高编码实践能力。先从简单入手!虽然是一个简单的题目,但是知易行难!(虽然看过书,但是自己实现的时候对数组元素的合法性检查就没有考虑到)题目:找出数组中重复的数字。在一个长度为n的数组里的所有的数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个重复了几次。请找出数组中任...

2018-11-18 19:17:38 211

原创 安静的周末---有感

  工作几年了,中间很少写博客,但也从未中断过学习,多是和工作有关,手动coding确是生疏了不少,闲来无事,编码练练手,写博客后边要坚持下去。目前计划是先从简单的入门级数据结构和算法入手。通过编码解决一个一个实际题目,数组、字符串、链表、树、图等算法,提高编程能力以及算法和程序设计的思想。算法、数学、以及生活中的具体实践是我目前能想到的追求的终极目标,买了几本算法书,有入门的,有提高的,也有对我...

2018-11-18 18:30:29 264

原创 C语言读取配置文件以及128字节对齐.bin配置文件

配置文件:#begin build propertiesfactory=四川九州电子科技股份有限公司oui=03product_type=71stbid=0371419916190000129hw_version=00000473sw_version=2016-10-11 17:27swdate=20161010soc=Hi3796MV100product_type_eoc=

2016-10-23 21:50:35 1810

原创 RK平台Android4.4 添加一个新的遥控器支持以及添加特殊按键

瑞芯微平台SDK:Android4.4好久没写博客了,最近工作中需要在SDK中添加一个新的遥控器支持,由于自己对java代码比较头大,过程也是一波三折,整个流程其实分析下来并不难,这里做个简单的总结。也算是学习android的一个开端。1.  遥控器红外键值到linux层的映射      安卓4.4后linux层和红外层的键值映射是在设备树中修改的,不需要在linux中修改驱动代码

2016-10-23 20:26:26 8111 3

原创 fread函数小笔记

fread函数:从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。函数原型: size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;参 数buffer:  用于接收数据的内存地址        size:  

2016-08-26 10:03:26 755

原创 一道错过的很基础的笔试题

目前只记得个大概了:一个16位的操作系统unsigned char a = -4 & 3;a = ?当初自己写的答案是3,但是真相却不是这样?第一个自己考虑到了隐性强制类型转换,第二个计算机是通过补码的形式来表示数据的,不过当时还是算错了!原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。反码表示法规定:正数的反码与其原码相同;负...

2016-07-31 22:46:33 777

原创 串口传文件(非终端串口,自己定协议下位机部分C语言实现)

之前项目中有个地方要实现一个功能,就是通过非终端串口传输文件,这里将其作为一个小功能模块,简单的介绍一下自己是如何实现的!SecureCRT超级终端上可以通过lrz等工具通过命令传输文件这个就不介绍,之前的博客也有写过怎么编译移植使用这个工具,这次是自己来编码实现通过非终端调试串口来安全可靠的传输任何文件。其实刚开始想的时候觉得有一点难度,一是要自己定协议,如何定协议才合理呢?二是当时自己也想

2016-07-31 22:26:48 4131

原创 SHA1校验算法C语言实现

SHA1 安全哈希算法:对于长度小于2^64位的消息(1M = 1024k,1K = 1024字节,1BYTE = 8bit 可以想象一下2的63次方位可以表示一个多大的数据文件),SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。 SHA1有如下特性:不可以从消息摘要中复原信

2016-07-31 21:25:58 20044 3

原创 Linux C 库函数判断一个文件是否为空

C语言fgetc()函数的返回值意义函数原型:int fgetc( FILE* stream );这个函数的返回值,是返回读取的一个字节。如果读到文件末尾返回EOF。EOF其实就是一个宏:#define EOF (-1)   表示-1.既然返回的是一个字节,为什么返回值确用4字节的int表示,不用unsigned char这1个字节类型表示,或直接用char类型表示?原因就

2016-07-21 18:48:30 6673

原创 Linux的fasync驱动异步通知详解

首先还是先从init函数来总结:该驱动是一混杂设备驱动模型来写的,这个主要是借鉴网上的好多资料都是一这种模式来写的,Linux里面misc混杂设备驱动的主设备号是为10的驱动设备,init模块首先是用 misc_register()函数注册一个一个混杂设备驱动,参数一个混杂设备驱动里面非常重要的一个数据结构 struct miscdevice。kill_fasync 及 fasync_helper用于异步通知中,其中 kill_fasync(&b_async,SIGIO,POLL_IN)函数的功能是向应用

2016-07-07 17:43:14 5686 1

原创 面试编程题---其中隐藏着若干0,其余非0整数,使A把0移至后面,非0整数移至数组前面并保持有序

题目:int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路) 这是今天看到的一到面试编程题,题目算是简单一些,读完题目至少在思路还编码上还是比较有把握的,不借助辅

2016-07-06 14:47:40 2379 1

原创 已知平面三点坐标求其中两条边之间的夹脚

回首这篇两年前写的博客,算是自己觉得比较有意思的一篇了,那时候刚拿毕业证也就一年左右吧,在一家小公司写代码,然后一同事也是前辈向我讨教这个问题,问我有没有招编程解决这个问题。抱着试试看的态度立马就研究了起来,从理论到实践,也是第二次感觉到数学和代码的结合真的很奇妙(第一感觉神奇的是在学校实验室捣鼓四轴飞行器的pid算法,通过用微分和积分的以及比例控制对飞机的过去、现在、以及未来的飞行姿态做最佳调控...

2016-06-15 19:20:31 3754

原创 epoll机制读取linux串口数据

epoll和select相比,最大不同在于:1epoll返回时已经明确的知道哪个sokcet fd发生了事件,不用再一个个比对。这样就提高了效率。2select的FD_SETSIZE是有限止的,而epoll是没有限止的只与系统资源有关。

2016-06-14 10:04:43 9068

原创 Linux USB驱动程序设计

USB请求块(USB request block-URB)是USB设备驱动中用来与USB设备通信所用的基本载体和核心数据结 构,非常类似于网络设备驱动中的sk_buff结构体,是USB主机与设备通信的“电波”。 1. USB 设备驱动程序创建并初始化一个访问特定端点的urb,并提交给USB core; 2. USB core提交该urb到USB主控制器驱动程序; 3. USB 主控制器驱动程序根据该urb描述的信息,来访问USB设备

2016-06-11 11:31:18 6368

原创 Linux SPI驱动设计

1. SPI总线结构SPI串行外设接口,是一种高速的,全双工,同步的通信总线。采用主从模式架构,支持多个slave,一般仅支持单MasterSPI接口共有4根信号线,分别是:设备选择线(SS)、时钟线(SCK)、串行输出数据线(MOSI)、串行输入数据线(MISO).2. 数据传输过程主节点通过MOSI线输出数据,从节点在SIMO处从主节点读取数据。同时,也通过SMOI

2016-06-10 15:34:49 5360

原创 Linux I2C驱动

I2C总线介绍:1. I2C硬件结构    1.1 I2C电气特性        I2C总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。    I2C总线只有两根双向信号线。        SDA: Serial Data Line 数据线        SCL: Serial Clock 时钟线I2C总线协议规定:从设备采用7位的

2016-06-10 00:39:17 1264

转载 在一个字符串中找到第一个只出现一次的字符

这道题在学校期间也曾领略过!今天看到这一其一行代码的写法感觉实在是精简强悍!而且稍微有点C功底的人阅读起来也相当方便!

2016-06-07 14:21:01 1744

原创 块设备驱动架构分析

1. 块设备概念:块设备是指只能以块为单位进行访问的设备,块的大小一般是512个字节的整数倍。常见的块设备包括硬件,SD卡,光盘等。2. 块设备驱动的系统架构2.1 系统架构---VFSVFS是对各种具体文件系统的一种封装,用户程序访问文件提供统一的接口。2.2 系统架构---Cache当用户发起文件访问请求的时候,首先回到Disk Cache中寻址文件

2016-06-06 22:34:12 8393 2

原创 CJSON源码研究笔记

断断续续的CJSON源码看了也有一段时间了,研究一番还是收获颇多!很适合有一点C基础的想继续提高练手的开源源码!cJson.c代码只有700多行,官网上下的,代码风格个人感觉不是很方便阅读,如果全部展开的话代码估计至少不在1100行之下。网上也看了一些前辈们的cjson笔记!对于像我这这样初次接触CJSON还是相当有帮助的!下面就来一点一点的分析源码!这里记录一下自己对源码研究理解的笔记!同时也希望对别人作为参考也有一点点的帮助!研究源码之前首先还是搞清楚CJSON到底是干啥的!这样可以对整个源码有个大体

2016-06-06 21:30:12 15144 2

原创 网卡驱动程序设计---网络子系统深入分析以及DM9000网卡驱动实现

网络子系统:比如网络编程里面通过socket创建好了一个文件操作符,然后对其进行write操作,这个write对应的入口其实是一个socket_file_ops结构对应的函数操作集:可以看到write对应的入口函数是sock_aio_write函数这个函数又对应着do_sock_write一层又一层,这个函数又调用了__sock_sendmsg函数,下面来看

2016-06-02 22:29:10 1077

转载 关于C语言结构体偏移的一点思考

前言相信大家在c语言程序开发的过程一定都使用过结构体,那么不知你对结构体中成员变量偏移这块是如何理解的?本文将和大家一起分享下,本人最近关于c语言中结构体偏移的一些思考和总结。另外这篇博文还可以帮你更好的理解这个问题c语言中两种宏定义的区别,关于这个思考有哪些方面的意义,细心的你可能发现本文所属的类别为linux内核设计与实现,而并非 GNU C语言编程,可能有些同学会有些许好

2016-06-01 15:34:45 2318

原创 网卡驱动设计---架构分析加回环网卡驱动设计(网卡驱动上)

网卡驱动架构分析:1. Linux网络子系统2. 重要数据结构总结一下三个重要的数据结构:    2.1. net_device    2.2. net_device_ops    2.3. sk_buff3. 网卡驱动架构分析CS8900.c //早期2410使用的网卡芯片 3.1. 网卡初始化首先找到驱动程

2016-05-29 21:24:55 4431 2

原创 应用程序运行***buffer overflow detected*** terminated Aborted异常退出问题

今天运行程序,改了一段代码!然后每次一运行程序就异常退出,打印如下信息:*** buffer overflow detected ***: ./shm_costomer terminatedAborted根据单词的意思是缓存越界的问题!自己反复检查了自己修改的那部分代码,发现不存在这种情况!然后直接把自己这段代码屏蔽掉重新编译再运行,发现程序还是挂掉了!但是这个程序之前几个月都运行

2016-05-26 15:03:07 32507 1

原创 串口驱动程序设计详解---串口打开、发送、接收(下)

上一篇博客分析了串口驱动初始化部分,下面逐步分析串口驱动中的打开串口,数据发送和接收!初始化主要工作流程:先来分析串口打开操作流程,还是先上图:这里分析还是离不开上篇博客中的两张重要的图:串口操作重要的数据结构:由上一篇串口驱动分析可知在samsung.c中模块初始化中有一项工作是注册一个串口驱动,跳到这个函数中uar

2016-05-25 23:10:48 22385 4

转载 select、poll、epoll之间的区别总结(转)

select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用

2016-05-24 10:16:53 830

原创 串口驱动程序设计详解---串口初始化(上)

TTY驱动程序架构:1. TTY概念解析    1.1 /dev/ttySCA0    1.2 /dev/tty1-n    1.3 /dev/console      在linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。      . 串口终端(/dev/ttyS*)      串口终端是使用计算机串口连接的终端设备。Li

2016-05-19 23:51:13 26193 3

原创 总线设备驱动模型

总线驱动设备模型:1. 总线设备驱动模型概述        随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求也越来越高,2.4内核已经难以满足这些需求,为适应这宗形势的需求,从linux2.6内核开始提供了全新的设备模型2. 总线    2.1 描述结构    2.2 注册    2.3 注销void  bus_unr

2016-05-17 21:52:45 5448 1

原创 Linux按键驱动程序设计详解---从简单到不简单

混杂设备驱动模型:1. 混杂设备描述        在Linux系统中,存在一类字符设备,它们拥有相同的主设备号(10),单次设备号不同,我们称这类设备为混            杂设备(miscdevice).所有的混杂设备形成一个链表,对设备访问时内核根据次设备号查到相应的混杂设备。         混杂设备也是字符设备!     linux中使用struct miscdevi

2016-05-15 21:01:05 15602 10

can总线资料

can总线相关文档以及可以提供参考的can开源源码

2016-06-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除