Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7652043
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 31, 20262026-05-31T11:39:48+00:00 2026-05-31T11:39:48+00:00

Hello I have a homework assignment where I need to read two matrix .txt

  • 0

Hello I have a homework assignment where I need to read two matrix .txt files in to two linked lists (store column, row and value) then add the two lists together and print out the summed matrix.

Reading the matrix to the linked lists works okay as does printing those lists as a matrix. However I’m stuck on how to add those two lists together. Ideally if the column value and the row value are the same when comparing one list to another then the value should be summed. If they are not the same then it should just print the value. I figured creating a new list the size of the combined lists then comparing the elements and adding all the others in was the way to go but I can’t seem to get it to advance more than node.

Thanks in advance for any help.

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

struct Node {
    int row;
    int column;
    int value;
    Node *next;
};
Node *A, *B, *C;

//Add node function. 
void addNode( Node *& listpointer, int r, int c, int v ) {
    Node *temp;
    temp = new Node;
    temp->row = r;
    temp->column = c;
    temp->value = v;
    temp->next = listpointer;
    listpointer = temp;             
}

//Matrix row file size function.
int getRowSize ( char *file_name ){
    int row = 0;
    int nothing = 0;
    ifstream input;
    string line;
    input.open(file_name);
    if(!input.good()){
        cout << "Cannot open file " << file_name << endl;
        exit(0);
    }
    if(input.good()){
        getline(input,line);
        stringstream sline(line);
        sline >> row >> nothing;
    }
    return row;
}

//Matrix column file size function. 
int getColumnSize ( char *file_name ){
    int column = 0;
    int nothing = 0;
    ifstream input;
    string line;
    input.open(file_name);
    if(!input.good()){
        cout << "Cannot open file " << file_name << endl;
        exit(0);
    }
    if(input.good()){
        getline(input,line);
        stringstream sline(line);
        sline >> nothing >> column;
    }
    return column;
}

//Read from file to LL function.
void readMatrix( Node* &a, char *file_name ){
    int row = getRowSize(file_name);
    int col = getColumnSize(file_name);
    //cout << "Row = " << row <<" Column = "<< col <<endl;
    int value = 0;
    string line;    
    ifstream input;
    input.open(file_name);
    if(!input.good()){
        cout << "Cannot open file " << file_name << endl;
        exit(0);
    }
    if(input.good()){
        getline(input,line);
        stringstream sline(line);
        sline >> row >> col;
        //cout << "Matrix dimensions " << row << " " << col << endl;
    }
    for(int i = 0; i < row; ++i){
        if(input.good()) {
            getline(input,line);
            stringstream sline(line);
            for(int j = 0; j < col; ++j){
                sline >> value;
                if(value == 0) continue;
                    addNode(a, i, j, value);
                    //cout << "Element at (" << i << " " << j << ") is different than zero and it is: "<< value <<" \n";
            }
            //cout << endl;
        }
    }
    input.close();
}

//Search function for print function.
int searchByPosition ( Node *listpointer, int r, int c){
    Node *current;
    current = listpointer;
    while ( true ){
        if ( current == NULL ){ break; }
        if (r == current->row &&  c == current->column) {
            //cout << "Value = " << x << "\n";
            return current->value;
        }
        current = current->next;
    }
    //cout << "Value not in list.\n";
    return 0;
}

//Print function.
void printMatrix ( Node *listpointer, int columnSize, int rowSize ){
    int c, r, v;
    for (r=0; r < rowSize; ++r) {
        for (c=0; c < columnSize; ++c) {
            v = searchByPosition(listpointer,r,c);
            printf("%d ", v);
        }
        printf("\n");
    }
    printf("\n");
}

//Function that mneasures both lists and creates a new combined list.
void concatenate ( Node *&result, Node *listpointer1, Node *listpointer2){
    Node *tempLP1, *tempLP2, *countLP1, *countLP2;
    countLP1 = listpointer1;
    countLP2 = listpointer2;
    tempLP1 = listpointer1;
    tempLP2 = listpointer2;
    int listpointer1Size = 0;
    int listpointer2Size = 0;
    while ( countLP1 != NULL ) {
        ++listpointer1Size;
        countLP1 = countLP1->next;
    }
    //cout << listpointer1Size <<endl;
    while ( countLP2 != NULL ) {
        ++listpointer2Size;
        countLP2 = countLP2->next;
    }
    //cout << listpointer2Size;
    int resultSize = listpointer1Size + listpointer2Size;
    //cout << resultSize;
    for (int i=0; i < resultSize; ++i) {
        if (tempLP1->column == tempLP2->column && tempLP1->row == tempLP2->row) {
            //cout << result->value<<" "<<result->row<<" "<<result->column<<endl;
            addNode(result, tempLP1->row, tempLP1->column, (tempLP1->value + tempLP2->value));
            //cout <<"marker "<<i+1<<endl;
            //result = result->next;
            tempLP1 = tempLP1->next;
            //cout << tempLP1->value<<" "<<tempLP1->row<<" "<<tempLP1->column<<endl;
            //cout << result->value<<" "<<result->row<<" "<<result->column<<endl;
        } else {
            addNode(result, tempLP1->row, tempLP1->column, tempLP1->value);
            //cout << tempLP1->value<<" "<<tempLP1->row<<" "<<tempLP1->column<<endl;
            tempLP1 = tempLP1->next;
            //addNode(result, listpointer2->row, listpointer2->column, listpointer2->value);
            //cout <<"marker2"<<endl;
            //cout << listpointer1->value;
            //result = result->next;
            //listpointer1 = listpointer1->next;
        }
    }

    /*current = listpointer1;
    prev = NULL;
    while ( current != NULL ){
        prev = current;
        current = current->next;
    }
    if ( prev == NULL ){
        //cout <<"List1 was empty, joining anyway.\n";
        listpointer1 = listpointer2;
    } else {
        //cout <<"Join.\n";
        prev->next = listpointer2;
    }*/

}

int main() {
    A = NULL;   // ALL linked-lists start empty
    B = NULL;   // ALL linked-lists start empty
    C = NULL;   // ALL linked-lists start empty
    readMatrix(A, (char*)"matrix1.txt");
    readMatrix(B, (char*)"matrix2.txt");
    int rowSize1 = getRowSize((char*)"matrix1.txt");
    int colSize1 = getColumnSize((char*)"matrix1.txt");
    //cout << rowSize << colSize;
    printMatrix(A, rowSize1, colSize1);
    printMatrix(B, rowSize1, colSize1);
    concatenate(C, A, B);
    //printMatrix(C, rowSize1, colSize1);
    //printMatrix(B, rowSize1, colSize1);
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-31T11:39:49+00:00Added an answer on May 31, 2026 at 11:39 am

    Here’s some code that will add two 2 x 2 matrices stored in linked-lists.

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct node {
        int row;
        int column;
        int value;
        struct node *next;
    } Node;
    
    void main()
    {
        int prev_node_row = 0;
        Node * matrix1;
        Node * matrix2;
        Node * m1cur;
        Node * m2cur;
    
        Node m1n0 = {0,0,1,NULL};
        Node m1n1 = {0,1,2,NULL};
        Node m1n2 = {1,0,3,NULL};
        Node m1n3 = {1,1,4,NULL};
    
        Node m2n0 = {0,0,5,NULL};
        Node m2n1 = {0,1,6,NULL};
        Node m2n2 = {1,0,7,NULL};
        Node m2n3 = {1,1,8,NULL};
    
        matrix1 = &m1n0;
        m1n0.next = &m1n1;
        m1n1.next = &m1n2;
        m1n2.next = &m1n3;
    
        matrix2 = &m2n0;
        m2n0.next = &m2n1;
        m2n1.next = &m2n2;
        m2n2.next = &m2n3;
    
        m1cur = matrix1;
        m2cur = matrix2;
        while (m1cur != NULL && m2cur != NULL)
        {
            if (prev_node_row < m1cur->row)
            {
                printf("\n");
            }
            printf("%d ", m1cur->value + m2cur->value);
            prev_node_row = m1cur->row;
            m1cur = m1cur->next;
            m2cur = m2cur->next;
        }
    }
    

    INITIALIZED MATRIX 1

    1 2
    3 4
    

    INITIALIZED MATRIX 2

    5 6
    7 8
    

    OUTPUT

    6 8
    10 12
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Hello is have a question for a school assignment i need to : Read
Hello i have a problem with c# Arrays. I need a array to store
Hello i have a list of apartments and i need to filter them by
Hello I have a double linked list set up, and i have a search
Hello I have 2 lists that contains the same objects. I would like to
Hello I have a problem I have Column data in string format in this
Hello I have the following error by git-fsck, which cannot be cleaned by git-gc
Hello we have an SQL server application running over a low bandwith connection. We
Hello I have a number of crystal reports in my VS2008 project. I am
Hello I have a table on which I have denied SELECT privs to a

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.