C语言多维数组的存储表示和实现
2011-09-22 10:33
603 查看
/** array.h** Created on: 2011-9-21* Author:liusheng*//** 头文件stdarg.h中几个宏作用的讲解* va_list args; //声明变量* va_start(args, before); //开始解析。args指向before后面的参数* 参数类型 var = va_arg(args, 参数类型);//取下一个参数并返回。args指向下一个参数* va_end(args); //结束解析** #include <stdarg.h>* int arg_test(int a1,...) {* va_list args;* int i;* int arg[5];** va_start(args,a1);** arg[0] = a1;//将参数的个数给arg[0]* for(i = 1;i < 5;i ++) {* arg[i] = va_arg(args,int);* }** va_end(args);** for(i = 0;i < 5;i ++) {* printf("%d\n",arg[i]);* }* }*//** 其实多维数组的表示与实现只要理解了那个表示每个数据位置的公式和链表的操作就很简单了*/#include <stdarg.h>#include <stdio.h>#include <stdlib.h>#define ElemType int#define FALSE 0#define TRUE 1#define ARRAY_MAX_SIZE 8typedef struct {ElemType *base;int dim;int *bounds;//数组维界基址,用于存储维数int *constants;//数组映象函数地址}array;//初始化数组int initarray(array *a,int dim,...) {if(dim < 0 || dim > ARRAY_MAX_SIZE) return FALSE;a->dim = dim;int i;int elemsize = 1;va_list args;va_start(args,dim);a->bounds = (int *)malloc(sizeof(int) * dim);if(a->bounds == NULL) return FALSE;for(i = 0;i < dim;i ++) {a->bounds[i] = va_arg(args,int);elemsize *= a->bounds[i];}va_end(args);a->base = (ElemType *)malloc(sizeof(ElemType) * elemsize);if(a->base == NULL) return FALSE;a->constants = (int *)malloc(sizeof(int) * dim);if(a->constants == NULL) return FALSE;a->constants[dim - 1] = 1;for(i = dim -2;i >= 0;i --) {a->constants[i] = a->constants[i + 1] * a->bounds[i + 1];}return TRUE;}//向数组中插入数据int insertelem(array *a,ElemType e,...) {ElemType *locat;locat = a->base;int i;va_list temp;va_start(temp,e);for(i = 0;i < a->dim; i ++) {locat += va_arg(temp,int) * a->constants[i];}va_end(temp);printf("%d\t",*locat);*locat = e;return TRUE;}//销毁数组int destroyarray(array *a) {if(a->bounds) free(a->bounds);if(a->base) free(a->base);if(a->constants) free(a->constants);return TRUE;}
/*
* test_arrcy.c* 测试array.h* Created on: 2011-9-21* Author: root*/#include "array.h"#include <stdio.h>#include <stdlib.h>int main() {array a;initarray(&a,3,2,3,4);insertelem(&a,888,0,0,0);insertelem(&a,88,0,0,0);insertelem(&a,8,1,2,3);insertelem(&a,88,1,2,3);return 0;}
//控制台结果
0 888 0 8
相关文章推荐
- C语言多维数组的存储表示和实现
- 数据结构之---C语言实现图的数组(邻接矩阵)存储表示
- 数据结构之---C语言实现图的数组(邻接矩阵)存储表示
- 数据结构之---C语言实现数组的顺序存储表示(可运行)
- 串的堆分配存储表示的C语言实现
- C语言 数组的顺序表示与实现 数据结构
- C语言数据结构——数组顺序存储结构的实现和表示
- 数组的顺序存储表示和实现-数据结构
- 数据结构--数组和广义表--数组的顺序存储表示和实现
- 数组的顺序表示和实现:利用可变参数列表实现多维数组的创建
- 数据结构之---C语言实现图的十字链表存储表示
- 第五章 数组的数组的顺序存储表示和实现
- 基于ini配置文件实现多维数组数据的按行存储和读取
- c语言多维数组及其存储
- C语言:实现图的邻接表存储表示
- 数组顺序存储表示和实现
- 线性结构 -- 连续存储(数组), 1个简单的c语言代码实现.
- 数据结构之---C语言实现二叉树的二叉链表存储表示
- c语言的线性表的顺序存储的实现,数组
- 数组的顺序存储表示和实现