数据结构和算法学习理解C语言实现(四)

图 图是一种比较复杂的数据结构,这是一种网状结构,并且任何数据都可以用图来表示 图的相关概念 1)有向图 如果图G中的每条边都是有方向的,则称G为有向图。在有向图中,一条有向边是由两个顶点组成的有序对,有序对通常用尖括号表示。有向边也被称为弧,将边的始点称为弧尾,将边的终点称为弧头。 2)无向图 如果图中的每条边都是没有方向的,这种图被称为无向图。无向图中的边都是顶点的无序对,通常用圆括号来表示无 …


阅读全文 


数据结构和算法学习理解C语言实现(三)

树 “树”主要有根、干、枝、叶组成。在数据结构中树被引申为一个集合以及在该集合上定义的一种关系构成,包括根节点和若干课子树。 单个节点是一棵树,树根就是该节点本身。设T1,T2,···,Tk是数,它们的根节点分别为n1,n2,···,nk。如果用一个新节点n作为n1,n2,···,nk的父亲,得到一颗新树,节点n就是新树的根。称n1,n2,···,nk为一组兄弟节点,它们都是节点n的子节点, …


阅读全文 


数据结构和算法学习理解C语言实现(二)

线性表、队列和栈 在C语言数据之间一般存在3种疾病结构 线性结构:数据元素间是一对一关系 树形结构:数据元素间是一对多关系 网状结构:数据元素间是多对多关系 线性表 线性表是一种最基本、最简单、最常用的数据结构。在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。因为这些特殊线性表都具有自己的特性,所以掌握这些特殊线性表的特性,对于数据运算的可靠性和提高操作效率是至关重 …


阅读全文 


数据结构和算法学习理解C语言实现(一)

常用的算法思想 枚举算法思想 将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,保留合适的,丢弃不合适。在C语言中,枚举算法一般使用while循环实现。使用枚举算法解题的基本思路如下。 确定枚举对象、枚举范围和判定条件。 逐一列举可能的解,验证每个解是否是问题的解。 枚举算法一般按照如下3个步骤进行。 题解的可能范围,不能遗漏任何一个真正解,也要避免有重复。 判断是否是真正解的 …


阅读全文 


C指针知识点收集

C指针知识点收集 1.C使用内存 静态/全局内存(静态声明的变量,全局变量也使用这部分内存。静态变量的作用域则局限在定义它们的函数内部) 自动内存(函数内部声明,只在函数被调用时才创建,只在函数内部调用。) 动态内存(内存分配在堆上,可以根据需要释放。) 2.C的动态内存分配实际上就是通过使用指针实现的。malloc和free函数分别用来分配和释放动态内存。动态内存分配可以实现变长数组和数据结 …


阅读全文 


php Curl遇到的坑

curl是什么 curl 模拟浏览器请求,可以获取内容,支持浏览器类型,cookie和ip等。curl性能上也比file_get_contents高,所以一般获取api都用curl方式。 curl在使用过程发现的问题 首先,curl是网络访问,php不同项目通信时候使用curl来调用http,非常消耗性能。 例子1:前端有多个获取用户id的api,如果用户存在就直接返回用户id,不存在就用curl …


阅读全文 


web高并发的理解和发现(二)

CAP理论 作为web开发人员必须需要知道理解CAP理论。 CAP理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。 Consistency 一致性 一致性指“all nodes see the same data at the same time”,即所有节点在同一时间 …


阅读全文 


编程习惯

编程习惯 1.写功能前先准备好日志记录,查询的工作。这个非常重要,可以减少后期排查问题的时间,减少手足无措。 2.模块化要提前考虑,方便后期修改。一定要减少复杂度,不要所有的东西全部放在一个方法中。 3.写完功能测试最需要的是压力测试,这样能尽量减少上线之前功能在高并发下出现问题的几率,提高程序的健壮性。 这些事情肯定会牺牲编程的时间,不过经过这几年的编程过程中发现按照上面的做法做,后期排查问题能 …


阅读全文 


web高并发的理解和发现(一)

高并发的理解 发现问题 这几天登录服务器上线,发现注册新用户数据库有多条记录!! 跟踪分析问题 查询nginx的访问日志发现有相同的请求同时请求。 查看代码逻辑发现创建新用户时,先查询mysql是否有相同的用户udid。如果有,那么直接返回用户主键id。没有就插入一条数据。 逻辑非常简单,也没有用上缓存。 本地重现 ab创建注册接口。10个用户并发,100个人次。 ab发现数据库出 …


阅读全文 


C Primer Plus阅读学习(七)

数组和指针 关键字:static 运算符:&、*、(一元) 如何创建并初始化数组 指针(在已学过的基础上)、指针和数组的关系 编写处理数组的函数 二维数组 数组 数组由数据类型相同的一系列元素组成。需要使用数组时候,通过声明数组告诉编译器数组中内含多少元素和这些元素的类型。编译器根据这些信息正确的创建数组。 int main(void) { float candy[365]; /* …


阅读全文