You still can use lists – just use proper CSS (every third li – first li in every row – should have clear
property set; You can use CSS classes or :nth-child selector to do this).
If you really have to use table (I don’t suggest it – it’s not a very good idea, because it’s not semantic), you can do something like this:
<table>
<?php while ( have_post() ): the_post(); ?>
<php if ( $wp_query->current_post % 3 == 0 ): ?>
<?php if ( $wp_query->current_post ): ?>
</tr>
<?php endif; ?>
<tr>
<?php endif; ?>
<td>
... YOUR POST GOES HERE
</td>
<?php endwhile; ?>
<?php $i = $wp_query->current_post; while ( $i % 3 != 0 ): $i++ ?><td></td><?php endwhile; ?>
</tr>
</table>
Not tested it, so it can be a little bit buggy, but idea should be clear.