简单认识程序的编译过程 在ANSI C 的任何一种实现中,存在两个不同的环境:本篇文章重点了解程序在编译(翻译)环境会执行的操作。为了可以更清楚的演示过程:这里创建了两个文件:程序的编译也叫做程序的翻译,主要可以分为这四个步骤:预编译、编译、汇编、链接。...
数据结构——堆的实现与应用 我们知道二叉树有两种存储结构:一种是链式结构,一种是数组结构。由于数组结构的特殊性,它通常被用来存储完全二叉树。而数组结构的完全二叉树中又有一个特殊的数据结构,那就是堆。这一节将介绍堆的实现和堆的应用。...
数据结构10——二叉树链式结构的实现 我们知道二叉树有两种存储表示方式:1.数组结构;2. 链式结构。数组表示法用于完全二叉树的存储非常有效,但表示一般二叉树,特别是形态剧烈变化的,存储空间的利用不是很理想。使用链式结构表示,可以克服这些缺点。这一节介绍二叉树链式结构的实现以及二叉树常见的一些基础问题。......
数据结构9——树和二叉树 前面我们学习的都是一对一的数据结构,可现实中还存在许多一对多的结构需要处理。这时就需要用到数据结构树了。树结构广泛存在于现实世界中,公司的组织机构,书的章节等。在计算机应用中,最为人们熟悉的就是磁盘中的文件夹,即文件目录,他包含文件和文件夹。树是n 个节点的有限集合,当n=0时, 该树为空树,否则,树为非空树。这是一个非空树的概念图(AB…H都是树的节点)。注意:在一个树结构中:每一个节点只能由一个父节点,但是可以由多个孩子节点。树和非树节点也可以称为结点。一个节点包含了一个数据项以及指向其他节点的分支 。
数据结构(七)---C语言实现栈和队列 1. 队列和栈都是线性表类型的数据结构,两个结构都可以从一端存入数据,区别是栈结构只能从存入数据的一端取出数据,而队列结构只能从出入数据的另一端取出数据。2. 队列和栈都可以用数组和链表来实现。不管是哪种实现方式,都应该尽可能高效的找到几个特殊的位置(栈顶、队列头、队列尾)。
深入认识数据结构(四)---解决单链表问题 1.解决单链表问题时需要时刻注意指针指向的位置,不能引用空指针。2.带头节点的链表可以让我们在向链表尾部插入元素时可以更方便。3.快慢指针可以帮助我们找到链表中特殊位置的节点
数据结构3--深入了解单向链表的实现 文章目录链表1.从顺序表到链表1.1用指针来实现链表中空间的联系1.2创建一个节点1.3头指针、第一个节点和最后一个节点头指针的创建2.管理链表中的元素2.1访问链表中的各个元素2.1.1打印链表2.1.2在链表中查找数据2.1.3改变链表中某一个节点的值2.2创建新的节点2.3在链表中添加节点2.3.1在链表的末尾添加节点2.3.2在链表的头部添加节点2.3.3在链表的指定位置添加节点在指定位置的前面添加节点在链表的指定位置后面添加节点2.4删除链表中的节点2.4.1删除链表最后一个节点2.4.2删除链表
深入认识数据结构(二)---顺序表的实现 文章目录顺序表顺序表中需要实现的功能:顺序表的初始化顺序表的容量向顺序表中添加元素在顺序表的末尾添加元素在顺序表的首部添加元素在顺序表中的指定位置添加元素向顺序表中删除元素删除顺序表末尾的元素删除顺序表首部的元素删除顺序表指定位置的元素销毁顺序表小结顺序表顺序表是线性结构中的一种----顺序储存结构该种结构的占用的是内存中的一块连续的空间(和数组相似)顺序表可以有两种实现方式:一种是用静态数组来实现,#define NUM 100typedef struct SeqList{ in
深入认识数据结构(-) 文章目录前言初识数据结构数据结构的分类线性结构树状结构图结构其他数据结构数据结构与算法算法的效率:时间复杂度时间复杂度的概念大O的渐进表示为什么可以渐进表示大O阶推导方法时间复杂度的计算空间复杂度空间复杂度的概念空间复杂度的计算时间与空间的取舍前言我们的计算机能够进行数值运算,但是由于不同数据之间的联系很少,有的数据之间完全没有任何联系,所以我们很难利用这些单一的数据去处理实际生活中的复杂问题。不过如果我们人为地让这些数据存在特定的联系,那我们就有了一种处理问题的工具和材料。这就和“巧妇难为无米之炊
深入理解C语言的指针(一) 文章目录深入理解指针地址字符指针指针数组数组指针数组指针的定义:**“&数组名”和“数组名”**数组指针的使用一维数组传参二维数组传参一级指针传参二级指针传参函数指针什么是函数指针怎样使用函数指针函数指针数组函数指针是什么函数指针的使用深入理解指针指针学习是C语言中十分重要的一个环节,利用指针,学会了指针的知识后,我们会对系统的内存有更为清晰的认识,也对更为底层的程序,这样就是C语言经久不衰的原因。地址了解指针之前我们要了解地址内存被划分为以字节为单位的空间每一个字节都有一个编号,这
深入了解C语言中的文件操作 文章目录文件操作为什么使用文件?什么是文件?:指的是磁盘上面的文件文件名:一个文件要有为一个文件标识,以便用户识别和辨认,文件的分类文件指针文件的打开与关闭`fopen`与`fclose`文件的读与写了解输入与输出:文件的顺序读写:`fputc`与`fgetc`使用`fputc`写文件使用`fgetc`读文件练习:文件的拷贝文件指针的偏移`fgets`与`fputs`函数`fputs``fgets``fprintf`与`pscanf`函数`fprint``fscanf`附:`sprintf`与`sscanf
C语言 :学习动态内存分配 文章目录C语言动态分配为什么存在内存分配?动态内存函数的介绍`malloc``free``free`函数的**作用原理**是:使用后将指针赋为`NULL``calloc`运用一次`calloc`函数`realloc`当第一个参数为空指针时:当第一个参数不为空指针的时候:常见的动态内存分配错误对空指针的解引用操作对动态开辟空间的越界访问对非动态内存使用free释放对同一块动态内存进行多次释放忘记释放动态空间柔性数组柔性数组的特点一个如何开辟包含柔性数组成员的结构柔性数组的优势C语言动态分配为什么存在内存分
C语言中的自定义类型:结构体,枚举,联合 文章目录前言1.结构体结构体的基础知识:结构的声明和变量的创建:结构体在变量在不同位置创建的区别特殊的声明使用typedef可以更方便的创建变量结构体变量的初始化:计算结构体的大小:**结构体内存对齐****C语言中结构体类型内存对齐的规则:**修改默认对齐数结构体作为函数的参数需要注意2. 位段什么是位段位段空间大小的计算2.联合计算联合的大小:联合的初始化简单的运用一下联合3.枚举枚举类型的定义枚举中常量的取值枚举的优点总结前言要精确描述一个事物,需要得到多方面的数据。在日常生活中,数据总是成组的出
数据在内存中的储存 文章目录数据的储存数据类型类型的基本归类整形有符号数和无符号数有符号数无符号数是否char 等于signed char呢?对于有符号数字和无符号数字的打印浮点型构造类型(自定义类型)指针类型空类型整形在内存中的存储原码,反码,补码正整数负整数大小端字节序设计一个小程序判断当前机器属于哪种字节序储存时数据发生截断以及整型提升例题1例题2浮点型在内存中的存储浮点型和整形在内存中的储存方式不同IEEE754对于有效数字M和指数E有一些特别的规定:拿出这些储存的数据(三种情乱)情况一:E不全为0或不为全1情况二:E
C语言数组的简单了解 文章目录数组数组的介绍数组声明例子数组声明的格式初始化数组完全初始化:不完全初始化:字符串与字符的初始化数组的储存与下标数组元素的输入与输出数组越界二维数组的创建与初始化二维数组的创建二维数组的初始化二维数组的储存二维数组行可以省略,但是列不能省略数组与函数数组元素作为函数的参数数组名作为函数的参数数组数组的介绍数组是数据类型相同的一系列元素,在使用数组时,需要先声明数组,根据这些信息编译器就可以成功创建数组数组声明例子float arr[30];//包含30个float类型的元素的集合char
C语言实现扫雷游戏 文章目录扫雷游戏work.c的内容1.为什么需要设置两个除名字外其他属性都相同的数组:2.为什么采用是字符数组而不是整形数组3.为什么不在直接在设置数组大小的时候设置为九行九列game.c的内容1.初始化数组的函数:init_board();2.布置雷的函数:set_mine();3.打印棋盘的函数:display();4.玩家操作的函数(包含了游戏何时结束):sweeper();game.h的内容完整代码网址扫雷游戏规则:根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。