自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 资源 (7)
  • 收藏
  • 关注

原创 如何判断一个结构体的大小

对于嵌入式系统来说,内存很宝贵,那么在编程的时候就要尽量使自己用的数据结构所用的内存少,而结构体是C编程中经常用到的结构,保证结构体大小尽量的合理是很重要的。下面说一下如何判断一个结构体的大小。首先需要了解总线宽度和自然边界这俩个概念,编译器在分配结构体时根据这俩个因素来计算偏移量和空间占用。总线宽度:总线宽度就是一个处理器访问周期最多可以访问多少位的数据。总线宽度分为BUS16,BU

2015-08-23 10:59:02 3941

原创 C语言中的函数指针

一直觉得函数指针是个很难的东西,其实函数指针和一般的指针一样,挺简单的。一,函数指针的定义函数指针,顾名思义就是指向函数的指针,就是指向函数存储区域起始地址的指针。先看一下它是如何声明的:char* (*pf)(char *,char *);这条语句声明了一个指向函数的指针,这个函数有俩个字符指针的参数,也返回一个字符指针。有时候容易搞错函数指针和一般的函数声明,比如说:cha

2015-08-21 11:27:33 827

原创 我对嵌入式软件的理解

嵌入式软件就是给专门的嵌入式系统设计的软件,和一般的PC软件差别不是很大,主要的区别在嵌入式系统对功耗和内存大小上有严格的限制,所以嵌入式软件一定要精简,高效。一个嵌入式系统一般都包含以下几个部分:cpu,存储器,电源,接口,功能模块电路。而嵌入式软件就是用来驱动硬件工作以达到系统的工作目的。由于嵌入式系统的内存有限,所以软件大部分是由C写的,因为C++,java等语言虽然方便,但是很费内

2015-08-19 11:09:32 5512

原创 图算法之拓扑排序

拓扑排序是对有向无圈图的顶点的一种排序,它使得如果存在一条从vi到vj的路径,那么在排序中Vj出现在Vi后面。一个简单的求拓扑排序的算法是先找出任意一个没有入边的顶点,然后我们显示该顶点,并将它和它的边一起从图中删除。然后为们对图的其余部分应用同样的方法处理。但是这个方法有一点不好,就是每次都要找入度为0的顶点,这种顶点一般很少,如果图很大的话,每次都遍历一遍就浪费很多时间。升级版是先计算每一个顶

2015-08-11 22:30:48 2864

原创 队列的C语言实现

队列不同于栈,它是先进先出,即先入队列的元素提取时也要先出队列。队列可以用数组实现也可以用链表实现,挺简单的,但是很有些情况下很有用。它的实现只要维持好队首和队尾指针就好了。下面是我实现的链表队列。queue.h#ifndef __QUEUE_H#define __QUEUE_H#include #include struct QueueNode;struct queue;

2015-08-11 22:13:58 565

原创 图的基本知识

一:图的定义一个图G=(V,E)由定点集V和边集E组成,每一条边都是一个点对(v,w),其中v,w属于V。如果点对是有序的,那么图就叫做有向的。有向的图有时也叫做有向图。定点v,w邻接当且仅当(v,w)属于E。有时候边还有第三种成分,称为权或值。图的一条路径是一个顶点序列W1,W2,W3~Wn,使得(Wi,Wi+1)属于E,这样一条路径的长是该路径上的边数,它等于N-1.。从一个顶点到它自

2015-08-11 11:34:28 697

原创 散列表的C语言实现-开放定址法

头文件:#ifndef __HASHTABLE_H#define __HASHTABLE_H/*********************(平方)开放定址散列法***************///如果有冲突发生,那么就尝试另外的单元,直到找到空的单元为止typedef unsigned int index;typedef index position;typedef int E

2015-08-09 11:25:07 1956

原创 排序算法的C语言实现-快速排序

快速排序是在实践中最快的已知排序算法,它的平均运行时间是O(NlogN),该算法之所以特别的快,主要是由于非常精炼和高度优化的内部循环。它的最坏情形的性能为N^2.快速排序由下列简单的四步组成:1.如果S中元素个数是0或1,则返回。2.取S中任以元素V,称之为枢纽元3.将S分成俩个不相交的集合,前一个元素都小于V,后一个元素都大于V。4.返回quicksort(S1)后,加上V

2015-08-09 11:14:37 1334

原创 排序算法的C语言实现-归并排序

归并排序以O(NlogN)最坏时间运行,而说使用的比较次数几乎是最优的,它是递归算法的一个很好的实现。这个算法中基本的操作是合并俩个已排序的表,因为这俩个表是已排序的,说以如果将输出放到第三个表中时该算法可以通过对输入数据一趟排序来完成。基本的合并算法是取俩个输入数组A和B,一个输出数组C,以及三个计数器Aptr,Bptr,Cptr,它们的位置于对应数组的开端。A[Aptr]和B[Bptr]中的较

2015-08-09 10:53:55 1745

原创 排序算法的C语言实现-堆排序

堆(优先队列)可以用于花费NlogN时间的排序,基于该想法的算法叫做堆排序。因为堆的根总是最大的或者最小的,所以我们可以先将输入数组转换为最大或者最小堆,然后删除最大(最小值)也就是删除根。这在二叉堆的介绍中已经实现了。一种方法是将删除的元素放入另一个数组,但是这样会浪费一倍的内存空间。由于每次删除后堆的最后一个位置是空的,所以另一种方法是将删除的元素放入最后的位置。如果是最大堆,那结果就是顺序的

2015-08-09 10:28:48 3089

原创 排序算法的C语言实现-希尔排序

希尔排序和冒泡排序有点相似,但是不同的是希尔排序使用一个序列h1,h2.........hi,叫做增量序列。在使用增量hk排序后,所有像个hk的元素都被排序。希尔排序冲破二次时间屏障的第一批算法之一。它有一个重要性质:Hk排序的文件(此后将是Hk-1排序)将保持它的Hk排序性,这样各趟排序结果就不会打乱前面的排序。希尔排序的性能在实践中完全可以接受,即使是对于计算数以万计的length仍是如此,编

2015-08-08 21:57:02 575

原创 排序算法的C语言实现-冒泡排序

前面几个排序都很简单,只给出函数。void paopaoSort(int a[],int length){ int i,j,tmp; for(i=0;i<length;i++) { for(j=i;ja[j+1];j++) { tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; } }}

2015-08-08 17:58:27 421

原创 排序算法的C语言实现-插入排序

接下来的几篇文章编写一下几种常见的排序算法。大部分都是在《数据结构与算法分析-C语言描述》这本书上看的。void insertionSort(int a[],int length){ int i,j,tmp; for(i=1;i<length;i++) { tmp=a[i]; for(j=i;j>0&&a[j-1]>tmp;j--) { a[j]=a[j-1];

2015-08-08 17:55:23 385

原创 散列表的C语言实现-分离链接法

一:散列表的定义:散列表的实现常常叫做散列,散列是一种用于以常数平均时间执行插入,查找,删除的技术,但是,那些需要元素间任何排序信息的操作将不会得到支持,如findmin,findmax等等。散列表的优点很明显,它的查询时间为常数,速度非常快,缺点就是元素间没有排序,对于一些需要排序的场合不适用。理想的散列表数据结构就是一个包含有关键字的具有固定大小的数组,用一个散列函数来跟据关键字的值来将关

2015-08-04 17:31:44 3619 4

原创 AVL树的C语言实现

AVL树是带有平衡条件的二叉查找树。之所以需要平衡是因为有的二叉查找树很糟糕,像这样 上一篇文章中二叉查找树的删除总是用右子树的左子树叶子来代替删除节点操作容易造成左子树比右子树深很多的情况(每次删除的都是右子树的节点)。一颗AVL树是其每个节点的左子树和右子树高度最多差1的二叉查找树。空树的高度定义为-1.因为添加了平衡条件,所以我们在编写AVL树的基本操作时需要加入是否平衡的判断,以及

2015-08-03 12:10:35 583

原创 二叉查找树的C语言实现

一:二叉树二叉树是一颗树,其中么个节点的儿子数目都不能超过俩个。二叉树的实现:因为一颗二叉树最多有俩个儿子,所以我们可以用指针直接指向他们。这种定义和链表定义相同:Typedef struct TreeNode *ptrToNode;Typedef struct ptrToNode Tree;Struct TreeNode{ElementType Element;Tree left;Tree ri

2015-08-02 13:57:52 483

原创

一:树的定义树可以用几种方式定义。定义树的一种自然方式是递归的方法。一颗树是一些节点的集合,这个集合可以是空集,若非空,则一颗树由称作根的节点R以及0个或多个非空的树T1,T2...Tk组成,这些子树中没一颗的根都被来自根R的一条有向的边所连接。树其实就是由N个节点和N-1条边组成,边在编程中大部分情况下由指针来描述。实现树的一种方法可以是在每一个节点除数据外还要有一些

2015-08-02 13:35:01 443

离线安装nginx所需要的rpm包

离线安装nginx所需要的rpm包

2017-07-18

gantt图插件

ganttdemo

2017-06-12

arm开发常用辅助工具

一些arm开发时候可以用的小工具,开发的时候可以方便一点

2015-06-01

单片机C语言程序设计实训100例基于8051 Proteus仿真

单片机C语言程序设计实训100例基于8051 Proteus仿真,里面包含了100例程序,适合刚接出51单片机的童鞋看。

2015-06-01

java学习课件

java学习课件,很全面了,ppt里面的例子代码都包含了,想学java的同学可以下载下来看一下。

2015-06-01

java写的学生管理系统

上学期学java,自己写了一个学生管理系统练手,没有太大的技术含量,但还是想传上来,毕竟一直从这里找资料也没传过,希望指出写的不好的地方

2015-06-01

空空如也

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

TA关注的人

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