鱼C论坛

 找回密码
 立即注册
查看: 3734|回复: 1

求大神解析 考试急 数据结构 用户定义的多维数组

[复制链接]
发表于 2013-7-16 23:34:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 小水 于 2013-7-16 23:36 编辑

最近要做一个课程设计    里面有个void find(Naray &A) 函数看不懂特别是这里
for(i=0;i<A.dim;i++)  cin>>a[i];
     for(i=0;i<A.dim;i++)
     {
          for(j=i+1;j<A.dim;j++)multi=multi*A.bound[j].boundnum;
          sum=sum+multi;
          multi=1;
     }
为什么会是dim  不应该是我输入的 下标 吗?如果我输入的是3维数组  [0...3][0...2][0...1]
如果查询[2][2][0] 我知道应该是2*3*2+2*2+0*1=16 所以是elem[16]
但是这个嵌套是怎么实现的呢?

源代码
#include<iostream>
using namespace std;

#define maxdim 3              //可定义数组的最大维数
#define maxnum 10             //定义数组的最大个数
#define max 100               //自定义数组中含的最大元素个数

typedef  int ElemType;

typedef  struct
{
        ElemType lower;            //下标下界
    ElemType upper;            //下标上界
        int boundnum;             //该维的坐标数目,如行数、列数
}Boundi;                       //第i维下标的上下界

typedef struct
{
    int dim;                  //数组维数
    Boundi bound[maxdim];      //各维的上下界
    int total;               //数组中的元素个数
    int elem[max];            //将该n维数组中的元素以行序为主序存储在一一维数组中,elem 为
                              //指向该数组的指针
}NArray;



NArray creatone()                                                      //创建一多维数组
{
        cout<<"******************创建一个多维数组******************"<<endl;
    int n,i,total=1,j;
    NArray A;
    cout<<"*请输入要创建数组的维数:";
        cin>>n;
        A.dim=n;                               //数组维数
    cout<<"*请输入所创建数组的各维的上下标:"<<endl;
    for(i=1;i<=A.dim;i++)                                              //各维的上下界
    {
         cout<<"*第"<<i<<"维:"<<endl;
         cin>>A.bound[i-1].lower;
         cin>>A.bound[i-1].upper;

         A.bound[i-1].boundnum=A.bound[i-1].upper-A.bound[i-1].lower+1;
         total=total*A.bound[i-1].boundnum;
    }
    A.total=total;                                                    //数组中的元素个数
    for(i=0;i<total;i++)                                             //将该n维数组中的元素以行序为主序存储在一一维数组中,elem 为指向该数组的指针
        A.elem[i]=0;
        cout<<"*现在要初始化该数组的数值部分吗?Y-1,N(此时数组中各元素均为0)-0"<<endl;
        cin>>j;
         switch(j)
        {
     case 1:
          {
               cout<<"请以行序为主序输入该多维数组的"<<A.total<<"个元素:"<<endl;
               for(i=0;i<total;i++)
                    cin>>A.elem[i];
          }
     case 0: ;
     }
    cout<<"******************数组创建成功!******************"<<endl<<endl;
        return A;
}


//创建一多维数组,赋值函数
int qualify(NArray&A,NArray &B)

{
     int i;
     if(B.dim!=A.dim)
     {
          cout<<"这两个多维数组不是同类型的,不能相互赋值!"<<endl;
          return 0;
     }
     for(i=0;i<A.dim;i++)
     {
          if(B.bound[i].boundnum!=A.bound[i].boundnum)
          {
               cout<<"这两个多维数组不是同类型的,不能相互赋值!"<<endl;
               return 0;
          }
     }

     for(i=0;i<A.total;i++)
          B.elem[i]=A.elem[i];
     cout<<"赋值成功!"<<endl;
     return 0;
}
//打印多维数组的有关信息
void printit(NArray A)
{
     int i;
     cout<<"这是一个"<<A.dim<<"维数组 NArray";
     for(i=1;i<=A.dim;i++)
     {
          cout<<"["<<A.bound[i-1].lower<<"…"<<A.bound[i-1].upper<<"]";
     }
     cout<<"  该数组中所含元素个数为:"<<A.total<<endl;
}
//
void find(NArray&A)
{
     int i,sum=0,multi=1,j;
     int a[maxdim];
     cout<<"请输入你所要查找的元素的下标:";
     for(i=0;i<A.dim;i++)  cin>>a[i];
     for(i=0;i<A.dim;i++)
     {
          for(j=i+1;j<A.dim;j++)multi=multi*A.bound[j].boundnum;
          sum=sum+multi;
          multi=1;
     }
     cout<<"元素 NArray";
     for(i=0;i<A.dim;i++)
          cout<<"["<<a[i]<<"]";
     cout<<"的值为:elem["<<sum<<"]="<<A.elem[sum]<<" 找到了对应的目标值!"<<endl;
     cout<<"要更改这个值吗?Y-1,N-0:";cin>>i;
     if(i==1)
     {
          cout<<"请输入替换的值:"<<endl;
          cin>>j;
          A.elem[sum]=j;
     }
     cout<<"替换后的数组为:"<<endl;
     for(i=0;i<A.total;i++)
          cout<<A.elem<<" ";
     cout<<endl;
}

//主函数
int main()
{
        NArray a,b,c;
        cout<<"*************分别创建三个多维数组如下:*************"<<endl<<endl;
        a=creatone();
        b=creatone();
        c=creatone();
        cout<<"创建的这三个数组的有关信息如下:"<<endl;
        cout<<"多维数组a:";
        printit(a);
        cout<<"多维数组b:";
        printit(b);
        cout<<"多维数组c:";
        printit(c);
        cout<<endl<<"数组之间相互赋值的结果如下:"<<endl;
        cout<<"将多维数组a的值赋给多维数组b ";
        qualify(a,b);
        cout<<"将多维数组a的值赋给多维数组c ";
        qualify(a,c);
        cout<<endl<<"随机存取数组中的指定元素:"<<endl;
        find(a);
        return 0;
}





[/i][/i][/i][/i][/i][/i][/i][/i][/i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-25 18:10:46 | 显示全部楼层

回帖奖励 +5 鱼币

我来骗点鱼币,代码太长了,我还小,等我长大了在来回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 17:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表