数据结构2-数组和稀疏矩阵

2.1 线性表
线性表中数据可以是任意类型,但是同一个线性表的每个元素的数据类型必须属于同一个类型。
1.静态数据结构:
优点是将有序表的数据元素存储在连续的存储空间中。数组结构就是典型的静态数据结构,在设计时候相当简单,读取与修改表中任意元素时间都固定。
缺点是删除或者加入数据时需要移动大量的数据。内存空间分配在编译的时候就设定好了,数组在建立前期就需要申请最大的固定内存空间,造成内存浪费。
简而言之:读取速度快,但是加入删除数据需要移动大量数据。
比如数组类型就不适用静态数据结构,因为每次增加或者删除数据,需要移动大量数据。
对于一个n个元素的数组,插入一个新数据平均需要移动几个数据?
答:这就要求期望,在每个位置插入数据概率为1/n,所以E=1X1/N+2X1/N+…NX1/N=(N+1)/2

2.动态数据结构:
动态数据结构又被称为“链表”(linked list)。他将线性表的数据不连续的存储在空间中,通过指针保持数据元素之间的逻辑关系。
优点:插入或者删除数据非常方便,不需要移动大量数据。动态数据结构的内存分配时在执行的时候发生的,所以不需要事先声明。
缺点:设计数据结构的时候较为麻烦,在查找数据的时候也无法像静态数据结构一般可随机读取数据,必须循序找到该数据。
动态分配内存:表示由操作系统提供内存空间

2.2数组简介
定义数组:1.起始地址;
2.维数;
3.下标上下界;
4.数组元素个数;
5.数组类型。
比如第一个数据地址为a,则A[2]=a+1*d;………………A[n]=a+(n-1)*d
二维数组的定义 int a[2][3]; //这个时候需要注意,二维数组声明是先列在行!
这里有一个问题:不论对于1维数组,2维数组还是多维数组,已知一些参变量要求任意元素所在的位置!
这里分两种情况,以列为主和以行为主。通用公式为:
以列为主:
这里写图片描述

以行为主:
这里写图片描述

式中,i为元素所在坐标,alpha为起始位置,u的定位为:
对于一个定义好的四维数组:A(1:3,1:6,1:5,1:3),则u的值为:
u1=3,u2=6,u3=5,u4=3。

2.3 矩阵简介与运算
运算:加、减、乘除、Sparse矩阵、矩阵转置、上三角、下三角矩阵等。
对于矩阵的加法,即定义两个二维数组a,b,然后初始化,在声明一个二维数组c,将元素初始化为0.代码为:

for(int row=1;row<=dimX;row++)
   for(int col=1;col<=dimY;col++)
   arrC[(row-1)*dimY+(col-1)]=arrA[(row-1)*dimY+(col-1)]+
   arrB[(row-1)*dimY+(col-1)];

矩阵相乘:

//这里C=A*B;
//其中A为M*N矩阵;
//B为N*P矩阵;
//C为M*P矩阵。
for(int i=0;i<M;i++)
    for(int j=0;i<P;j++)
        {   
        int temp;
            temp=0;
           for(int k=0;k<N;k++)
             {temp=temp+arrA[i*N+k]*arrB[k*p+j];
             arrC[i*p+j]=temp;}
             }

转置矩阵:

for(row=1;row<=N;row++)
  for(col=1;col<=M;col++)
     arrB[(col-1)*N+(row-1)]=arrA[(row-1)+(col-1)*N];

稀疏矩阵:
矩阵中大多数元素为0的称为“稀疏矩阵”(Sparse matrix)。
其中A(0,1)表示 稀疏矩阵的列数;
A(0,2)表示稀疏矩阵的行数;
A(0,3)表示稀疏矩阵非零项目的总数。
(i,j,item-value)表示非零元素的坐标位置和数值。
其实稀疏矩阵的表示是一个n*3的列表
这里写图片描述

上三角矩阵、下三角矩阵
对于右上三角矩阵:

A(i,j)=0         if i>j;
A(i,j)=aij     if i<j=j;

这里值得注意的是,无论是何种形式的三角矩阵,都有一半的元素为0.因此在编码或者申请内存时候,只为这部分申请空间,其他的元素置0。这样可以极大程度上节约内存的开销。

带状矩阵:就是除了第一行和最后一行为2个元素,其他都是三个元素,分别为对角线位置,和对角线的相邻位置。

2.4数组与多项式
多项式可以用数组或者链表来存储。

这里写图片描述
比如T6多项式可以表示为:
1)用n+2长度的一维数组存放,数组第一个位置存储最大指数n,其他存系数,没有的用0补上。(6,32,0,-48,0,18,0,-1)。
缺点:当0项较多时,浪费存储空间。
2)只存储非0项目。如果有m项非零项目。2m+1长的数组来存储每一个非零项的指数和系数,但是系数的第一项为非0项目的个数。T6可以表示为:
(4,32,6,-48,4,18,2,-1,0)

总结:线性表是n个元素有序的排列起来。存储方式有静态数据结构和动态数据结构。
静态数据结构也成为“密集表”,他将有序的链表使用连续存储空间来存储;
动态数据结构成为“链表”,将线性表数据采用不连续的存储空间来存储。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值