In this paper, we consider the channel assignment problem for cognitive radio networks with hardware-constrained secondary users (SUs). In particular, we assume that SUs exploit spectrum holes on a set of channels where each SU can use at most one available channel for communication. We present the optimal brute-force search algorithm to solve the corresponding nonlinear integer optimization problem and analyze its complexity. Because the optimal solution has exponential complexity with the numbers of channels and SUs, we develop two low-complexity channel assignment algorithms that can efficiently utilize the spectrum holes. In the first algorithm, SUs 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 with its nonoverlapping channel assignment counterpart. Moreover, we design a distributed medium access control (MAC) protocol for access contention resolution and integrate it into the overlapping channel assignment algorithm. We then analyze the saturation throughput and the complexity of the proposed channel assignment algorithms. We also present several potential extensions, including the development of greedy channel assignment algorithms under the max-min fairness criterion and throughput analysis, considering sensing errors. Finally, numerical results are presented to validate the developed theoretical results and illustrate the performance gains due to the proposed channel assignment algorithms.