随笔分类 - 算法与数据结构
摘要:二叉树的结构中可以看到,会有许多空指针,这有浪费了资源。n个节点的二叉树共有n-1条分支。(除了根没有分支)对于这样的结构: | left-child | data | right-child |,总分支指针(2n),空闲指针有(2n-(n-1))=n+1个分支。能不能利用空闲指针呢?通过利用这些空闲指针,方便我们索引这颗二叉树呢?比如我们找到了头,就能够通过头节点的孩子节点和线索索引来访问整颗树,这有就没有必要像上篇文章那样,通过递归的调用 前序/中序/后序遍历整棵树。这里注意:线索化二叉树实质上通过一种遍历方式,将空闲指针指向该遍历方法下一个要访问的节点。即节约了空间,也提高了某些操作的效
阅读全文
摘要:树:是n(n>=0)个节点的有限集。n=0时称为空树。在任意一颗非空树中: (1)有且仅有一个特定的称为根的节点; (2)当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2、...、Tm,其中 每一个集合本身又是一棵树,并且称为根的子树。节点:a.根节点b.内部节点c.叶结点度:一个节点拥有的子节点个数。深度:树的层数。二叉树特点:a.每个节点最多两个子树。度=1)2.深度为k的二叉树至多有2k-1个节点(k>=1)3.任意二叉树,终端节点为n0,度为2的节点数位n2;则n0=n2+14.具有n个节点的完全二叉树的深度为【log2n】+15.如果对一颗有
阅读全文
摘要:栈的应用在进制转化过程中,其中10进制转化各种进制用处比较多。原理就是拿十进制的数不停的 去除 进制的模数 得到余数组合就是转化后的数。比如 (255)10 转化为 16进制 时候254/16=15 ...14 ---> E15/16=0...15 ---> F255 即为 0XFE注意到各个结果反过来才是最后的结果。想到栈的特点,这里可以用栈的结构,最先算出来的结果现存入到栈底,最后算出的在栈顶。然后出栈就可以得到最后的结果。这里我做一个10进制转16进制转化的程序。添加之前写的栈的程序:#include "stdafx.h"#includetypedef s
阅读全文
摘要:队列与栈不同的是,队列是先进先出(First In First Out),这种结构在操作系统底层调用中广泛应用,比如:键盘输入abc,先输入的a最先显示出来,依次b、c。再比如:在操作系统中,将要处理的任务加入队列中,当cpu有空闲时,出队进行处理。队列和栈一样,也有顺序队列和队链(不知道这个称呼对不对)。这里我们讨论队链:栈中使用的栈顶做标记,因为它只需要一个口就可以进出。队列使用两个元素做标记,分别是队头和队尾(front and rear)。通过这两个指针的指向来指示队列的进出。front 负责出队列(EnQueue)。rear 负责进队列(DeQueue)。看一个队列示意图:这里需要两
阅读全文
摘要:栈栈是一个重要的数据结构,在操作系统中应用非常广泛,特别在多任务操作系统中,进程与进程间的调用都需要用到栈。现实中最好的例子我认为是枪的弹夹,把子弹压入到弹夹盒子里面,先放进去的最后才能出来(FILO)frist in last out ,压入子弹的过程叫做进栈。开枪的过程叫出栈。用c来实现栈,主要操作是 初始化,判断空,出栈,进栈等。栈和链表一样可以分为两种,顺序栈和链栈。顺序栈实质上就是数组,移动栈顶指针指向就能操作顺序栈的基本操作,主要是对数组的下标判断和操作。0.链栈的数据结构:typedef struct stNode{ //栈的数据结构,一个数据和一个指针 int data;...
阅读全文
摘要:单链表缺点是每次都要从头开始索引,不能往回索引,很自然就会想一个办法,希望能够往回索引。这有双链表就产生了。0.双链表结构:typedef struct lNode{ int data; struct lNode* pri; struct lNode* next;}ltNode,*ptNode;增加了一个前驱指针,这有就可以向回索引了。1.双链表的初始化//1.双向链表的initvoid dlist_init(ptNode* head){ *head = (ptNode)malloc(sizeof(ltNode)); (*head)->data = 0; (...
阅读全文
摘要:最近学算法,做一个简单记录。把容易出错和混淆的地方记录一下。这里编程语言选择为C。什么是链表? 要搞清楚链表,首先要知道顺序表。顺序表也是我们常说的数组,数组有个最大的特点,它的存储空间在内存上是连续的。数组解决了我们编程中许多问题,如果我们事前不知道需要多大的内存,而我们在C中编程的时候不能够动态的申请数组(不能在程序中这样写:int array[n],其中n是你上一个计算中得出的值)。有人说,我申请大点,不需要的用其他数据填,针对我们现在的PC机貌似可以,但是为了节省空间和程序的优化性能考虑,我们需要能够动态的申请需要的空间。所以我们需要一个方能,能够动态申请空间。 C语言中malloc.
阅读全文
浙公网安备 33010602011771号