通用的二维数组
1、问题描述
写一个(通用)二维数组的工具,可以按照数组的下标访问数组元素;
算法思路:实际上我们是申请一个一维数组,通过定义一些函数,让使用者"感觉"其使用的是二维数组甚至是多维数组;
其数据结构的控制头为:
typedefstructMATRIX{USER_TYPE*data;intmaxRow;intmaxCol;}MATRIX;
2、通用二维数组的实现
(1)、commonMatrix.h
#ifndef_COMMON_MATRIX_H_#define_COMMON_MATRIX_H_#include<malloc.h>typedefunsignedcharboolean;typedefstructMATRIX{USER_TYPE*data;intmaxRow;intmaxCol;}MATRIX;#defineTRUE1#defineFALSE0voidinitMatrix(MATRIX**matrixHead,intmaxRow,intmaxCol);voiddestoryMatrix(MATRIX**matrixHead);booleansetElementAt(MATRIXmatrix,introw,intcol,USER_TYPEvalue);booleangetElementAt(MATRIXmatrix,introw,intcol,USER_TYPE*value);booleangetElementAt(MATRIXmatrix,introw,intcol,USER_TYPE*value){if(row<0||col<0||row>=matrix.maxRow||col>=matrix.maxCol){returnFALSE;}*value=matrix.data[row*matrix.maxCol+col];returnTRUE;}booleansetElementAt(MATRIXmatrix,introw,intcol,USER_TYPEvalue){if(row<0||col<0||row>=matrix.maxRow||col>=matrix.maxCol){returnFALSE;}matrix.data[row*matrix.maxCol+col]=value;returnTRUE;}voiddestoryMatrix(MATRIX**matrixHead){if(*matrixHead==NULL){return;}if((*matrixHead)->data!=NULL){free((*matrixHead)->data);}free(*matrixHead);*matrixHead=NULL;}voidinitMatrix(MATRIX**matrixHead,intmaxRow,intmaxCol){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>typedefintUSER_TYPE;//用户自定义数据类型//利用数据结构与算法的思想,做出了通用二维数组的工具,可以避开二维数组行、列长度不定的问题#include"./commonMatrix.h"voidmain(void){MATRIX*matrix=NULL;intmaxRow;intmaxCol;intvalue;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);
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。