多维数组及其实现

lixiangrong
2024-01-29 / 0 评论 / 42 阅读 / 正在检测是否收录...

多维数组及其实现(以三维数组为例)

#include <stdio.h>
#include <stdlib.h>

typedef int dataType;

// 4.3 数组的存储和相关操作,以三维数组为例
typedef struct
{
    dataType *base;
    int index[3];
    int c[3];
}array;

// 1. 三位数组的初始化
int initArray(array *A, int a,int b, int c)
{
    if(a<0 || b<0 || c<0)
    {
        printf("非法的数组声明操作!\n");
        return 0;
    }
    // 给数组分配一片连续的空间
    A->base = (dataType *) malloc(a*b*c*sizeof(dataType));
    if(!A->base) return 0; // 空间分配失败
    A->index[0] = a,A->index[1] = b,A->index[2] = c;
    A->c[0] = b*c,A->c[1] = c,A->c[2] = 1;
    return 1;
}

// 2.三维数组的赋值
int setValue(array *A,int a,int b, int c, dataType x)
{
    int offset; // 地址偏移量
    if(a<0 || b<0 || c<0 || a>=A->index[0] || b>=A->index[1] || c>=A->index[2])
        return 0; // 数组索引越界
    offset = a*A->c[0] + b*A->c[1] + c*A->c[2];
    *(A->base + offset) = x;
    return 1;
}

// 3.三维数组的取值
int getValue(array A,int a,int b, int c, dataType *x)
{
    int offset; // 地址偏移量
    if(a<0 || b<0 || c<0 || a>=A.index[0] || b>=A.index[1] || c>=A.index[2])
        return 0; // 数组索引越界
    offset = a*A.c[0] + b*A.c[1] + c*A.c[2];
    *x = *(A.base + offset);
    return 1;
}

int main()
{
    array A; // 声明三维数组
    int a = 2, b = 3, c = 4;
    initArray(&A,a,b,c); // 初始化2*3*4的三位数组
    dataType x = 10,y;
    if(setValue(&A,a-1,b-1,c-1,x))
        printf("给数组A[%d][%d][%d]赋值%d\n",a-1,b-1,c-1,x);
    else printf("数组索引越界!");
    if(getValue(A,a-1,b-1,c-1,&y))
        printf("数组A[%d][%d][%d]的值为%d",a-1,b-1,c-1,y);
    else printf("数组索引越界!");
    return 0;
}
0

评论 (0)

取消