T1: 栈和队列具有相同的(逻辑结构)
解: review一下:
def_抽象数据类型: 抽象数据组织及与之相关的操作, 即其包括{数据对象, 数据关系, 基本操作集}, 用于描述数据的逻辑结构和抽象运算(并列定义: 原子类型(int), 结构类型(struct)), 由于二者运算不同, 故抽象数据类型也不同
逻辑结构分类: 线性结构 or 非线性结构, 在做题的区分中, 只作线性 or 非线性的区分, 栈和队列都属于分支中: 线性结构->一般线性表
存储结构上, 二者都可以顺序存储或链式存储
二者的不同体现在数据的运算不同, 二者的存取操作不同, 栈LIFO, 队列FIFO
T7: 题目指所有操作, 则删除操作是最复杂的, 因而也就是最应该考虑的操作
删除操作不仅仅要知道当前的结点, 还要知道 指向它的所有节点, 插入操作只需要指导当前结点即可
因此, 对于双向循环链表, 已知表头/尾, 找表尾/头的很简单, 整体时间复杂度为O(1), 对于单向循环链表, 知道表头要找表尾, 必须遍历整个链表, 时间复杂度为O(n), 而知道表尾找表头是O(1), 故选择有表头的单循环
T20: 栈的存取时间复杂度都是O(1), 与栈的空间大小和栈内已有多少元素无关, AC排除
在数据结构中, 正数越界称上溢, 负数越界称下溢 (对一个-+1024的界限, 存+10000:上溢, 存-10000:下溢)
上述概念在OS中不同
对栈而言, 栈的存储空间是0~预设上限(顺序存储结构), 因此只能发生超出预设上限, 即只能发生上溢, 不可能发生下溢
对表理解为(满了还存->上溢 空了还取->下溢)
对于 节省存储空间, 降低发生上溢的 可能的理解: