如何打印Struct中int类型动态数组的全部元素并求取最小值
实现方案
动态数组本身不会自带长度信息,最优解法是在定义Struct时同步存储数组长度,这也是工业界通用的实现方案,参考C语言的示例实现如下:
第一步:定义Struct结构
把动态数组指针、数组长度两个核心成员封装到结构体中,数组初始化、增删元素时同步更新长度字段即可:
#include <stdio.h> #include <limits.h> typedef struct { int* arr; // 动态数组指针 int len; // 存储数组实际元素个数 } IntArray;
第二步:实现print()打印方法
直接遍历0到len-1的下标输出全部元素:
void print(IntArray* obj) { if (obj == NULL || obj->len <= 0) { printf("数组为空\n"); return; } for (int i = 0; i < obj->len; i++) { printf("%d ", obj->arr[i]); } printf("\n"); }
第三步:实现最小值查询方法
单次遍历数组比对得到最小值,时间复杂度O(n):
int getMin(IntArray* obj) { if (obj == NULL || obj->len <= 0) { // 空数组场景可根据需求自定义返回值,这里返回int最大值做异常标识 return INT_MAX; } int min = obj->arr[0]; for (int i = 1; i < obj->len; i++) { if (obj->arr[i] < min) { min = obj->arr[i]; } } return min; }
补充说明
- 如果你使用的是C++/Java/Python这类高级语言,直接使用内置的容器类型(如
std::vector<int>、ArrayList<Integer>、list)即可,这类容器已经内置封装了长度属性,不需要手动维护 - 如果你使用C语言且没有修改Struct结构的权限(比如使用第三方封装的结构体),且动态数组是用
malloc类函数分配的,部分平台可以用非标准函数_msize(Windows)/malloc_usable_size(Linux)获取分配的内存块大小,再除以sizeof(int)得到数组长度,但这种方式不跨平台,且只能拿到实际分配的内存大小,不一定等于你实际使用的元素个数,非常不推荐生产环境使用 - 如果数组最后有约定的哨兵值(比如末尾固定为
INT_MIN这类特殊值),也可以遍历到哨兵值停止计数,但这种方式需要保证数组中不会出现和哨兵值相同的正常元素,适用场景非常有限
内容的提问来源于stack exchange,提问作者Kardier
相关产品推荐
相关产品推荐

