1、问题描述
写一个(通用)二维数组的工具,可以按照数组的下标访问数组元素;
算法思路:实际上我们是申请一个一维数组,通过定义一些函数,让使用者"感觉"其使用的是二维数组甚至是多维数组;
其数据结构的控制头为:
typedef struct MATRIX{ USER_TYPE *data; int maxRow; int maxCol; }MATRIX;
2、通用二维数组的实现
(1)、commonMatrix.h
#ifndef _COMMON_MATRIX_H_ #define _COMMON_MATRIX_H_ #include<malloc.h> typedef unsigned char boolean; typedef struct MATRIX{ USER_TYPE *data; int maxRow; int maxCol; }MATRIX; #define TRUE 1 #define FALSE 0 void initMatrix(MATRIX **matrixHead, int maxRow, int maxCol); void destoryMatrix(MATRIX **matrixHead); boolean setElementAt(MATRIX matrix, int row, int col, USER_TYPE value); boolean getElementAt(MATRIX matrix, int row, int col, USER_TYPE *value); boolean getElementAt(MATRIX matrix, int row, int col, USER_TYPE *value){ if(row < 0 || col < 0 || row >= matrix.maxRow || col >= matrix.maxCol){ return FALSE; } *value = matrix.data[row*matrix.maxCol + col]; return TRUE; } boolean setElementAt(MATRIX matrix, int row, int col, USER_TYPE value){ if(row < 0 || col < 0 || row >= matrix.maxRow || col >= matrix.maxCol){ return FALSE; } matrix.data[row*matrix.maxCol + col] = value; return TRUE; } void destoryMatrix(MATRIX **matrixHead){ if(*matrixHead == NULL){ return; } if((*matrixHead)->data != NULL){ free((*matrixHead)->data); } free(*matrixHead); *matrixHead = NULL; } void initMatrix(MATRIX **matrixHead, int maxRow, int maxCol){ MATRIX *matrix = NULL; if(*matrixHead != NULL || maxRow <= 0 || maxCol <= 0){ return; } matrix = (MATRIX *)calloc(sizeof(MATRIX), 1); matrix->maxRow = maxRow; matrix->maxCol = maxCol; matrix->data = (USER_TYPE *)calloc(sizeof(USER_TYPE), maxRow * maxCol); *matrixHead = matrix; } #endif
(2)、commonMatrix.c
#include<stdio.h> typedef int USER_TYPE; //用户自定义数据类型 //利用数据结构与算法的思想,做出了通用二维数组的工具,可以避开二维数组行、列长度不定的问题 #include"./commonMatrix.h" void main(void){ MATRIX *matrix = NULL; int maxRow; int maxCol; int value; printf("请输入二维数组的行、列: "); scanf("%d%d", &maxRow, &maxCol); initMatrix(&matrix, maxRow, maxCol); setElementAt(*matrix, 1, 1, 2); //用户的做自己返回时检测 getElementAt(*matrix, 1, 1, &value); //用户的做自己返回时检测 printf("matrix[1][1] = %d\n", value); destoryMatrix(&matrix); }
3、结果截图
4、算法分析
(1)、二维数组的本质是一位数组;
(2)、解决了长度不定的问题;
(3)、在对操作时,关键是数组下标的定位;
(4)、a[i] <==> *(a+i);
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站栏目:通用的二维数组-创新互联
标题网址:https://www.cdcxhl.com/article20/dhdhjo.html
成都网站建设公司_创新互联,为您提供电子商务、网站设计公司、服务器托管、网站导航、App开发、品牌网站制作
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联