In this paper, we consider the channel allocation problem for throughput maximization in cognitive radio networks with hardware-constrained secondary users. Specifically, we assume that secondary users exploit spectrum holes on a set of channels where each secondary user can use at most one available channel for communication. We develop two channel assignment algorithms that can efficiently utilize spectrum opportunities on these channels. In the first algorithm, secondary users are assigned distinct sets of channels. We show that this algorithm achieves the maximum throughput limit if the number of channels is sufficiently large. In addition, we propose an overlapping channel assignment algorithm, that can improve the throughput performance compared to the non-overlapping channel assignment algorithm. In addition, we design a distributed MAC protocol for access contention resolution and integrate the derived MAC protocol overhead into the second channel assignment algorithm. Finally, numerical results are presented to validate the theoretical results and illustrate the performance gain due to the overlapping channel assignment algorithm.