1 定义
指的是数据在计算机中存储的结构及存储的方式。
2 分类
2.1 数组
数组的特点:在内存中是连续的,通过索引可以访问到数组中的每一个元素。
2.2 栈
栈的特点:先进后出
栈的使用
// 新建栈
Stack<Character> stack = new Stack<>();
栈的方法
Modifier and Type | Method and Description |
---|---|
boolean | empty() 测试此堆栈是否为空。 |
E | peek() 查看此堆栈顶部的对象,而不从堆栈中删除它。 |
E | pop() 删除此堆栈顶部的对象,并将该对象作为此函数的值返回。 |
E | push(E item) 将项目推送到此堆栈的顶部。 |
int | search(Object o) 返回一个对象在此堆栈上的基于1的位置。 |
相关例题:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]'的字符串 s ,判断字符串是否有效。有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
2.3 队列
队列特点:先进先出
2.4 链表
链表在计算机中的存储地址是不连续的。
- 单向链表
- 双向链表
- 循环链表
数组与链表的区别:
- 数组:查询效率高,插入、删除都包含了移位操作,因此效率低。
- 链表:查找效率低,插入、删除效率高。
2.5 二叉树
- 完全二叉树
若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。
- 满二叉树
除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
- 二叉树的遍历
- 前序遍历
- 中序遍历
- 后续遍历
二叉树的性质:
- 性质1:二叉树的第i层上至多有2^(i-1)(i≥1)个节点 。
- 性质2:深度为h的二叉树中至多含有2^h-1个节点 。
- 性质3:若在任意一棵二叉树中,有n0个叶子节点,有n2个度为2的节点,则必有n0=n2+1 。
- 性质4:具有n个节点的完全二叉树深为log2x+1 (这里是log以2为底x的对数)(其中x表示不大于n的最大整数) 。
- 性质5:若对一棵有n个节点的完全二叉树进行顺序编号(1≤i≤n),那么,对于编号为i(i≥1)的节点:
当i=1时,该节点为根,它无双亲节点 。
当i>1时,该节点的双亲节点的编号为i/2 。
若2i≤n,则有编号为2i的左节点,否则没有左节点 。
若2i+1≤n,则有编号为2i+1的右节点,否则没有右节点 。