Hola loko... especifica mas tu pregunta si poh.... de todas formas para hacer una lista circulas tiene que implementar una estructura... ke sera el nodo de tu lista:
struct lista {
int dato;
struct lista* sig;
};
Por ejemplo ahi tienes la definicion de un nodo de lista para numeros enteros. Fijate en la declaracion autoreferencial del puntero, indica que apuntara a otro nodo del mismo tipo, struct lista.
Ahora lo unico que tienes que hacer para tener tu lista circular es crear nodo e irlos enlazando, y dejar siempre el ultimo apuntando al primero. Por supuesto deberas tener un puntero a tu primer nodo que te indica donde empieza tu lista. Puedes hacer una funcion que te cree nodos... lo fundamental es:
struct lista* nodo;
nodo=(struct lista*)malloc(sizeof(struct lista));
Con eso reservas espacion en la memoria para un nodo, si no hay sufuente memoria malloc te deja a nodo como puntero nulo. Es importante que captes bien como funcionan los castings con mallos, realloc etc, porke despues cuando uno trabaja con putero a punteros, o tripes punteros y cosas asi se arman unos enredos en como hacer el casting, si es ke uno no lo tiene claro.
Cada vez que haces un nodo tienes que "insertarlo", o sea cambiar los punteros del ultimo nodo, que apunten al nuevo nodo, y hacer que nodo->sig apunte a tu primer elemento que tienes que tener siempre en un puntero, si no pierdes la lista y se fuga memoria!!!
Esta implementacion de lista es muy rasca si, es mejor hacer listas con cabecera con punteros al primer y ultimo elemento, son mas eficientes.
Mira yo he hecho unas tareas, estudio ing civ informatica, las dejo en
http://www.totex.cl/inf/estructura/ y
http://www.totex.cl/inf/fundamentos/ .
No son cosas sofisticadas pero a ver si de algo te sirven, reviza el archivo lista.h, ahi hice hartas funciones para lista enlzada.