您好,登錄后才能下訂單哦!
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);
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。