三维数组
来源:互联网 发布:bat程序员收入 编辑:程序博客网 时间:2024/04/27 22:59
一个三维数组a[i][j][k],数据元素为i*j*k个,在存储空间中顺序连续存储的,我们可以通过数组首地址,通过位移量来访问每一个元素。
假设三维数组每一维的最大长度为n,m,o;
在二维数数组中,我们访问元素是a[i][j]的地址=a[0][0]的地址+i*第一维的长度+j
同理在三维数组中我们可以把二维数组看成一个整体也就是a[i][j,k],这样访问就是
a[i][j,k]的地址=a[0][0,0]的地址+i*第二维和第一维的长度+a[j,k],而a[j,k]的地址就是
二维数组的地址,即a[i][j][k]地址=a[0][0][0]的地址+i*m*o+j*o+k;
同理n维就有了公式:
a[i][j][k]的地址=a[0][0]....[0]的地址+(b2*b3*....bn)*j1+(b3*b4...bn)*j2+...bn*jn-1+jn
用ci-1表示bi*cn-1;
#include<iostream>#include<cstdio>#include<cstdlib>using namespace std;typedef int datatype;typedef struct{ datatype *base;//作为三维数组首地址 int index[3]; //记录每一维 的长度 int c[3]; //记录维数前面几维一行的数目,如c[0]记录第一维第二维一行的总数}arr;int init_arry(arr *A,int b1,int b2,int b3) //初始化数组{ if(b1<=0||b2<=0||b3<=0) { cout<<"error!"<<endl; return 0; } int sum = b1*b2*b3; A->base = (datatype*)malloc(sizeof(sum*sizeof(datatype))); if(A->base==NULL) return 0; A->index[0]=b1,A->index[1]=b2,A->index[2]=b3; A->c[0]=b2*b3,A->c[1]=b3,A->c[2]=1; return 1;}int value(arr *A,int i1,int i2,int i3,datatype *x) //三维数组中查询某一值{ int id; if(i1<0||i1>=A->index[0]||i2<0||i2>=A->index[1]||i3<0||i3>=A->index[2]) { cout<<"error!"<<endl; return 0; } id=A->c[0]*i1+A->c[1]*i2+A->c[2]*i3; *x=*(A->base+id); return 1;}int assig(arr *A,int i1,int i2,int i3,datatype x) //改变某一值{ int id; if(i1<0||i1>=A->index[0]||i2<0||i2>=A->index[1]||i3<0||i3>=A->index[2]) { cout<<"error!"<<endl; return 0; } id=A->c[0]*i1+A->c[1]*i2+i3*A->c[2]; *(A->base+id) = x; return 1;}void Scanf(arr *A){ int len = A->index[0]*A->index[1]*A->index[2]; for(int i=0;i<len;i++) *(A->base+i) = i; // scanf("%d",A->base+i);}void Printf(arr *A){ int len =A->index[0]*A->index[1]*A->index[2]; for(int i=0;i<len;i++) cout<<*(A->base+i) <<endl;}int main(){ int n,m,k; int i1,i2,i3,x; arr A; cout<<"输入三维数组每一维的大小:"; cin>>n>>m>>k; int judge= init_arry(&A,n,m,k); if(judge) cout<<"success"<<endl; else { cout<<"fail"<<endl; return 0; } Scanf(&A); cout<<"输入要访问位置的坐标:"<<endl; cin>>i1>>i2>>i3; judge = value(&A,i1,i2,i3,&x); cout<<"坐标在(i1,i2,i3)的值为"<<x<<endl; x=100000; assig(&A,i1,i2,i3,x); Printf(&A);}
0 0
- 三维数组
- 三维数组
- 三维数组
- 三维数组
- 三维数组
- 三维数组和三维数组的指针
- 面试题-三维数组
- 三维数组的理解
- 动态申请三维数组
- 动态三维数组分配:
- 三维动态字符数组,
- Matlab 三维数组
- PHP三维数组变一维
- 三维数组的应用
- C语言三维数组
- 三维数组的运用
- 申请三维数组
- 创建一个三维数组
- [LeetCode] Excel Sheet Column Title、Excel Sheet Column Number
- Linux命令大全----系统管理相关命令
- unity3d开发flappy bird之游戏逻辑控制(二)
- 软件测试4--测试用例的目标及x模型
- android textview获取图片
- 三维数组
- 104 linux ubuntu 下将xampp换成lnmp
- 傻博士----物理层
- Python中一个for循环循环多个变量
- Ember.js 入门指南——总目录
- 获取android顶部状态栏高度的两种方式
- Hibernate连接池配置实例
- 内核源码调试及实现
- 博客数据库设计之第二版