如何记录向二维数组添加元素的顺序?附C语言实现代码
记录二维数组元素添加顺序的实现方案
需求说明
我们需要实现一个能记录元素添加顺序的二维数组:初始状态为全零矩阵,每次向矩阵中添加元素时,要同时记录该元素是第几个被添加的。
实现思路
- 定义一个
Point结构体,用来同时存储元素的数值和它的添加顺序索引:index:整型,记录该元素是第几个被添加的(从1开始递增)value:浮点型,存储元素的实际数值
- 初始化一个100x100的
Point类型二维矩阵,初始状态下所有元素的index为0、value为0.0,对应"全零矩阵"的初始要求 - 编写
adds函数负责元素添加:每次调用时,给目标位置的Point对象赋值value,同时用一个静态计数器给index赋值并自增,保证顺序的唯一性
完整实现代码
#include <stdio.h> // 定义存储元素值和添加顺序的结构体 typedef struct { int index; // 记录元素的添加顺序(从1开始) double value; // 存储元素的实际数值 } Point; // 向二维矩阵中添加元素并记录顺序 void adds(int line, int column, double value, Point matrix[100][100]){ static int c = 1; // 静态计数器,保持递增的顺序值,初始为1 matrix[line][column].value = value; matrix[line][column].index = c; c++; } // 测试用例示例 int main() { // 初始化100x100的Point矩阵,默认index=0,value=0.0 Point matrix[100][100] = {0}; // 添加几个测试元素 adds(0, 0, 1.5, matrix); adds(2, 3, 3.2, matrix); adds(0, 0, 5.0, matrix); // 覆盖原有位置,更新value和最新的index // 打印测试位置的信息 printf("位置(0,0): value=%.1f, 是第%d个添加的元素\n", matrix[0][0].value, matrix[0][0].index); printf("位置(2,3): value=%.1f, 是第%d个添加的元素\n", matrix[2][3].value, matrix[2][3].index); printf("位置(1,1): value=%.1f, 是第%d个添加的元素\n", matrix[1][1].value, matrix[1][1].index); return 0; }
代码解释
Point结构体:把元素的数值和添加顺序绑定在一起,解决了普通二维数组无法记录添加顺序的问题static int c = 1:静态变量只会初始化一次,每次调用adds函数时都会自增,保证每个新添加的元素都有唯一递增的index- 矩阵边界注意:当前实现的是100x100的矩阵,使用时要确保
line和column的取值范围在0~99之间,避免数组越界问题 - 覆盖逻辑:如果向已经有元素的位置添加新值,会更新该位置的
value,同时赋予最新的index,相当于记录最后一次修改该位置的顺序
内容的提问来源于stack exchange,提问作者MuchoG
相关产品推荐
相关产品推荐

