- 博客(18)
- 收藏
- 关注
原创 树的存储与遍历
一,树的存储结构1)顺序存储双亲表示法孩子表示法(顺序+链式存储)顺序表表示根结点的子结点,子结点则用//孩子表示法struct CTNode{ int child; //在数组中的位置 struct CTNode* nextChild;//下一个孩子};typedef struct { int data; struct CTNode* firstChild;//第一个孩子}CTBox;typedef struct { ...
2022-05-17 21:31:56
427
原创 线索二叉树
一,二叉树的中序遍历序列我们通过对二叉树的中序遍历可以得到一个线性表,我们称为中序遍历序列。与线性表相同,除了头结点没有前驱结点,最后一个结点没有后继结点。问题1:我们在对二叉树进行中序遍历的时候,都只能从根结点开始遍历。那我们可不可以从二叉树中的某一个结点开始,对整颗二叉树进行中序遍历。答案:没有办法,二叉树的缺陷,结点没有办法访问前驱结点。想要进行中序遍历只能从根结点开始。问题2:思路:从根结点出发,重新进行一次中序遍历,指针q记录当前访问的结点,指针pre记录上
2022-05-17 19:56:06
431
原创 二叉树的存储结构与遍历(先中后序遍历)
一,顺序存储对于完全二叉树,我们可以通过从上到下,从左至右的排序的并依次存在数组中。并通过结构体中的isEmpty来判断结点是否为空。但对于非结构体二叉树,特别的,我们将其各个结点按照满二叉树中的一一对应起来。通过一开始我们创建的isEmpty来判断起左右孩子是否为空。但这种方法,浪费空间有点多。所有不推荐用顺序存储来存储二叉树。二,链式存储每个结点有两个指针分别指向它的左右结点。代码实现如果我们要寻找p结点的父节点,就得从头遍历,然后找到
2022-05-08 18:28:47
1231
原创 树与二叉树的定义,性质
一,定义1)例如上面的思维导图也是树结构。可以理解成,有多个后继结点的链表。也同样的,结点只能向下查询,不能回访。*结点的度:往下有多少个结点。树的度:各个结点度的最大值。**度为m和m叉树的区别。2)无序树和有序树有序树:各个结点从左至右是有顺序的,位置不能互换。无序树:各个结点从左至右是无顺序的,可以互换位置。森林:多棵树组成的树林。二,二叉树(有序)1)几种特殊的二叉树满二叉树只有最后一层有叶...
2022-05-06 15:36:11
645
原创 串的定义和基本操作
定义串,即字符串(String)是由零个或者多个字符组成的有限序列。一般记为:如: S = ' HelloWorld!' *空格也算一个字符术语:子串:串中任意连续的字符组成的子序列主串:包含子串的串字符在主串中的位置:字符在串中的序列。子串在主串中的位置:以子串第一个字符所在主串的位置作为子串的位置。空串与空格串: M='' N=' '*串也是一种特殊的线性表,数据元素之间呈线性结构*串的基本操作,如增删改查等通常是以子串作为操作对象。串的存储结构.
2022-04-28 15:38:09
986
原创 栈和队列的应用
栈的应用引例:函数调用背后的过程void func1(int a, int b) { int x; func2(x); x = x + 10086;}void func2(int x) { int m, n;}int main(){ int a,b,c; func1(a, b); c = a + b;}函数调用的特点:最后被调用的函数最先执行结束。当程序在运行的时候,系统会为我们在内存中开辟一块空间,作为函数调用栈...
2022-04-27 16:46:53
249
原创 栈和队列的应用
一,栈的应用1)括号匹配写代码的时候用到的括号都是成双成对的出现,并且大小也相同。在集成编辑环境中,IDE就会为我们自己动检查括号是否匹配。我们可以用栈来实现这种功能。当遇见一个左括号,就表示入栈,遇见一个右括号就表示出栈。出栈后的左括号,与刚遇见的右括号进行匹配,如类型相同则匹配成功,反之则报错。在当遇见一个右括号,发现栈中没有元素了,也报错。扫描结束后,栈中还有元素,也报错。代码实现:基本操作#define MaxSize 10 //定义栈.
2022-04-25 15:53:29
1321
原创 队列的定义,实现与基本操作
定义:一头进另一头出的线性表(排队)术语:队头,队尾,空队列基本操作(静态数组式)定义与初始化#define Maxsize 10//定义队列中的最大个数typedef struct { int data[Maxsize]; int front, rear; //队头指针和队尾指针}SeQueue;//初始化队列void InitQueue(SeQueue &Q) { Q.rear = Q.front; //初始化时 队头 队尾指针指...
2022-04-24 17:43:02
2149
原创 栈的概念和顺序栈实现
栈一,基本概念可以看做是 只能在一端进行插入或者删除 的线性表重要术语:栈顶,栈底,空栈。特点:后进先出。插入,删除只能操作在栈顶的元素二,实现与存储(静态顺序数组结构)1)定义与初始化#define MaxSize 10 //定义栈中元素的最大值//初始化栈void InitStack(SqStack& S) { S.top = -1;}//声明一个栈void testStack() { SqStack S; //声明一...
2022-04-23 17:06:46
1288
原创 单链表的定义,插入与删除,查找,建立。
链表分为:单链表,双链表,循环链表,静态链表一,单链表的定义在内存空间中,各个节点在逻辑上相邻,但在物理上不相邻。在单个的结点内部需要存放 数据域 和 指针域(存放指向下一个结点的指针)优点:不要求一大片连续空间,改变容量方便缺点:不可随机存取,要耗费一定的空间存放指针。定义typedef struct LNode{ //定义单链表结点类型 int data; //每个节点存放一个数据元素 struct LN...
2022-04-20 17:00:57
3355
原创 顺序表的查找
一,按位查找//直接返回顺序表中第 i 个数据即可。int GetElem(SqList L, int i) { //需要验证i是否合法。 return L.data[i - 1];}时间复杂度: o(1);二,按值查找//顺序表的按值查找int LocateElem(SeqList L, int e) { //寻找表中值为e 的元素 for (int i = 0; i < L.length - 1; i++) { //从头元素检索...
2022-04-18 21:43:02
1569
原创 顺序表的定义,增删改查
顺序表的特点1)随机访问:即可在o(1)时间内找到第i个元素。 {data[i-1]}2)存储密度高,每个结点只存储数据元素3)拓展容量不方便4)插入,删除不方便一,顺序表的定义1)静态分配内存空间//静态分配数组(无法改变顺序表大小)#define MaxSize 10typedef struct { int data[MaxSize]; int length;}SqlList; //顺序表的定义类型//初始化一个顺序表void InitLi...
2022-04-18 20:44:33
271
原创 初识指针(C语言)
一,内存地址内存是电脑中运行程序的存储器。为了有效的使用内存,就把内存划分为一个个小的内存单元,每个内存单元的大小是一个字节。为了有效访问到每个单元,就给内存单元进行编号,这些编号就是内存单元的地址。二,内存是如何编号的电脑有32位和64位如32位就是有32跟地址线 -- 物理的线 。其可以产生32位的二进制序列000000.....011111.....111111.....最大有2^32次方个序列,其每一个都作为内存单元的地址编号所以32位的机器最
2022-04-18 16:38:53
628
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人