zoukankan      html  css  js  c++  java
  • 数组

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    using  std::cin;
    using  std::cout;
    typedef int type;
    typedef struct array
    {
    	type *base;//基址
    	int index[3];//数组每维大小
    	int count[3];//用于计算,储存每维的元素个数,例:每面,每行,每列的元素个数
    };
    //初始化三维数组,并返回是否成功
    int init(array*a, int x, int y,int z)
    {
    	if (x < 0 || y < 0 || z < 0)return 0;
    	a->index[0] = x; a->index[1] = y; a->index[2] = z;
    	a->base = new int[sizeof(type)*x*y*z]; if (!a->base)return 0;
    	a->count[0] = y*z; a->count[1] = z; a->count[2] = 1;
    	return 1;
    }
    //通过num指针返回x,y,z的数组元素值,并通过函数返回是否访问成功
    int Value(array*a, int x, int y, int z, int *num)
    {
    	if (x < 0 || x >= a->index[0] || y < 0 || y >= a->index[1] || z < 0 || z >= a->index[2])
    		return -1;
    	int off = x*a->count[0] + y*a->count[1] + z*a->count[2];
    	*num = *(a->base + off);
    	return 1;
    }
    //返回x,y,z位置的数组元素的值,失败返回-1..
    int value(array*a, int x, int y, int z)
    {
    	if (x < 0 || x >= a->index[0] || y < 0 || y >= a->index[1] || z < 0 || z >= a->index[2])
    		return -1;
    	int off = x*a->count[0] + y*a->count[1] + z*a->count[2];
    	//*num = *(a->base + off);
    	return *(a->base+off);
    }
    //将num赋值给x,y,z位置的元素,通过函数返回是否成功
    int assign(array*a, int x, int y, int z, type num)
    {
    	if (x < 0 || x >= a->index[0] || y < 0 || y >= a->index[1] || z < 0 || z >= a->index[2])
    		return 0;
    	int off = x*a->count[0] + y*a->count[1] + z*a->count[2];
    	*(a->base + off) = num;
    	return 1;
    }


    //一些乱乱的函数
    
    //填充整个数组,用于测试
    void Fill(array*a)
    {
    	int i, j, k, c = 0;
    	for (i = 0; i < a->index[0]; i++)
    		for (j = 0; j <a->index[1]; j++)
    			for (k = 0; k <a->index[2]; k++, c++)
    				assign(a, i, j, k, c);
    }
    //打印整个数组,用于测试
    void Out(array*a)
    {
    	int i, j, k;
    	for (i = 0; i < a->index[0]; i++)
    	{
    		for (j = 0; j < a->index[1]; j++)
    		{
    			for (k = 0; k < a->index[2]; k++)
    			{
    				printf("(%d,%d,%d):%d", i, j, k, value(a, i, j, k));
    			}
    			printf("
    ");
    		}
    		printf("
    
    ");
    	}
    }
    int main()
    {
    	int i, j, k, c = 0;
    	array a, *p = &a;
    	init(p, 3, 3, 3);
    	Fill(p);
    	Out(p);
    	
    }
    


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    2021-3-11 日报博客
    2021-3-9 日报博客
    2021-3-8 日报博客
    2021-3-7 日报博客
    2021-3-6 周报博客
    2021-3-5 日报博客
    小程序 ----- 条件渲染(if 和 hidden) (七)
    小程序 ---- 简单运算和循环遍历(六)
    小程序 ----- 数据绑定(五)
    .NET ------ Repeater循环嵌套
  • 原文地址:https://www.cnblogs.com/Thereisnospon/p/4768494.html
Copyright © 2011-2022 走看看