Sparse Matrix
Algorithm
Input Number of rows and columns Output Sparse matrix Complexity O(n). create(h)//Creates sparse matrix using linked list 1. [Input number of rows(r) and columns(c)] 2. [ create the head node]. 3. [initialize row & col no and rw & col ptrs] h→r=r, h→c=c, h→rptr=h, h→cptr=h; 4. Set h→data=0; 5. [ create column headers] a. Set ptr=h; b. Repeat for i=1 to c i. [Create new node]. ii. Set node→r=0, node→c=I, node→data=0, node→rptr=h and node→cptr=node. iii. Set ptr→rptr=node and ptr=node 6. [ create row headers] a. Set ptr=h; b. Repeat for i=1 to c i. [Create new node]. ii. Set node→r=0, node→c=I, node→data=0, node→rptr=h and node→cptr=node. iii. Set ptr→rptr=node and ptr=node 7. [Input array elements( row number(i),column number(j),data(d))] 8. Repeat while(i&&j&&d) a. Set * row_header=h→cptr and column_header=h→rptr; b. [ find the correct row header and column header] i. Set row_header:=row_header→cptr, while(row_header→r<i) ii. Set column_header=column_header→rptr, while(column_header→c<j) c. [ find the correct position to insert] i. Set *row_ptr=row_header; ii. Repeat while(row_ptr→c<j) 1. Set ptr1=row_ptr and row_ptr=row_ptr→rptr. 2. if(row_ptr==row_header) then : break. iii. Set *column_ptr=column_header; iv. Repeat while(column_ptr→r<i) 1. Set ptr2=column_ptr and column_ptr=column_ptr→cptr. 2. if(column_ptr==column_header) then: break. d. Set node→r=I, node→c=j, node→data=d, ptr1→rptr=node, ptr2→cptr=node. e. Set node→rptr=row_ptr, node→cptr=column_ptr. f. [Input row number(i),column number(j),data(c) ]. g. If(i>r || j>c ) then print: " error input" and exit. 9. return h; 10. [exit] add(h1,h2)//adds two sparse matrix h1 and h2 1. If(h1→r==h2→r && h1→c==h2→c) then: continue. 2. Else print : "addition is not possible" and exit. 3. Set r1:=h1→cptr, r2=h2→cptr. 4. Repeat while(r1!=h1) a. Set r1=r1→rptr, r2=r2→rptr; b. Repeat while(r1!= p1 && r2!=p2) i. if(r1→c==r2→c) then : Set r1=r1→rptr, r2=r2→rptr. ii. else if(r1→c>r2→c) then : set r2=r2→rptr. iii. Else Set r1 :=r1→rptr. c. Set r1 := r1→ ptr , while(r1!=p1) d. Set r2 := r2→ptr, while(r2!=p2) e. Set r1:=r1→cptr, and r2=r2→cptr. 5. [exit]
Algorithm Description