千里暮云平

常用链接

统计

最新评论

数组与广义表

例1〖软考题〗:一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是__个字节。
答: Volume=m*n*L=(6-1+1)*(7- 0 +1)*6=48*6=288

例2:已知二维数组Am,n按行存储的元素地址公式是: Loc(aij)= Loc(a11)+[(i-1)*n+(j-1)]*K , 按列存储的公式是?
Loc(aij)=Loc(a11)+[(j-1)*m+(i-1)]*K  (尽管是方阵,但公式仍不同)

Loc(aij)=Loc(a00)+(i*n+j)*K;
Loc(aij)=Loc(a00)+(j*m+i)*K;

例3:〖某考研题〗设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 __.
利用列优先通式:
LOC(aij)=LOC(ac1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L
得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1)]*2=8950
                       。

 



稀疏矩阵:

define SMAX 1024 /*一个足够大的数*/
  typedef struct
  { int i,j; /*非零元素的行、列*/
  datatype v; /*非零元素值*/
  }SPNode; /*三元组类型*/2
  typedef struct
  { int mu,nu,tu; /*矩阵的行、列及非零元素的个数*/
  SPNode data[SMAX]; /*三元组表*/
  } SPMatrix; /*三元组表的存储类型*/

转置算法:

void TransM1 (SPMatrix *A)
  { SPMatrix *B;
  int p,q,col;
  B=malloc(sizeof(SPMatrix)); /*申请存储空间*/
  B->mu=A->nu; B->nu=A->mu; B->tu=A->tu;
  /*稀疏矩阵的行、列、元素个数*/
  if (B->tu>0) /*有非零元素则转换*/
  { q=0;
  for (col=1; col<=(A->nu); col++) /*按A的列序转换*/
  for (p=1; p<= (A->tu); p++) /*扫描整个三元组表*/
  if (A->data[p].j==col )
  { B->data[q].i= A->data[p].j ;
  B->data[q].j= A->data[p].i ;
  B->data[q].v= A->data[p].v;
  q++; }/*if*/
  } /*if(B->tu>0)*/
  return B;  /*返回的是转置矩阵的指针*/
  } /*TransM1*/


改进的转置算法:
SPMatrix * TransM2 (SPMatrix *A)
  { SPMatrix *B;
  int i,j,k;
  int num[n+1],cpot[n+1];
  B=malloc(sizeof(SPMatrix)); /*申请存储空间*/
  B->mu=A->nu; B->nu=A->mu; B->tu=A->tu;
  /*稀疏矩阵的行、列、元素个数*/
  if (B->tu>0) /*有非零元素则转换*/
  { for (i=1;i<=A->nu;i++) num[i]=0;
  for (i=1;i<=A->tu;i++)  /*求矩阵A中每一列非零元素的个数*/
  { j= A->data[i].j;
  num[j]++;
  }
  cpot[1]=1; /*求矩阵A中每一列第一个非零元素在B.data中的位置*/
  for (i=2;i<=A->nu;i++)
  cpot[i]= cpot[i-1]+num[i-1];
  for (i=1; i<= (A->tu); i++)  /*扫描三元组表*/
  { j=A->data[i].j; /*当前三元组的列号*/
  k=cpot[j];  /*当前三元组在B.data中的位置*/
  B->data[k].i= A->data[i].j ;
  B->data[k].j= A->data[i].i ;
  B->data[k].v= A->data[i].v;
  cpot[j]++;
  } /*for i */
  } /*if (B->tu>0)*/
  return B;  /*返回的是转置矩阵的指针*/
  } /*TransM2*/

posted on 2010-02-09 23:44 Adam 阅读(88) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理