顺序表与链表的不同点
顺序表 | 链表 |
---|---|
尾插和尾删时间复杂度O(1);任意位置的插入删除时间复杂度O(N) | 删除尾节点O(1)(不带头节点的单链表);有保存则为O(N) ;任意位置插入删除O(1); |
底层空间为一段连续的空间 | 底层空间不是连续的 |
支持随机访问 (基于底层空间的结构) | 不支持随机访问 |
空间容量需要扩容 | 不需要扩容 |
应用场景不同(少操作高效存储)(栈的实现) | 多操作处理起来会更高效 |
不需要频繁申请空间(扩容是需要) | 每次插入都需要申请节点空间(1.内存碎片问题;2.额外空间浪费[申请节点空间会保存节点造成的];3.效率低) |
缓存利用率高 | 缓存利用率低 |
栈 | 栈区 |
---|---|
具有后进先出的特点 | 是一块实实在在存在的内存空间 |
是一种数据结构 | 是按照栈的特性(后进先出)实现的 |
循环队列判断队满队空
1.做标记:
给一个flag.
出队列同时flag = 0;
入队列同时flag = 1;
当队头与队尾指针相等时判断flag的值:
flag = 0 表示队空;
flag = 1 表示队满;
2.将有效元素个数记录保存:
给出一个count.
出队列同时count–;
入队列同时count++;
当count = 0 表示队空;
当count = 容量时表示队满;
3.特殊给定:
当队尾指针加一取模等于队头指针时表示队满;
当队尾指针等于队头指针时表示队空;