显示仅存储非零元素的链表中的稀疏矩阵

时间:2019-03-26 17:13:22

标签: c++ linked-list

我有一个用户输入的稀疏矩阵和一个链表,该链表仅存储非零元素,而忽略所有零。现在,我的目标是从此链接列表中,尝试从稀疏矩阵中获取所有元素(包括零和非零元素)并进行显示。请有人向我展示一种轻松的方法或一些说明或想法

  

用户在其中输入所有元素(零和非零)的稀疏矩阵

int row;
int column;
int count=0;
int sparseMatrix[10][10];
cout<<"Enter Number of Rows: ";
cin>>row;
cout<<endl;
cout<<"Enter Number of Column: ";
cin>>column;
cout<<endl;
int i,j;
cout<<"Enter Elements in the Matrix: ";
for(i = 0; i < row; i++)
{
    for(j = 0; j < column; j++)
    {
        cin>> sparseMatrix[i][j];
        if (sparseMatrix[i][j]==0)
            count++;
    }
}
  

仅从稀疏矩阵中读取非零元素并显示它们的链接列表

void PrintList(struct node* start)

{
struct node *temp, *r, *s;
temp = r = s = start;

cout<<"row_position:";
while(temp != NULL)
{

    cout<<temp->rowposition;
    temp = temp->next;
}
cout<<endl;
printf("column_postion: ");
while(r != NULL)
{
    cout<<r->columnposition;
    r = r->next;
}
cout<<endl;
printf("Value: ");
while(s != NULL)
{
    cout<<s->value;
    s = s->next;
}
    cout<<endl;
}
  

创建链接列表节点

    struct node {
    int value;
    int rowposition;
    int columnposition;
        struct node *next;
    };
void createNewNode (struct node** start, int NonZeroElement, int rowIndex, int columnIndex) // functions with parameter
{
    struct node *temp, *r;
    temp = *start;
    if (temp==NULL)
    {
        temp=(struct node *) malloc (sizeof (struct node)); // creates a new node dynamically
        temp -> value= NonZeroElement;
        temp -> rowposition = rowIndex;
        temp -> columnposition = columnIndex;
        temp -> next=NULL;
        *start = temp;
    }
    else
    {
        while (temp->next != NULL)
            temp = temp->next;

        // Create new node dynamically
        r = (struct node *) malloc (sizeof(struct node));
        r->value = NonZeroElement;
        r->rowposition = rowIndex;
        r->columnposition = columnIndex;
        r->next = NULL;
        temp->next = r;
    }
}

我的目标是显示此矩阵,如下图所示: This is how the Matrix Should be displayed.My Aim 这是到目前为止我在图片中的输出:

My Current Output of this code so far picture

1 个答案:

答案 0 :(得分:0)

我认为您需要考虑函数调用PrintList的结构或稀疏Matrix数据结构本身。数据结构或printList方法中的某个地方应该是稀疏矩阵的所需逐行结构。考虑一下一个问题,即除了[1,2]处的一个值外,所有其他零都为4x4的矩阵。打印方法将不知道您想要一个4x4矩阵,唯一的例外是[1,2],除非该打印方法接收到行和列数的输入,或者数据结构本身保留了这些值。这应该使函数调用更加自立,而不必依赖主体中的代码来为您指定。 另一个要注意的是,由于无论如何都要打印行x列的值,因此在为行和列创建嵌套的for循环以及检查当前链接列表节点的行和列值是否确实是很少的开销嵌套循环结构的控制变量。如果不是,则可以打印零,并且当到达内部for循环的末尾时,可以打印新行以处理代码。 当然,您可能只有一个值的链接列表,并且可以使用它来设置矩阵的维数。在我给出的示例中,由于最大行和列值为[1,2],所以最终将打印出2 x 3矩阵,而不是所需的4 x 4矩阵。但是,这可能会导致不良结果,因为矩阵运算通常需要非常特定的维度,并且信息丢失可能会给您带来不好的结果。希望这会有所帮助!