目录
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;
- }