(2.)

select tablespace_name,sum(user_blocks)
from dba_data_files
group by tablespace_name
--> gives you a list how many blocks you can use per tablespace (total )

select tablespace_name,sum(blocks)
from dba_segments
group by tablespace_name
--> gives you a list per tablespace how many blocks are already in use ( used )

select tablespace_name,sum(blocks)
from dba_free_space
group by tablespace_name
-> gives you a list per tablespace how many blocks are available. ( free )

for each tablespace (total) = ( used ) + ( free )

for every datafile in you tablespace you lose 1 block that's used as the datafile header. ( in dba_data_files blocks - user_blocks = 1 )

Hope this helps
Gert