美文网首页
三维数组

三维数组

作者: 百合_b06b | 来源:发表于2019-01-21 14:18 被阅读0次

#include<stdio.h>

#include<stdlib.h>

#define ERROR 0

#define OK 1

#define NotPresent 2

#define Duplicate 3

#define IllegalIndex 4

typedef int Status;

typedef struct triplearray{

int m1;

int m2;

int m3;

int *array;

} TripleArray;

//创建运算:CreateArray(A,m1,m2,m3,...mn)申请n维数组A所需存储空间并分配给数组A,每个维度的长度分别为m1,m2,m3......;成功分配则返回OK,否则,返回ERROR;

Status CreateArray(TripleArray *TripleArray, int m1, int m2, int m3){

TripleArray->m1 = m1;

TripleArray->m2 = m2;

TripleArray->m3 = m3;

TripleArray->array = (int*)malloc(m1*m2*m3*sizeof(int));

if (!TripleArray->array)

return ERROR;

return OK;

}

//清除运算:判断数组是否存在,若存在,则撤销数组,函数返回OK,否则,返回ERROR;

Status DestroyArray(TripleArray *TripleArray){

if (!TripleArray)

return ERROR;

if (TripleArray->array)

free(TripleArray->array);

free(TripleArray);

return OK;

}

//数组元素查询运算,判断数组是否存在,若数组不存在,函数返回ERROR,否则对数组下标边界检查,若下标合法,在参数x中返回下标为 i1,i2,i3,... 的数组元素;

Status RetrieveArray(TripleArray TripleArray, int i1, int i2, int i3, int *x){

if (!TripleArray.array)

return NotPresent;

if (i1 < 0 || i2 < 0 || i3 < 0 || i1 >= TripleArray.m2 || i3 >= TripleArray.m3) //越界判断

return IllegalIndex; //元素不存在

*x = *(TripleArray.array + i1*TripleArray.m2*TripleArray.m3 + i2*TripleArray.m3 + i3); //传递地址

return OK;

}

//数组元素的赋值运算:判断数组是否存在,若数组不存在,函数返回ERROR,若下标合法,则将下标为 i1,i2,i3,... 的数组元素值设为x

Status StoreArrayItem(TripleArray *TripleArray, int i1, int i2, int i3, int x){

if (!TripleArray->array)

return NotPresent;

*(TripleArray->array + i1*TripleArray->m2*TripleArray->m3 + i2*TripleArray->m3 + i3)=x;

return OK;

}

//数乘运算:判断数组A是否存在,若不存在,则返回ERROR,否则,将数组所有元素依次输出;

void OutputArray(TripleArray TripleArray){

if (!TripleArray.array)

return ;

int i1, i2, i3;

for (i1 = 0; i1 < TripleArray.m1; i1++){

for (i2 = 0; i2 < TripleArray.m2; i2++){

for (i3 = 0; i3 < TripleArray.m3; i3++){

int value;

RetrieveArray(TripleArray, i1, i2, i3, &value);

printf("array[%d][%d][%d]=%d\n", i1, i2, i3, value);

}

}

}

}

//拷贝运算:判断A,B数组存在,若不存在,则返回ERROR,否则,判断数组A,B是否大小相同,若不同,返回ERROR,否则,将A中元素依次拷贝到数组B中;

Status CopyArray(TripleArray *TripleArrayA, TripleArray *TripleArrayB){

if (!TripleArrayA->array || !TripleArrayB->array)

return NotPresent;

if (TripleArrayA->array == TripleArrayB->array)

return Duplicate;

if (TripleArrayA->m1 != TripleArrayB->m1 || TripleArrayA->m2 != TripleArrayB->m2 || TripleArrayA->m3 != TripleArrayB->m3)

return ERROR;

int i1, i2, i3;

for (i1 = 0; i1 < TripleArrayA->m1; i1++){

for (i2 = 0; i2 < TripleArrayA->m2; i2++){

for (i3 = 0; i3 < TripleArrayA->m3; i3++){

int value;

RetrieveArray(*TripleArrayA, i1, i2, i3, &value);

StoreArrayItem(TripleArrayB, i1, i2, i3, value);

}

}

}

return OK;

}

int main(){

TripleArray TripleArrayA, TripleArrayB;

CreateArray(&TripleArrayA, 2, 2, 2);

CreateArray(&TripleArrayB, 2, 2, 2);

int i1, i2, i3;

for (i1 = 0; i1 < TripleArrayA.m1; i1++){

for (i2 = 0; i2 < TripleArrayA.m2; i2++){

for (i3 = 0; i3 < TripleArrayA.m3; i3++){

StoreArrayItem(&TripleArrayA, i1, i2, i3, 10);

StoreArrayItem(&TripleArrayB, i1, i2, i3, 5);

}

}

}

printf("请输出数组TripleArrayA元素:\n");

OutputArray(TripleArrayA);

printf("请输出数组TripleArrayB元素:\n");

OutputArray(TripleArrayB);

CopyArray(&TripleArrayA, &TripleArrayB);

printf("请输出数组TripleArrayA元素:\n");

OutputArray(TripleArrayA);

printf("请输出数组TripleArrayB元素:\n");

OutputArray(TripleArrayB);

}

相关文章

  • 动态数组的分配与释放

    一维数组 二维数组 三维数组

  • 根据二维数组中的一个键组合成新的数组

    /** * 二维数组转三维数组(指定键为三维数组的键名) * @param [type] $arr [要排序的...

  • JavaSE之数组

    一维数组:一条线 二维数组:一个面 三维数组:一个立方体,三维数组使用较少,这里不提及。 一维数组 数组的创建 声...

  • C++多维数组的理解与使用

    记录: 三维数组实验代码: 说明: 1、int threedim[2][3][4]; 定义一个三维数组; 每一维的...

  • 股票交易两次最大利润

    动态规划 三维数组在递归实现时,我们用了三个变量:index、status、k。这里我们定义一个三维数组dp[n]...

  • reduce解决一维转二维,三维数组

    1一维数组变二维数组: 2 一维数组变三维数组: 思路: prev 初始都是一个空数组[ ] ,然后根据索引来操作...

  • 三维数组

    #include #include #define ERROR 0 #define OK 1 #define No...

  • Java学习day-13:多维数组和冒泡排序

    一、多维数组: 多维数组可以看成以数组为元素的数组。可以有二维、三维、甚至更多维数组。 1.二维数组: (1)二维...

  • Java多维数组的用法!

    除了一维数组和二维数组外,Java中还支持更多维的数组,如三维数组、四维数组和五维数组等,它们都属于多维数组。 经...

  • 关于JS的多维数组

    一维数组:数组内每一个元素都是一个标量,如下: 二维数组:数组内每一个元素都是一个一维数组,如下: 三维数组:数组...

网友评论

      本文标题:三维数组

      本文链接:https://www.haomeiwen.com/subject/fyjcjqtx.html