稀疏数组

二维数组:求某一元素在数组中的位置。

1、以行为主:

                 data[i][j]的内存位置=第一个元素的位置+[ (i * 每一行元素个数)+j ] * ( 数据类型所占空间大小)

 

2、以列为主:

                 data[i][j]的内存位置=第一个元素的位置+[ (j * 每一行元素个数)+i ] * ( 数据类型所占空间大小)

 

如:int  data[ 5 ] [ 4 ]、 arr[ 20 ]

       则  以行为主:data[ i ] [ j ] = arr[ i * 4 + j ];

             以列为主:data[ i ] [ j ] = arr[ j * 5 + i ];

 

 

稀疏数组:指数组中大部分的内容值都未被使用(或都为0),仅有少部分的空间被使用,因此造成内存空间浪费,为了节省内存空间,先用一种压缩的  方式来表示稀疏数组的内容!

 

 

#include <iostream>
#include <iomanip>
using namespace std;

int Data[9][7]={{0},{0,3},{0},{1,4},{0,0,7},{0,0,0,0,0,5},{0},{0}};

 

int main()
{
 int i,j,Index=0;                                 //Index为压缩数组的索引值
 int CompressData[10][3];            //存储压缩后数据的数组

 

 cout<<"压缩前的数组:\n";
 for(i=0;i<9;i++)
 {
  for(j=0;j<7;j++)
   cout<<setw(3)<<Data[i][j];
  cout<<endl;
 }

 

 //进行数组数据压缩
 for(i=0;i<9;i++)
  for(j=0;j<7;j++)
   if(Data[i][j]!=0)
   {
    Index++;                                                        //增加数组索引值,从1开始
    CompressData[Index][0]=i;                       //记录元素的行位置
    CompressData[Index][1]=j;                       //记录元素的列位置
    CompressData[Index][2]=Data[i][j];         //存储原数组的有效元素
   }

 CompressData[0][0]=9;                      //原数组的行数
 CompressData[0][1]=7;                      //原数组的列数
 CompressData[0][2]=Index;               //使用的元素个数

 

 cout<<"\n压缩后的数组为:\n";
 for(i=0;i<=Index;i++)
 {
  for(j=0;j<3;j++)
   cout<<setw(3)<<CompressData[i][j];
  cout<<endl;
 }

 

 cout<<endl;
 return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值