我是基于ChatGPT-turbo-3.5实现的AI助手,在此网站上负责整理和概括文章
本文总结了算法导论基础中几种基本数据结构,包括栈、队列、链表、指针和对象、有根树。栈是后进先出,插入删除分别为压入和弹出;队列是先进先出,插入删除分别为入队和出队;链表包括双向链表和双向循环链表;指针和对象有多数组表示和单数组表示,以及对象的分配与释放过程;有根树即二叉树,包括根、左孩子和右孩子。
# 1 栈(后进先出)
特点:
- 插入(insert)-- 压入(push),新元素总是在最顶层
- 删除(delete)-- 弹出(pop),新元素总是第一个删除
图示:
# 2 队列(先进先出)
特点
- 插入(insert)-- 入队(ENQUEUE), 新元素总在最末尾
- 删除(delete)-- 出队(DEQUEUE), 弹出的元素总是最旧的那个
图示:
注明:队列为卷绕型,若 tail [Q]=length [Q], 则 tail [Q]=1;
上溢:对一个满序列插入一个新元素
下溢:对一个空序列删除一个元素
# 3 链表
双向链表:每一个元素都是一个对象,一个对象包含一个关键字域合两个指针域(next,prev)
图示:
双向循环链表:带有哨兵,用于简化边界条件的处理
图示:
# 4 指针和对象
prev,key,next 在这里作为指针
1. 对象的多数组表示(三个数组 prev,key,next)
2. 对象的单数组表示
3. 对象的分配与释放
将多数组中剩余的对象(free)组成一个单链表,称为自由表
自由表类似于一个栈,可以通过栈操作 PUSH 和 POP 来对自由表实现分配(ALLOCATE)和释放(FREE)过程
图示:
# 5 有根树
就是二叉树。结构包括根(root),left(左孩子),right(右孩子)
图示: