aquí tienes una lectura sobre listas enlazadas;
http://www.c.conclase.net/edd/?cap=001
deberás usar memoria dinámica pero todo esta explicado ahí, solo hay que trasladar esa teoria a lo que tu quieres hacer. Incluso puedes descargar un modelo funcional de lo expuesto en los ejemplos.
seria tener una variable llamada memoriaRAM tipo entera mismo, a la que le asignas una cuantiad que tu quieras de la RAM en megabytes, serian 4 mil y pico para simular 4 gigasXDD, luego cuando vayas a simular un programa que solicita RAM, seria crear un nodo como lo explica en esa pagina, que reserve(restar) una porción de la memoria, o sea, cada nodo tendría una variable tipo int que representaría la porción de memoria ocupada a la que irias restando de la RAM, al liberar esa memoria deberías volver a sumarla a la RAM, no creo que tengas problemas si te diriges a la pagina y logras entender lo de las listas, creo que es fácil vamos.
Los pasos serian declarar la memoriaRAM, crear una lista la que puedes llamar sistema y entonces hacer un scanf y leer el nombre del programa y la cantidad de RAM que ocuparía ese programa, si hay RAM pues crear un nodo que contenga el nombre de la aplicación y la cantidad reservada, si no hay RAM avisar y ya esta. Después en el mismo tutorial se muestra como listar todo para ver RAM ocupada y imprimir lo que esta disponible que es memoriaRAM. XD
venga que no es para tanto jejej