一、选择题
第 2 题
在二维数组按行优先存储的情况下,元素 `a[i][j]` 前的元素个数计算如下:
1. **前面的完整行**:共有 `i` 行,每行 `n` 个元素,总计 `i * n` 个元素。
2. **当前行的前面元素**:在行内,`a[i][j]` 前有 `j` 个元素(索引从 0 开始)。
因此,总元素个数为 **`i * n + j`**。
**验证示例**:
- 对于 `a[1][1]`(假设 `n=3`):`i=1`, `j=1`,计算得 `1*3 + 1 = 4`,即前面有 4 个元素。
- 对于 `a[0][0]`:计算得 `0*3 + 0 = 0`,正确。
- 对于 `a[2][2]`(`n=4`):计算得 `2*4 + 2 = 10`,正确。
**错误选项分析**:
- **A. `i*n + j - 1`**:少算 1 个元素(如 `a[0][0]` 结果为 `-1`,错误)。
- **C. `j*n + i`**:假设列优先存储(非常见情况),与题意不符。
- **D. `i*n + j + 1`**:多算 1 个元素(如 `a[0][0]` 结果为 `1`,错误)。
**正确答案**:**B. `i*n + j`**
第 4 题 单选题
题目:按照 “先进后出” 原则组织数据的结构是 ( )
A. 队列
B. 栈
C. 双向链表
D. 二叉树
答案:**B. 栈**
**详细解释**:
1. **先进后出(FILO)原则**的含义是:**最早进入结构的元素最后被访问或删除**,而最后进入的元素最先被访问或删除。这种特性类似于生活中叠放的盘子,最后放上去的盘子会被最先取用。
2. **选项分析**:
- **A. 队列**:队列遵循**先进先出(FIFO)**原则,即先进入队列的元素先被处理(如排队买票)。与题目要求的“先进后出”相反,因此排除。
- **B. 栈**:栈的插入(`push`)和删除(`pop`)操作均在**栈顶**进行,最后压入栈的元素最先被弹出,完美符合“先进后出”原则。例如,函数调用栈、撤销操作(Ctrl+Z)均基于栈实现。
- **C. 双向链表**:双向链表允许在任意位置插入或删除节点,没有强制限制元素的访问顺序,因此与“先进后出”无关。
- **D. 二叉树**:二叉树是分层存储数据的树形结构,元素的访问顺序取决于遍历方式(如前序、中序、后序遍历),而非“先进后出”规则,因此排除。
3. **结论**:只有**栈**严格遵循“先进后出”原则,因此正确答案是 **B. 栈**。
第 5 题 单选题
题目:用 0、1、2、3、4 这五个数字,能组成多少个没有重复数字的多位偶数?
A. 144 B. 147 C. 160 D. 163