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

目录

选择

编程 


选择

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)

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param numbers int整型一维数组
 * @param numbersLen int numbers数组长度
 * @param target int整型
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
#include <stdlib.h>
int* twoSum(int* numbers, int numbersLen, int target, int* returnSize ) {
    int i,j;
    int * result;
    result=(int *)malloc(sizeof(int)*2); //申请空间
    for(i=0;i<numbersLen-1;i++){
        for(j=i+1;j<numbersLen;j++){
            if(numbers[i]+numbers[j]==target){
                //给数组赋值
                result[0]=i+1;//因为题目要求数组下标从1开始,所以加一
                result[i]=j+1;
                *returnSize=2;//修改数组长度
                return result;
            }
        }
    }
    return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十三衙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值