• 数据结构 每日一练 :选择 + 编程


    目录

    选择

    编程 


    选择

    A.  正确            B.  不正确

    答案:A

    解析:多维数组一维数组的扩展,也就是数组的数组,例如二维数组可以看作是一维数组作为数据元素构成的一维数组,三维数组可以看作二维数组作为元素构成的一维数组。数组与线性表的关系:数组是线性表的推广。一维数组可视为一个线性表;二维数组可视为其元素也是定长线性表的线性表,以此类推。多维数组和广义表可以看作线性表的扩展,即他们的数据元素构成线性表,而数据元素本身又是一个线性结构。

    A.  *(*(a+1)+2)          B.  *(a+1+2)          C.  (&a[0]+1)[2]          D.  *(a[0]+1)

    答案:A

    解析:

    p=&a;

     指针有三个值:
     p:    指针p,存放的是a的地址  指向目标的地址
    *p:    p指向目标的内容
    &p:存放的也是地址,是指针的地址

    理解:

    1. p本身存的是a的地址。

    2. 解引用 * 就像打开盒子一样,盒子里面装的是a的操作地址 当我打开这个操作地址 我就找到a了。

    3.对*p的操作其实就是对a的操作。

     A:

    a → 数组首地址

    a+1 → 第二行首地址

    *a → a[0][0]的地址

    *(a+1) → a[1][0]的地址

    *(a+1)+2 → a[1][2]的地址

    *(*(a+1)+2) → a[1][2]的值

    B:

    *(a+1+2) = *(a+3)→ 第四行的地址(不存在第四行,所以打印的时候是乱码)

    C:

    a[0] → a[0][0]的地址

    &a[0] → 又变回了数组的首地址

    &a[0]+1 → 第二行地址

    (&a[0]+1)[0] = &a[0]+1

    (&a[0]+1)[2] → 从第二行开始,下二行首地址,即第四行首地址

    *(&a[0]+1) → a[1][0]的地址

    (*(&a[0]+1) )[2] → a[1][2]的值

    D:

    a[0]+1 → a[0][1]的地址

    *(a[0]+1) →  a[0][1]的值

    A.  4 5                        B.  4 3                    C.  3 5                      D.  3 4   

    答案:A

    解析:有了第二题的分析就很容易知道:A表示数组的首地址;A+1表示第二行的首地址;*(A+1)表示A[1][0]的地址;*(A+1)+1表示A[1][2]的地址;*(*(A+1)+1)表示A[1][2]的值,即5。

     A.  rear-front+1    B.  rear-front-1    C.  (rear-front+n)%n    D.  (rear-front)%n

    答案:C

    解析:

    队头指针为front,队尾指针为rear;队列中元素的最大个数MaxSize

    入队时队尾指针加1取模:(rear+1)%MaxSize

    出队时队头指针加1取模:(front+1)%MaxSize

    队列长度(元素个数):(rear-front+MaxSize)%MaxSize

    队满条件:(rear+1)%MaxSize==front

    队空条件:front == rear
     

    A.  front=front+1   B.  front=(front+1)%(m-1)   C.  front=(front-1)%m   D.  front=(front+1)%m

     答案:D

    解析:

    队头指针为front,队尾指针为rear;队列中元素的最大个数MaxSize

    入队时队尾指针加1取模:(rear+1)%MaxSize

    出队时队头指针加1取模:(front+1)%MaxSize

    队列长度(元素个数):(rear-front+MaxSize)%MaxSize

    队满条件:(rear+1)%MaxSize==front

    队空条件:front == rear

    编程 

    描述

    给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。

    (注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到

    要求:空间复杂度 O(n),时间复杂度 O(nlogn)

    1. /**
    2. * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    3. *
    4. *
    5. * @param numbers int整型一维数组
    6. * @param numbersLen int numbers数组长度
    7. * @param target int整型
    8. * @return int整型一维数组
    9. * @return int* returnSize 返回数组行数
    10. */
    11. #include <stdlib.h>
    12. int* twoSum(int* numbers, int numbersLen, int target, int* returnSize ) {
    13. int i,j;
    14. int * result;
    15. result=(int *)malloc(sizeof(int)*2); //申请空间
    16. for(i=0;i<numbersLen-1;i++){
    17. for(j=i+1;j<numbersLen;j++){
    18. if(numbers[i]+numbers[j]==target){
    19. //给数组赋值
    20. result[0]=i+1;//因为题目要求数组下标从1开始,所以加一
    21. result[i]=j+1;
    22. *returnSize=2;//修改数组长度
    23. return result;
    24. }
    25. }
    26. }
    27. return 0;
    28. }

     

  • 相关阅读:
    【云原生】DevOps之使用Gitlab Runner进行CICD
    mvcc介绍
    Usenix Security 2022 FIXREVERTER A Realistic Bug Injection Methodology for
    CodeForces 570D Tree Requests
    实现el-upload可以选择文件夹
    Zookeeper 怎么实现分布式锁
    Codeforces Round 940 (Div. 2) C. How Does the Rook Move?
    RabbitMQ之延迟队列
    Java 新手如何使用Spring MVC 中的查询字符串和查询参数
    java面试题-并发编程相关面试题
  • 原文地址:https://blog.csdn.net/qq_52442214/article/details/132645906