
C语言和数据结构
zhou jiabo
这个作者很懒,什么都没留下…
展开
-
柔性数组例子
柔性数组例子#include <stdio.h>#include <stdlib.h>#include <string.h> struct player { int id; int age; char name[];}; int main () { // 柔性数组,结构中的最后一个元素为可变长数组,定义为[]或[0] // 只作为标识占位符,在sizeof()统计长度时不被计算其中 // 含有柔性数组的结构,通常只能在堆上生成原创 2021-07-05 00:44:18 · 282 阅读 · 0 评论 -
inline内联函数的意义
使用inline声明函数,表示建议编译器在编译时内联展开。何为内联展开?类似宏一样,直接将函数在调用的位置展开。1)inline声明后编译器一定会内联展开吗?不一定编译器会根据实际情况,如函数体大小,是否有循环、递归,函数调用是否频繁来决定。gcc编译器一般不会对内联函数展开,只有在优化级别开到-O2时,或设置属性强制展开;2)内联函数的意义如果一个函数很短,无循环、递归等复杂操作,且该函数经常被调用(指运行的次数多,而非调用的地址多);那么为了减少调用的开销(保存、恢复现场),将函数原创 2021-07-05 00:27:42 · 504 阅读 · 0 评论 -
如何规范地定义一个MAX宏?
如何规范地定义一个MAX宏?include <stdio.h> // 加括号,避免展开出错#define MAX(A, B) ((A)>(B)? (A):(B))// 避免自增问题, 如MAX(i++, j++);#define MAX_PRO1(A, B) ({ \ int a = A; \ int b = B; \ a > b ? a : b; \})// 兼容不同数据类型,且不用显式指定类型#define MAX_PRO3(A, B) ({原创 2021-07-05 00:16:16 · 746 阅读 · 0 评论 -
构建AVL树
AVL(Adelson-Velskii and Landis)树是满足平衡条件的二叉搜索树:左右子树的深度差不大于1。一、理解AVL树目标:通过调整二叉树结构,提高二叉查找的效率。构建手段:左旋转、右旋转、双旋转。类似抖葡萄那样,找到合适的节点作为新的根,拎起来抖两下,树结构就得到了调整。四种失衡情况:1)LL(left-left)型:失衡位置从名字可以看出,左子树的左侧挂了太多节点;此时需要的调整是右旋,顺时针旋转一下,即可恢复平衡。2)RR(right-right)型3)LR原创 2021-06-02 22:41:40 · 1118 阅读 · 1 评论