数组

  1. 循环队列中元素个数计算方法是固定的,即(尾-头)%长度,但是由于是循环队列所以尾可能会小于头,所以要加上长度,使尾-头保持是正整数,然后再对长度求余,即元素个数。
  2. 循环队列中:头指针指向队列头元素,而尾指针始终指向队列尾元素的下一个位置

  3. 循环队列的相关条件和公式: 
    队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度 
    1.队空条件:rear==front 
    2.队满条件:(rear+1) %QueueSIze==front 
    3.计算队列长度:(rear-front+QueueSize)%QueueSize 
    4.入队:(rear+1)%QueueSize 
    5.出队:(front+1)%QueueSize
  4. 数组:最大的优势是支持随机访问,因为内存空间是连续的。但是插入、删除是绝对短板,涉及到内存空间的申请与释放。而顺序遍历和链式存储的时间复杂度一样。

    链表:最大优势就是插入、删除十分方便,我们可以在链表的任何位置通过修改指针的指向,从而向链表当中插入新的结点。随机访问的效率十分低,时间复杂度为O(n),而数组随机访问的时间复杂度为O(1)。但本题目当中说得是顺序访问,二者的时间复杂度都是O(n)。

    哈希表:哈希表的底层实现是数组,因为计算出来哈希值,我们要快速索引到相应哈希值的位置。插入和删除操作,我不晓得高不高效,因为可能会出现存储上的冲突,此时就要执行冲突规避的方法。另外,顺序访问肯定也是比较复杂的,链表和数组直接无脑地下一位即可,但是哈希表得计算哈希值再由哈希值访问到相应的内存位置。

    队列:它的存储可以是连续或者离散的,我们得从队列的性质出发,它最大的特点就是只支持队尾插入和队头删除,这种操作模式比较死板,而链表则可以在任何位置进行插入及删除操作。顺序遍历可能都差不多

  5. sizeof:简单的说其作用就是返回一个对象或者类型所占的内存字节数

  6. 数组_第1张图片

    从题目可知,二维数组a初始定义两行三列,所以其占用内存空间大小为6,与其赋值无关。数组在创建的时候就已经分配好了空间,不会随着赋值的改变而改变。

  7.  n维数组中每个元素都可以看作是n-1维的线性表,一直递推到1维即为一维线性表

  8. 以下代码执行后,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个字节

 

你可能感兴趣的:(数据结构,数据结构)