zl程序教程

您现在的位置是:首页 >  后端

当前栏目

数据结构

2023-09-14 08:58:30 时间
package 数据结构;

public class 堆 {

}
/*
 * 先进先出
 *     存储,从入口入,从出口出,出口类似在底部位置
 *     举例:
 *         打气筒打气
 * 
 */
package 数据结构;

public class 栈 {

}
/*
 * 
 * 栈:
 *     先进后出
 *     格子形,出口在上,入口也在上
 *     进入的方式叫做压栈,就是栈中只有一个元素的时候第二个添加将栈中的原来元素向下压以得到空间给后面的元素,
 *  释放资源的时候只能从后面进入的开始释放
 *  
 *  举例子:子弹夹
 * 
 */
package 数据结构;

public class 数组 {
    /*
     * 数组
     * 存储同一组类型的多个元素的容器。有索引,方便我们的获取
     * 定义一个数组:  int[] arr={11,22,33,44,55};
     * 
     * 需求1:
     *         我要取得33这个元素,怎么办?
     *             通过下标取得: arr[2]
     * 需求2:
     *         我要在33这个元素后面添加一个新元素88,怎么办?
     *             定义一个新数组,长度为原来数组+1
     *             遍历旧数组,找元素,判断是否是33
     *                 33以前按照之前顺序排序,然后跟上88,再跟上33和后面的元素
     * 需求3:
     *         我要删除33这个元素怎么办?
     *             定义一个新数组,长度为原来数组-1
     *             遍历旧数组,找元素,判断是否为33
     *             33以前按顺序排在新数组,跳过33,将后面的元素连接在新数组后面的位置
     * 数组的特点:
     *         查询快,增删慢
     */
}
package 数据结构;

public class 链表 {

}
/*
 * 链表:由一个链子把多个节点连起来组成的数据
 * 节点:由数据和地址组成,可能包含多个地址,和链表的类型有关
 * 
 * 一个节点有一个内存地址值,指的是它的本身的。从单向链表讲过去
 *     节点分为两部分,第一部分为节点存储的数据,第二个位另一个节点的地址值,通过地址值,第一个节点链接到第二个节点上。剩下的节点也是这样链接上一个节点,最后一个节点存储的地址值为null
 * 
 * 一个链表中有刚才的数组的元素。
 * 需求1:如何获取33这个元素
 *         从头开始,一个一个找
 * 需求2:我要在33这个元素的后面添加一个新元素88,怎么办?
 *         88这个节点应该有自己的地址,内存地址
 *         将33的节点记录的地址值用一个变量temp接受
 *         将33节点的地址值替换成88的内存地址
 *         将88的地址值替换成temp
 * 需求3:我要删除33这个元素怎么办?
 *         找到33这个节点,用一个temp记录33的地址值
 *         将那个地址值赋值给33的上一个节点,让它替换成33的地址值
 *链表:
 *        查询慢,增删快
 *
 *我们上面讲解的是单向链表,如果将最后一个元素和第一个元素连接起来,就是将第一个节点的内存地址赋值给最后一个节点的地址值,就成为了循环节点。
 *如果每个节点由3部分组成,分别存储前一个节点和后一个节点的地址值和节点的值,就可以组成双向列表
 *当然,收尾相连,我们就可以组成双向循环链表了。
 *     
 */
package 数据结构;

public class 二叉树之红黑树 {

}
/*
 * 二叉树
 * 首先一个根节点,每一个根节点最多有两个子节点
 * 红黑树:
 *     二叉树中特殊的一种 。
 *         特点:自平衡。 就是二叉树的节点一个根只有满了两个节点才会往下走,二叉树是平衡的
 * 红黑二叉树的数据插入特点:
 *     第一个元素作为根元素。
 *     接下来的元素和根节点比较,比根节点小的就放左边,比根节点大的就放右边,和根节点一样大的无法插入。
 *     接下来的元素还是这样教插入,先和根节点比较,判断左边右边,如果根节点那一端有元素,就将那个元素当成根节点再比较插入
 * 红黑二叉树取数据:
 *     按照左中右的顺序取出数据
 */