C中的链表和稀疏矩阵

时间:2015-12-16 12:56:34

标签: c linked-list sparse-matrix

我需要使用C:

中的喜欢列表来表示稀疏矩阵

结构定义如下;

typedef struct matrix{
  struct matrix *right;
  struct matrix *below;
  int rowptr, colptr;
  double val;
}Matrix;

我知道右边指的是行的下一个非零元素(下面指向列的非零元素)。

我需要定义这个函数:

  1. Matrix * initiate(void),它使用stdin从.txt文件中读取非零元素(仅包含非零值)。

  2. void print(Matrix *),它使用stdout打印矩阵。

  3. Matrix * add(Matrix *,Matrix *);

  4. void set_elemnt(Matrix * A,int i,int j,double x):赋值A(i,j)= x。

  5. double get_element(Matrix * A,int i,int j);返回A(i,j)。

  6. 我不知道定义标题单元格(不包含任何内容),其他单元格表示非零值。 此链接中的此图像代表了我必须做的事情:

    enter image description here

    到目前为止我所拥有的:

    Matrix* initiate(void){
      Matrix *A=malloc(sizeof(*A));
    
      A->rowptr=rowptr;
      A->colptr=colptr;
    
      A->right=malloc(rowptr * sizeof(*rowptr->right));
      A->below=malloc(n * sizeof(*n->col));
    
      return A;
    }
    

    对于标题(不包含任何内容的标题),我尝试这样做,但我不知道它是否有用:

    Matrix* initiate_1(void){
       Matrix *A=malloc(sizeof(*A));
       A->rowptr=-1;
       A->colptr=-1;
       A->val=nan;
       A->right=A;
       A->below=A;
    }
    

    添加矩阵:

    Matrix* add(Matrix*,Matrix*){
       int i;
       Matrix *C = initiate(); //I don't know what to put here
       for (int i = 0; ; i++) { //don't know what to put in the middle space
                                // don't know what to put here
       }
    }
    

    另外,我认为我可以创建一个只有零的矩阵,但我不确定如何做到这一点以及是否有任何帮助。 如果你能帮助我,我将不胜感激,我几乎不了解数据结构。谢谢!

0 个答案:

没有答案