The Linux kernel mostly supports any printer that you can plug into a serial or parallel port, but there are things to look out for, and printers that you won't be able to use, even though they can (electrically speaking) communicate with Linux. Primary among these incompatible printers are those that rely on the "Windows Printing System". (They're often vaguely labelled "for Windows".) These printers do not work with Linux. They haven't any "smarts" at all, and rely on the computer CPU to do much of the tasks that have been traditionally done by the printer's CPU. Unfortunately, these tasks can only be done by the vendor-supplied drivers, which only run under Windows. So don't buy one to use with Linux.
As for what printers do work with Linux, the best choice is to buy a printer with native PostScript support. Nearly all Unix software that produces printable output produces it in PostScript, so obviously it'd be nice to get a printer that supports PostScript directly. Unfortunately, PostScript support is scarce outside the laser printer domain.
Failing the (larger) budget necessary to buy a PostScript printer, you can use any printer supported by Ghostscript, the free PostScript interpreter used in lieu of actual printer PostScript support. The Ghostscript Home Page has a list of supported printers and information on the status of new and experimental drivers. Please help improve the Ghostscript printer support page by reorting your successes and failures as it asks.