java数据结构和算法

常见的数据结构

  • 数组—>方便通过下标随机访问数据
    • 有序数组
    • 无序数组
    • 数组大小一旦确定无法变更

    • 先进后出
    • 只能压入(push)/查看(peek)/删除(pop)栈顶
    • 无法查找
  • 队列
    • 先进先出
    • 从队首删除(remove),从队尾插入(insert),查看(peek)队首
    • 循环队列
      • 环绕式处理
    • 优先级队列
  • 链表
    • 单链表
      • 在链首插入(因为没有序号,只有相对位置)
      • 在特定数据后插入
      • 删除特定数据
    • 双端链表
      • 可以在链首和链尾插入
      • 因为删除最后一个数据后无法维护链尾,所以无法删除任何数据
    • 双向链表
      • 无删除限制
    • 有序链表

    • 一个根节点
    • 二叉树
      • 每个父节点至多两个子节点
      • 搜索二叉树
        • 左子节点比父节点小
        • 右子节点比父节点大
数据结构子结构描述特点插入/删除查找遍历
线性表链表以相对位置放置数据方便扩展O(1)O(N)O(N)
数组以绝对位置放置数据大小一旦确定就无法修改O(1)O(N)O(N)
有序数组按关键字序列以绝对位置放置数据二分查找O(1)O(log2Nlog2⁡N)O(N)
先进后出模拟栈O(1)++++
队列先进先出模拟队列O(1)++++
二叉树父节点至多有两个子节点模拟现实树状对象O(1)O(N)递归
搜索二叉树实用,平衡插入和查找的效率方便决定位置查找O(log2Nlog2⁡N)O(log2Nlog2⁡N)递归

算法

算法描述复制比较交换
冒泡通过n次循环:两两比较并交换,使得每次循环后选出第n值O()O(N2/2N2/2)O(N2N2)
选择通过n次循环:与选出的最值比较并交换,使得每次循环后选出第n值。与冒泡相比减少了交换次数O()<=O(N2/2N2/2)O()
插入从左边一个数的有序数组开始,右边的元素依次插入到左边的有序数组。当数量较多时二分查找的使用使得比较次数减少。O()O()O()
希尔O()O()O()
快速O()O()O()
基数O()O()O()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值