Java复习Day25

数据结构基础概念

1. 栈 (Stack)

栈是一种特殊的线性表,其元素插入和删除操作只能在同一端进行。允许操作的一端称为栈顶(TOP),另一端固定不动称为栈底(BOTTOM)。栈遵循后进先出(LIFO)原则,即最先入栈的元素位于栈底,最后入栈的元素位于栈顶;出栈时顺序相反。

术语说明:

  • 压栈(Push):插入元素的操作,也称进栈/入栈
  • 出栈(Pop):删除元素的操作,也称弹栈

Java中的Stack类继承自Vector,常用方法包括:

  • push(E):压栈操作
  • pop():获取并移除栈顶元素
  • peek():获取栈顶元素但不移除
  • empty()/isEmpty():判断栈是否为空
  • search(Object):查找元素位置,未找到返回-1

2. 递归

2.1 简介

递归是一种通过将问题分解为同类子问题来求解的方法,表现为方法自我调用。类比查词典:当遇到不理解的词时查阅,若解释中仍有不理解的词则继续查阅,直到获得明确解释,再回溯理解最初的问题。

2.2 特征

  • 终止条件:必须有明确的递归出口
  • 自身调用:子问题与原问题求解方法一致

2.3 解题思路

  1. 明确方法功能
  2. 确定递归出口
  3. 建立递推关系式

2.4 应用场景

  • 阶乘问题
  • 二叉树深度计算
  • 斐波那契数列(0,1,1,2,3,5,8,13...)
  • 快速排序
  • 文件遍历
  • XML文件解析

缺点:

  • 内存消耗较大
  • 若无终止条件或递归过深,易导致栈溢出(StackOverflowError)

3. 队列

3.1 简介

队列是操作受限的线性表,只允许在表的一端(队尾Rear)插入,另一端(队头Front)删除。其特性为先进先出(FIFO)。

分类方式:

  • 按方向:单向队列、双向队列
  • 按阻塞情况:阻塞队列、非阻塞队列
  • 按容量限制:有界队列、无界队列

3.2 Queue接口

继承自Collection,提供两种形式的操作:

  • 失败时抛出异常
  • 失败时返回null/false

3.3 Deque接口

双向队列,继承自Queue(Double-end queue),支持在两端进行插入、删除和获取操作,可实现FIFO或LIFO。

使用建议:

  1. 推荐使用Deque而非Stack实现栈结构
  2. 原因:
    • Deque是接口,遵循面向接口编程原则
    • Stack继承自Vector,使用synchronized实现线程安全

你可能感兴趣的:(java,开发语言)