玩转数据结构

本文详细介绍了数据结构中的数组、栈、队列、链表和树的相关概念,包括时间复杂度分析、栈的实现与应用、链表的删除操作、二分搜索树的遍历和删除节点的方法。此外,还探讨了集合、映射和优先队列的实现,特别提到了避免二分搜索树退化的策略。
摘要由CSDN通过智能技术生成

数组时间复杂度

将1次resize均摊给2n+1;所以每次addLast操作,进行2次基本操作;均摊时间复杂度O(1)

复杂度震荡

addLast和removeLast操作同时考虑:

在n/2时,这个临界点,扩容和缩容;

解决方案:Lazy

当数组中的数据为实际的1/4时,再进行缩容操作

data.length / 2 != 0 //当数组元素;当data.length等于1时,数组不能分配0个大小;

栈和队列

栈是一种线性结构;

只能从一端添加元素,也只能从一端取出元素;这一端称为栈顶;

栈是一种后进先出的数据结构:LIFO

栈的应用

Undo操作(撤销)

栈的实现

栈的内容

Stack

1. void push(E)  //入栈

2. E pop()  //出栈

3. E peek()   //取栈顶元素

4. int getSize()  //返回栈大小

5. boolean isEmpty()   //栈是否为空

接口定义栈:基于动态数组实现

栈的复杂度分析

栈的应用:括号匹配-编译器

LeetCode 20题有效的括号 valid Parentheses

然后出栈匹配,当栈中所有的数据也都出栈后,所以匹配结束;

注:栈顶元素反映了在嵌套的层次关系中,最近的需要匹配的元素。

链表

1.特点

真正的动态数据结构

更深入的理解引用

更深入的理解递归

辅助组成其他数据结构

2.组成Linked List

数据存储在“节点”(Node)中

class Node{

     E e;

     Node next;

}

数组和链表比较

链表与递归

递归

本质,将原来的问题,转化为更小的同一个问题

解决链表中删除元素的问题

链表删除元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值