算法与数据结构基础

1.链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。链表在进行循环遍历时效率不高,但是插入和删除时优势明显

2.二叉树

二叉树:每个结点最多有两个子树的树结构
树的深度:树中最大的结点层
结点的度:结点子树的个数
二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;包含n个结点的二叉树的高度至少为(log2n)+1。
深度遍历

A 是第一个访问的,然后顺序是 B、D,然后是 E。接着再是 C、F、G。沿着每一个分支直到走到最后,然后才返回来遍历剩余的节点。
借助堆栈的数据结构,由于堆栈是后进先出的顺序,由此可以先将右子树压栈,然后再对左子树压栈,这样一来,左子树结点就存在了栈顶上,因此某结点的左子树能在它的右子树遍历之前被遍历。
广度遍历
A 是第一个访问的,然后顺序是 B、C,然后再是 D、E、F、G。依次遍历根节点,然后是左孩子和右孩子。要遍历完当前节点的所有孩子。
借助队列数据结构,由于队列是先进先出的顺序,因此可以先将左子树入队,然后再将右子树入队。
3.string to integer

    1. 若字符串开头是空格,则跳过所有空格,到第一个非空格字符,如果没有,则返回0.
    2. 若第一个非空格字符是符号+/-,则标记sign的真假。
    3. 若下一个字符不是数字,则返回0. 完全不考虑小数点和自然数的情况,不过这样也好,起码省事了不少。
    4. 如果下一个字符是数字,则转为整形存下来,若接下来再有非数字出现,则返回目前的结果。
    5. 还需要考虑边界问题,如果超过了整形数的范围,则用边界值替代当前值。
public class Solution {
    public int myAtoi(String str) {
        if (str.isEmpty()) return 0;
        int sign = 1, base = 0, i = 0, n = str.length();
        while (i < n && str.charAt(i) == ' ') ++i;
        if (str.charAt(i) == '+' || str.charAt(i) == '-') {
            sign = (str.charAt(i++) == '+') ? 1 : -1;
        }
        while (i < n && str.charAt(i) >= '0' && str.charAt(i) <= '9') {
            if (base > Integer.MAX_VALUE / 10 || (base == Integer.MAX_VALUE / 10 && str.charAt(i) - '0' > 7)) {
                return (sign == 1) ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            base = 10 * base + (str.charAt(i++) - '0');
        }
        return base * sign;
    }
}

4.数据结构
数据结构的主要任务就是通过描述对象的结构特征,包括逻辑结构在内的联系,然后把逻辑结构表示成计算机可实现的物理结构,从而方便计算机处理。
  1. 逻辑结构:数据对象中数据元素之间的相互关系,即数据对象中的数据元素的所有分布情况满足的规律。
  • 集合结构:这种结构中的数据元素除了属于同一数据对象之外没有其他的任何关系。
  • 线性结构:线性结构中的数据元素之间是一对一的关系,并且有一种先后次序关系。包括数组、线性表、栈、队列和串等等。
  • 树形结构:树形结构中的数据元素之间是一对多的层次关系。结点间具有层次关系,每一层的一个结点能且只能和上一层的一个结点相关,但同时可以和下一层的多个结点相关(二叉树、堆)
  • 图形结构:图形结构中的数据元素之间是多对多的关系。

       2.物理结构:又称存储结构,指的是逻辑结构在计算机中的存储形式。

  • 顺序存储结构:把数据元素存放到地址连续的存储单元里,数据间的逻辑关系和物理关系一致
  • 链式存储结构:把数据元素存放到任意的存储单元里,地址可以不连续,通过指针实现数据元素之间的逻辑关系。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值