数据结构之数组Array实例详解

数组Array
基本操作
Status InitArray(int dimm,...)//若维数dim和随后的各维长度合法,则构造相应的数组A,并返回OK Status DestroyArray() //销毁数组A Status Locate(va_list ap,int &off) //若ap指示的各下标值合法,则求出该元素在A中相对地址off Status Value(ElemType &e,...) //A是n维数组,e为元素变量,随后是n个下标值。若各下表不越界,则e赋值为所指定的A的元素值,并返回OK。 Status Assign(ElemType e,...) //A是n维数组,e为元素变量,随后是n各下表值。/若各下标不越界,则将e的值付给所指定的A的元素,并返回OK。
几个小程序(代码正误检验)
//
//by coolxxx
//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<map>
#include<stack>
#include<queue>
#include<set>
#include<bitset>
#include<memory.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include<stdbool.h>
#include<math.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
#define mem(a,b) memset(a,b,sizeof(a))
#define eps (1e-10)
#define J 10000
#define mod 1000000007
#define MAX 0x7f7f7f7f
#define PI 3.14159265358979323
#pragma comment(linker,"/STACK:1024000000,1024000000")
#define N 8
const int OK=1;
const int ERROR=0;
const int INFEASIBLE=-1;
typedef int Status;
using namespace std;
typedef long long LL;
double anss;
LL aans;
int cas,cass;
LL n,m,lll,ans;
typedef int ElemType;
#include<stdarg.h> //标准头文件,提供宏va_start、va_arg、va_end 用于存取变长参数表
const int MAX_ARRAY_DIM=8; //假设数组维数的最大值为8
typedef struct
{
ElemType *base; //数组元素基址,由InitArray分配
int dim; //数组维数
int *bounds; //数组维界基址,由InitArray分配
int *constants; //数组映像函数常量基址,由InitArray分配
int elemtotal;
Status InitArray(int dimm,...)//若维数dim和随后的各维长度合法,则构造相应的数组A,并返回OK
{
int i;
va_list ap;
if(dimm<1 || dimm>MAX_ARRAY_DIM)return ERROR;
dim=dimm;
bounds=(int *)malloc(dim*sizeof(int));
if(!bounds)exit(OVERFLOW);//若各维长度合法,则存入A.bounds,并求出A的元素总数elemtotal
elemtotal=1;
va_start(ap,dim); //ap为va_list类型,是存放变长参量数表信息的数组
for(i=0;i<dim;i++)
{
bounds[i]=va_arg(ap,int);
if(bounds[i]<0)return UNDERFLOW;
elemtotal*=bounds[i];
}
va_end(ap);
base=(ElemType *)malloc(elemtotal*sizeof(ElemType));
if(!base)exit(OVERFLOW);
constants=(int *)malloc(dim*sizeof(int));
//求映像函数的常数ci,并存入A.constants[i-1],i=1,...,dim
if(!constants)exit(OVERFLOW);
constants[dim-1]=1; //L=1,指针的增减以元素的大小为单位
for(i=dim-2;i>=0;i--)
constants[i]=bounds[i+1]*constants[i+1];
return OK;
}//InitArray
Status DestroyArray() //销毁数组A
{
if(!base)return ERROR;
free(base);base=NULL;
if(!bounds)return ERROR;
free(bounds);bounds=NULL;
if(!constants)return ERROR;
free(constants);constants=NULL;
return OK;
}//DestroyArray
Status Locate(va_list ap,int &off) //若ap指示的各下标值合法,则求出该元素在A中相对地址off
{
int i,ind;
off=0;
for(i=0;i<dim;i++)
{
ind=va_arg(ap,int);
if(ind<0 || ind>=bounds[i])return OVERFLOW;
off+=constants[i]*ind;
}
return OK;
}//Locate
Status Value(ElemType &e,...) //A是n维数组,e为元素变量,随后是n个下标值。
//若各下表不越界,则e赋值为所指定的A的元素值,并返回OK。
{
va_list ap;
int result,off;
va_start(ap,e);
if((result=Locate(ap,off))<=0)return result;
e=*(base+off);
return OK;
}//Value
Status Assign(ElemType e,...) //A是n维数组,e为元素变量,随后是n各下表值。
//若各下标不越界,则将e的值付给所指定的A的元素,并返回OK。
{
va_list ap;
int result,off;
va_start(ap,e);
if((result=Locate(ap,off))<=0)return result;
*(base+off)=e;
return OK;
}//Assign
}Array;
void ArrayCheck()//代码正误检验
{
int i,j,k;
Array A;
ElemType e;
A.InitArray(3,2,3,2);
printf("维度:%d\n总元素个数:%d\n各维维界:",A.dim,A.elemtotal);
for(i=0;i<A.dim;i++)
printf("%d ",A.bounds[i]);
puts("");
for(i=0;i<A.bounds[0];i++)
for(j=0;j<A.bounds[1];j++)
for(k=0;k<A.bounds[2];k++)
A.Assign(i*100+j*10+k+111,i,j,k);
for(i=0;i<A.bounds[0];i++,puts(""))
for(j=0;j<A.bounds[1];j++,puts(""))
for(k=0;k<A.bounds[2];k++)
printf("%d ",(A.Value(e,i,j,k),e));
A.DestroyArray();
puts("");
}
程序结果: 维度:3 总元素个数:12 各维维界:2 3 2 111 112 121 122 131 132 211 212 221 222 231 232
主函数:
int main()
{
#ifndef ONLINE_JUDGEW
// freopen("1.txt","r",stdin);
freopen("2.txt","w",stdout);
#endif
int i,j,k;
int x,y,z,xx,yy;
// init();
// for(scanf("%d",&cass);cass;cass--)
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
// while(~scanf("%s",s))
// while(~scanf("%d%d",&n,&m))
{
ArrayCheck();
}
return 0;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# 数据结构之数组Array
# 数据结构之数组
# C语言数据结构之顺序数组的实现
# C++ 数据结构线性表-数组实现
# JavaScript数据结构之数组的表示方法示例
# C语言 数据结构之连续存储数组的算法
# Java数组模拟优先级队列数据结构的实例
# PHP中使用数组实现堆栈数据结构的代码
# 数据结构之数组翻转的实现方法
# 求出
# 下表
# 值为
# 则将
# 变长
# 维维
# 几个
# 数据结构
# 希望能
# 谢谢大家
# 头文件
# min
# comment
# define
# pragma
# PI
# math
# memory
# bitset
# set
相关文章:
建站三合一如何选?哪家性价比更高?
小型网站制作HTML,*游戏网站怎么搭建?
如何配置WinSCP新建站点的密钥验证步骤?
高防服务器租用首荐平台,企业级优惠套餐快速部署
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
建站之星后台管理如何实现高效配置?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
建站OpenVZ教程与优化策略:配置指南与性能提升
制作网站的公司有哪些,做一个公司网站要多少钱?
,交易猫的商品怎么发布到网站上去?
建站主机CVM配置优化、SEO策略与性能提升指南
如何快速搭建高效服务器建站系统?
制作网站公司那家好,网络公司是做什么的?
贸易公司网站制作流程,出口贸易网站设计怎么做?
如何在万网开始建站?分步指南解析
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
如何快速查询网址的建站时间与历史轨迹?
宝塔面板如何快速创建新站点?
动图在线制作网站有哪些,滑动动图图集怎么做?
建站之星ASP如何实现CMS高效搭建与安全管理?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
大连网站制作公司哪家好一点,大连买房网站哪个好?
西安专业网站制作公司有哪些,陕西省建行官方网站?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何通过虚拟主机空间快速建站?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
高性能网站服务器部署指南:稳定运行与安全配置优化方案
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
建站之星CMS五站合一模板配置与SEO优化指南
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
建站VPS配置与SEO优化指南:关键词排名提升策略
如何通过宝塔面板实现本地网站访问?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
网页设计网站制作软件,microsoft office哪个可以创建网页?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
如何高效配置香港服务器实现快速建站?
如何注册花生壳免费域名并搭建个人网站?
深圳网站制作的公司有哪些,dido官方网站?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何零基础开发自助建站系统?完整教程解析
制作网站怎么制作,*游戏网站怎么搭建?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
如何用PHP快速搭建CMS系统?
网站制作报价单模板图片,小松挖机官方网站报价?
*请认真填写需求信息,我们会在24小时内与您取得联系。