• 数据结构 专项练习


    数组

    1. 数组作为函数参数传递的是 数组的首地址。
    2. 长度为n的非空顺序表,若在第i个位置插上新的元素X,则i的取值范围是1≤i≤n+1,需要移动的元素个数为 n-i+1
    3. 元素的起始地址为上一地址的结束。
    4. 传递的方式有三种:每种方式都会告诉编译器要接收一个指针,即数组的地址(首元素地址)
    1. void myFunc(int *param){
    2. //形式参数是一个指针
    3. }
    4. void myFunc(int param[10]){
    5. //形式参数为一个已经定义大小的数组
    6. }
    7. void myFunc(int param[]){
    8. //形式参数为一个未定义大小的数组
    9. }
    1. 二维数组初始化的方法是:int a[3][3]={{1},{2},{3}}。
    2.  二维数组声明时一定要指定列数,单引号表示字符,不能用来给二维数组赋值。
    3. 在一个8个int数据的数组中随机给出数组的数据,找出最大和第二大元素一定需要进行9次比较。方法按照8进4,4进2,2进1得到最大值,然后次大值一定是被最大值PK下去的,在进行2次比较得到次大的数。
    4. 在Java中,声明一个数组是,不能直接限定数组长度,只有在创建实例化对象时,才能给定数组长度。(记住,记住)
    5. 稀疏矩阵一般的压缩存储方式为三元组和十字链表。
    6. 有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是66.解析:存储元素需要60个字节,此外,还一般要用三个整数来存储矩阵的行数、列数和总元素的个数,又需要3*2=6个字节。
    7. GetTail返回第一个元素之外的元素构成的“子表”,GetHead返回第一个元素。
    8. 在C语言中,C99除外,一维数组的定义方式为:元素类型数组名[E],E为整形常量表达式。
    9. 行优先读取和列优先读取的区别是:行优先快。解析:如果数组很大的话应该是行优先快,因为数组在内存中是按行优先存储的,在虚存环境下,如果整个数组没有在内存中的话可以比列优先减少内存换进换出的次数。就算整个数组都在内存中,列优先访问a[i][j]还得计算一次乘法,行优先只需加一就可以了,这个可以忽略。
    10. 常见的线性结构:线性表,堆栈,队列,双队列,数组,串。非线性结构:二维数组,三维数组,广义表,树,图。
    11. slice和concat方法均返回新数组。而splice方法的主要作用就是对原数组进行增删改操作,返回值为截取删除掉的子数组。
    12. 数组Q[0..m-1]用来表示一个循环队列, 用front指向队头元素,rear指向队尾元素的后一个位置 ,则当前队列中的元素数是(rear-front+m)%m。(队列总的元素数不会超过队列大小)
    13. 数组元素的索引值从0开始,所以正数第n个元素的索引值是(n-1)。元素总数为100的数组倒数第n个元素的索引值是(100-n)。
    14. 采用压缩存储之后,下三角矩阵的存储空间可以节约一半,这样的说法不正确。
    15. *s[8]表示有8个指向int指针的数组。
    16. 数组常用的两种基本操作是查找与修改。
    17. sizeof计算长度包括字符串结束符\0,strlen不包括。
    18. 三元组转置:行列互换,然后再按行排序。
    19. 栈没有搜索结构。
    20. 若定义char a[10] = "good",则数组a在内存中所占的字节数(char为1个字节)为10.解析:char型数组a的长度为10,则其在内存中所占的字节数就为10,与其赋值的字符串长度无关。
    21. ‘e’的ASCLL码是101,‘a’的ASCLL码是97。
    22. 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]
    1. char str[2][3]表示声明了一个字符串的数组,最多可以存放两个字符串,每一个字符串的长度为3。题中{"a","b","c"}为三个字符串。
    2. java原生类有8种:int 、double、boolean、float、byte、short、long、char。
    3. scanf函数不能输入空格,而gets函数却可以。
    4. 指针是有减法的,不过只在数组之中应用,用来表示元素的个数的差。
    5. 从一个无序数组中挑选出其中前十个最大的元素,在以下的排序方法中最快的方法是堆排序。
    6. byte(1个字节),short(2个字节),int(4个字节),long(8个字节),float(4个字节),double(8个字节),char(2个字节),boolean(4个字节(根据编译环境而定))
    7. 线性表长度的定义是它所包含的元素的个数。元素的类型决定了元素所占用存储空间的大小。
    8. 数组越界不能插入。
    9. 数组优于链表的特点是占用空间小。
    10. 链表和数组的区别是:链表是链式存储结构,数组是顺序存储结构;链表是通过指针连接元素,而数组则是把所有元素按顺序进行存储;链表插入和删除元素不需要移动元素,数组删除和增加元素需要移动元素。
    11. JDK8之前版本,HashMap的数据结构是数组+链表/红黑树。JDK8及其之后版本,HashMap的数据结构是数组+链表+红黑树。


     

  • 相关阅读:
    Javascript数据类型和类型转换
    自动控制原理7.3---z变换理论
    2.6 Windows驱动开发:使用IO与DPC定时器
    php中进程、线程、协程详细讲解
    如何解决msvcp110.dll丢失问题,分享5个有效的解决方法
    【完美世界】天仙书院偷食也就算了,竟然还偷院长的孙女,美滋滋
    ShardingSphere简介(一)
    Sealos 新功能“定时任务”上线(省钱大杀器)
    Request
    命令行客户端-连接服务端&操作数据库
  • 原文地址:https://blog.csdn.net/YYSTINTERNET/article/details/124182045