Resources

This page contains links to third-party resources that you may find helpful. If you have suggestions for other resources that your fellow students may find helpful, please let me know.

Installing a C Compiler

GNU/Linux is the preferred operating system for this class. The GNU C compiler is an integral part of a GNU/Linux operating system and is easy to install and use in such an environment. Our lab runs a specific GNU/Linux distribution called Mint. If you do not already have access to a C compiler on your personal computer, you may wish to set one up using one of the following options depending on your operating system:

  • Ubuntu or Mint Linux (or any other Debian-based distribution): Run "sudo apt-get install build-essential" in a terminal as an admin user.
  • Fedora or other RPM-based distribution: Run "yum groupinstall "Development tools"" in a terminal as an admin user.
  • Mac OS X: You will need to install the Xcode Command Line Tools package. Here is one guide.
  • Native Windows: You have two main options, Cygwin or MinGW. The former is a larger system that includes a variety of tools to create a development environment similar to Linux on Windows. The later is a smaller system that focuses more closely on providing compilers.
  • Any platform: You can use VirtualBox to create a virtual machine on your system that runs GNU/Linux. Here is a tutorial; you should also consider attending the Unix Users' Group tutorial at 7:00pm on Wednesday, September 2, in ISAT/CS 259.
  • SSH server: You can develop C programs on stu.cs.jmu.edu (a departmental server) or educ.jmu.edu (a university server). You will need an SSH client (the "ssh" command-line utility is installed by default in GNU/Linux or Mac OS X; try PuTTY on Windows). To access Educ, you'll first need to request an account. If you are a CS student, you should already have an account on stu.

Learning C

Generic Makefiles

References

Theory/Math References

LaTeX

Miscellaneous

  • Big-O Cheat Sheet - List of Big-O times for many common structures and algorithms
  • VisuAlgo - Interactive visualizations of data structures and algorithms
  • OpenClipArt - Public domain images (clipart on this website comes from here)
  • Wolfram Alpha - General purpose mathematical engine