起风了

“路海长 青夜旷 越过群山追斜阳”

数据结构基础温故-4.树与二叉树(上)

数据结构基础温故-4.树与二叉树(上)缩略图
前面所讨论的线性表元素之间都是一对一的关系,今天我们所看到的结构各元素之间却是一对多的关系。树在计算机中有着广泛的应用,甚至在计算机的日常使用中,也可以看到树形结构的身影,如下图所示的Windows资源管理器和应用程序的菜单都属于树形结构。树形结构是一种典型的非线性结构,除了用于表示相邻关系...

数据结构基础温故-4.树与二叉树(中)

数据结构基础温故-4.树与二叉树(中)缩略图
在上一篇中,我们了解了树的基本概念以及二叉树的基本特点和代码实现,还用递归的方式对二叉树的三种遍历算法进行了代码实现。但是,由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。因此,我们使用非递归(这里主要是循环,循环方法比递归方法快, 因为...

数据结构基础温故-4.树与二叉树(下)

数据结构基础温故-4.树与二叉树(下)缩略图
上面两篇我们了解了树的基本概念以及二叉树的遍历算法,还对二叉查找树进行了模拟实现。数学表达式求值是程序设计语言编译中的一个基本问题,表达式求值是栈应用的一个典型案例,表达式分为前缀、中缀和后缀三种形式。这里,我们通过一个四则运算的应用场景,借助二叉树来帮助求解表达式的值。首先,将表达式...

你必须知道的指针基础-1.预备篇:搭建GCC开发环境

你必须知道的指针基础-1.预备篇:搭建GCC开发环境缩略图
一、关于GCC编译器   GCC(GNU Compiler Collection)是一套功能强大、性能优越的编程语言编译器,它是GNU计划的代表作品之一。GCC是Linux平台下最常用的编译器,GCC原名为GNU C Compiler,即GNU C语言编译器,随着GCC支持的语言越来越多,它的名称也逐渐变成了GNU Compiler Collection。下面对GCC的基本...

你必须知道的指针基础-2.指针的声明和使用及数组和指针的关系

你必须知道的指针基础-2.指针的声明和使用及数组和指针的关系缩略图
一、计算机知道数据类型吗? 1.1 神奇的数据类型   At first,计算机中绝大部分数据都放到内存中的,不同的数据放到不同的内存区域中。But,内存角度没有数据类型,只有二进制;数据以字节(8位二进制)为单位存取。不同数据类型占据不同的字节,例如在32位系统中:int 为4个字节,short为2个字节(下面如...

你必须知道的指针基础-3.指针的移动及指针的危险

你必须知道的指针基础-3.指针的移动及指针的危险缩略图
一、指针的移动 1.1 指针的向前及向后移动   指针每次加一就是指针向前移动指针类型对应的字节数。下面通过一个int指针来指向一个int数组,看看指针的加法运算到底是个什么鬼? int nums[]={33,55,77,88,99}; int* ptr = nums; printf("%d\n",*ptr); ptr++; // ptr是int类型的指针,所以向后...

你必须知道的指针基础-5.指针的几个小应用案例

你必须知道的指针基础-5.指针的几个小应用案例缩略图
一、使用指针传出分解后的数字   实现一个方法“多个返回值”的效果:返回一个三位数数字的个位、十位、百位。这里,我们借助指针来”返回“分解后的结果。这种应用也是最常见的指针应用。 // fun1:分解一个三位数,传递个位、十位和百位数字int parseNumber(int num,int* g,int* s,i...

你必须知道的指针基础-6.内存的初始化及结构体的使用

你必须知道的指针基础-6.内存的初始化及结构体的使用缩略图
一、内存的使用 1.1 你创建的内存区域可能是脏的   当我们创建一个内存区域的时候,内存中的数据可能是乱七八糟的(可能是其他代码用过后遗留的数据),如下面一段代码: int main(int argc, char *argv[]){ // 下面申请的20个字节的内存有可能被别人用过 char chs[20]; // 这个代码打印出来的...

你必须知道的指针基础-7.void指针与函数指针

你必须知道的指针基础-7.void指针与函数指针缩略图
一、不能动的“地址”—void指针 1.1 void指针初探   void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据。和用int表示指针异曲同工,只是更明确是“指针”。   因此void*只能表示一个地址,不能用来&取值,也不能++--移动指...