数组的顺序结构表示和实现
2009-06-20 20:59
351 查看
#include<iostream> #include<cstdarg> using namespace std; /* 数组的顺序表示和实现 */ #define Array_dtype int #define MAX_ARRAY_DIM 8 const int ERROR=0; const int OK=1; class Array { public: Array(int dim,...); ~Array(); Array_dtype GetValue(int dim1,...);//取出值 void SetValue(const Array_dtype &e,...);//设置值 private: Array_dtype *m_base;//数组元素基址 int m_dim;//数组维数 int *m_bounds;//数组维界基址 int *m_constants;//数组映像函数常量基址 bool m_flag;//是否分配内存的标志 }; Array::Array(int dim,...) { if(dim>=1&&dim<=MAX_ARRAY_DIM) { m_dim=dim; //申请存放每一维长度大小的空间 m_bounds=new int[dim]; //将每一维长度大小放到空间里边,并计算出总元素个数 int total_elem=1; va_list ap; va_start(ap,dim); for(int i=0;i!=dim;++i) { m_bounds[i]=va_arg(ap,int); total_elem*=m_bounds[i]; } va_end(ap); //为每个元素分配空间 m_base=new int[total_elem]; //为每个维的入口地址分配空间 m_constants=new int[dim]; //计算每个维的入口地址并将结果存入空间里 m_constants[dim-1]=1; for(int i=dim-2;i!=-1;--i) { m_constants[i]=m_constants[i+1]*m_bounds[i+1]; } m_flag=true; } else { cout<<"维数设置错误!"<<endl; m_flag=false; } } Array::~Array() { if(m_flag) { delete[]m_base; delete[]m_bounds; delete[]m_constants; } } Array_dtype Array::GetValue(int dim1,...) { va_list ap; int addr=0; addr+=dim1*m_constants[0]; va_start(ap,dim1); for(int i=1;i!=m_dim;++i) { addr+=va_arg(ap,int)*m_constants[i]; } va_end(ap); return *(m_base+addr); } void Array::SetValue(const Array_dtype &e,...)//设置值 { va_list ap; int addr=0; va_start(ap,e); for(int i=0;i!=m_dim;++i) { addr+=va_arg(ap,int)*m_constants[i]; } va_end(ap); *(m_base+addr)=e; }
根据清华大学的<数据结构>写出来的。
相关文章推荐
- C语言 数组的顺序表示与实现 数据结构
- 数组的顺序存储表示和实现-数据结构
- 队列的顺序存储表示---数组实现
- C++学习总结——顺序存储,链式存储,索引存储,哈希存储的优缺点,以及vector数组,list链表,十字链表,索引结构,hash表的实现
- 数组的顺序表示和实现
- 数据结构(3):顺序栈的表示和实现
- 数组的顺序表示和实现【严蔚敏】
- (严蔚敏版)数组的顺序存储表示和实现代码
- 第五章 数组的数组的顺序存储表示和实现
- 数组的顺序表示和C语言实现
- 数据结构示例之顺序数组的实现
- 数据结构与算法-----堆栈-使用数组(顺序结构)实现
- 数组的顺序表示和实现
- [C语言][数据结构]基础的线性表的顺序表示和实现
- 数组的顺序表示和实现
- 数据结构之顺序表(数组实现与链表实现)
- 【数据结构之线性表顺序存储】简单的数组的方式实现
- 数据结构笔记(一)线性表的顺序表示和基本操作及其顺序表实现的集合运算(A-B)U(B-A)实例
- 数据结构之线性表的顺序表示和实现
- 数组的顺序表示与实现