- 循环队列中元素个数计算方法是固定的,即(尾-头)%长度,但是由于是循环队列所以尾可能会小于头,所以要加上长度,使尾-头保持是正整数,然后再对长度求余,即元素个数。
- 循环队列中:头指针指向队列头元素,而尾指针始终指向队列尾元素的下一个位置
循环队列的相关条件和公式:
队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度
1.队空条件:rear==front
2.队满条件:(rear+1) %QueueSIze==front
3.计算队列长度:(rear-front+QueueSize)%QueueSize
4.入队:(rear+1)%QueueSize
5.出队:(front+1)%QueueSize-
数组:最大的优势是支持随机访问,因为内存空间是连续的。但是插入、删除是绝对短板,涉及到内存空间的申请与释放。而顺序遍历和链式存储的时间复杂度一样。
链表:最大优势就是插入、删除十分方便,我们可以在链表的任何位置通过修改指针的指向,从而向链表当中插入新的结点。随机访问的效率十分低,时间复杂度为O(n),而数组随机访问的时间复杂度为O(1)。但本题目当中说得是顺序访问,二者的时间复杂度都是O(n)。
哈希表:哈希表的底层实现是数组,因为计算出来哈希值,我们要快速索引到相应哈希值的位置。插入和删除操作,我不晓得高不高效,因为可能会出现存储上的冲突,此时就要执行冲突规避的方法。另外,顺序访问肯定也是比较复杂的,链表和数组直接无脑地下一位即可,但是哈希表得计算哈希值再由哈希值访问到相应的内存位置。
队列:它的存储可以是连续或者离散的,我们得从队列的性质出发,它最大的特点就是只支持队尾插入和队头删除,这种操作模式比较死板,而链表则可以在任何位置进行插入及删除操作。顺序遍历可能都差不多
-
sizeof:简单的说其作用就是返回一个对象或者类型所占的内存字节数
-
从题目可知,二维数组a初始定义两行三列,所以其占用内存空间大小为6,与其赋值无关。数组在创建的时候就已经分配好了空间,不会随着赋值的改变而改变。
-
n维数组中每个元素都可以看作是n-1维的线性表,一直递推到1维即为一维线性表
-
以下代码执行后,array的结果是?
1
2
var
array=[-1,1,3,4,6,10];
array.sort((a,b)=>Math.abs(a-3)-Math.abs(b-3));
sort() 方法用于对数组的元素进行排序,参数决定排序的顺序。
- 原数组var array=[-1,1,3,4,6,10];
- 参数(a,b)=>Math.abs(a-3)-Math.abs(b-3):即数值减3的绝对值[4,2,0,1,3,7]作为参数决定排序。
- 根据绝对值减3大小排列[0,1,2,3,4,7],对应的原数组排序后为[3,4,1,6,-1,10\
9.float类型占用4个字节