首页 > 用户发贴区 > 编程问题提问区 > 求救,数据结构的一些问题
2007
10-13

求救,数据结构的一些问题

Status  FastTransposeSMatrix(TSMatrix M, TSMatrix &T) {  // 算法5.2
  // 采用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵T
  int col, t, p, q;
  int num[20], cpot[20];
  T.mu = M.nu;  T.nu = M.mu;  T.tu = M.tu;
  if (T.tu) {
    for (col=1; col<=M.nu; ++col) num[col] = 0;
    for (t=1; t<=M.tu; ++t) // 求 M 中每一列所含非零元的个数
       ++num[M.data[t].j];(这是什么意思啊)
    cpot[1] = 1;        
    // 求 M 中每一列的第一个非零元在 b.data 中的序号
    for (col=2; col<=M.nu; ++col) cpot[col] = cpot[col-1]+num[col-1];
    for (p=1; p<=M.tu; ++p) {   
      col = M.data[p].j;   q = cpot[col];
      T.data[q].i =M.data[p].j;  T.data[q].j =M.data[p].i;
      T.data[q].e =M.data[p].e;  ++cpot[col]; (这又是什么含义啊,为什么要++)
    } // for
  } // if
  return OK;
} // FastTransposeSMatrix


 


还有


Status CreateSMatrix_OL (CrossList &M) { // 算法5.4
  // 创建稀疏矩阵M。采用十字链表存储表示。
  // if (M) free(M);
  // scanf(&m, &n, &t );    // 输入M的行数、列数和非零元个数
  OLNode *p,*q;
  int i,j,e;
  int m=random(4,6), n=random(4,6), t=random(4,5);
  M.mu=m;  M.nu=n;  M.tu=t;
  if (!(M.rhead = (OLink *)malloc((m+1)*sizeof(OLink)))) return ERROR;
  if (!(M.chead = (OLink *)malloc((n+1)*sizeof(OLink)))) return ERROR;
  for(int a=1;a<=m;a++)  // 初始化行列头指针向量;各行列链表为空链表
     M.rhead[a]=NULL;
  for(int b=1;b<=n;b++) M.chead[b]=NULL;
  for ( int c=1; c<=t; c++) { // 按任意次序输入非零元
    scanf(&i,&j,&e);
    if (!(p = (OLNode *)malloc(sizeof(OLNode)))) return ERROR;
    p->i=i;  p->j=j;  p->e=e;  p->down=NULL;  p->right=NULL; // 新结点
    if (M.rhead[i] == NULL || M.rhead[i]->j > j) {
      p->right = M.rhead[i];   M.rhead[i]= p; 
    } else {  // 寻查在行表中的插入位置
      for (q=M.rhead[i]; (q->right) && (q->right->j<j);  q=q->right);
      p->right = q->right;  q ->right = p;    
    }  // 完成行插入
    if (M.chead[j] == NULL || M.chead[j]->i > i) {
      p->down = M.chead[j];   M.chead[j]= p; 
    } else {  // 寻查在列表中的插入位置
      for ( q=M.chead[j]; (q->down) && q->down->i <i;  q = q->down );
        p->down = q->down;  q->down = p;   
    }  // 完成列插入
  } // for
  return OK;
} // CreateSMatrix_OL
                           


这里的 if (!(M.rhead = (OLink *)malloc((m+1)*sizeof(OLink)))) return ERROR;为什么有(m+1)啊什么意思啊??后面的指针M.chead[j] 怎么有【】呢??不懂啊。。


希望高手们给小弟指条明路走走,都困扰在下一天了。。。。。。


谢谢。。。。。。。。。 


留下一个回复