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