SoloCodigo
		Programación General => C/C++ => Mensaje iniciado por: dooky_titay en Domingo 10 de Octubre de 2004, 19:06
		
			
			- 
				Amigos tengo un programa de lista enlazada el cual hicimos en equipo pero ahora tenemos que hacer uno de lista circular lo malo ;)  es que nos cambiaron a todos del equipo <_<  y mis compañeros pues no me ayudan  :angry:  chequen este codigo del programa espero que puedan darme unos tips para poder arreglar este codigo para que sea de lista circular, en verdad apreciaria mucho su ayuda
 GRACIAS :hola:  :D
 
 /* Operando y manteniendo una lista */
 #include <stdio.h>
 #include <stdlib.h>
 #include <conio.h>
 
 struct ListaNodo
 {  /* estructura auto-referenciada */
 char dato;
 struct ListaNodo *proximoPtr;
 };
 
 typedef struct ListaNodo LISTANODO;
 typedef LISTANODO *LISTANODOPTR;
 
 void insertar(LISTANODOPTR *, char);
 char suprimir(LISTANODOPTR *, char);
 int EstaVacia(LISTANODOPTR);
 void ImprimeLista(LISTANODOPTR);
 void instrucciones(void);
 
 main()
 {
 LISTANODOPTR IniciaPtr = NULL;
 int eleccion=1;
 char item;
 
 instrucciones();  /* despliega el menu */
 
 while (eleccion != 3)
 {
 do
 {
 printf("? ");
 scanf("%d", &eleccion);
 }while(eleccion<1 || eleccion>3);
 switch (eleccion)
 {
 case 1: printf("Dame un caracter: ");
 scanf("\n%c", &item);
 insertar(&IniciaPtr, item);
 ImprimeLista(IniciaPtr);
 break;
 case 2: if (EstaVacia(IniciaPtr))
 printf("La lista esta vacia.\n\n");
 else
 {
 printf("Dame el caracter a ser suprimido: ");
 scanf("\n%c", &item);
 if (suprimir(&IniciaPtr, item))
 {
 printf("%c suprimido.\n", item);
 ImprimeLista(IniciaPtr);
 }
 else printf("%c no encontrado.\n\n", item);
 }
 break;
 default:printf("Invalida eleccion.\n\n");
 instrucciones();
 break;
 }
 }
 printf("Fin de la ejecucion.\n");
 return 0;
 }
 
 /* Imprime las instrucciones */
 void instrucciones(void)
 {
 printf("Dame tu eleccion:\n"
 "   1 para insertar un elemento en la lista.\n"
 "   2 para suprimir un elementa desde la lista.\n"
 "   3 para terminar.\n");
 }
 
 /* Inserta a un nuevo valor en la lista ordenada*/
 void insertar(LISTANODOPTR *sPtr, char valor)
 {
 LISTANODOPTR nuevoPtr, anteriorPtr, actualPtr;
 
 nuevoPtr = malloc(sizeof(LISTANODO));
 
 if (nuevoPtr != NULL)/* es espacio disponible */
 {
 nuevoPtr->dato = valor;
 nuevoPtr->proximoPtr = NULL;
 anteriorPtr = NULL;
 actualPtr = *sPtr;
 while (actualPtr != NULL && valor > actualPtr->dato)
 {
 anteriorPtr = actualPtr;          /* camina a ...   */
 actualPtr = actualPtr->proximoPtr;  /* ... proximo node */
 }
 if (anteriorPtr == NULL)
 {
 nuevoPtr->proximoPtr = *sPtr;
 *sPtr = nuevoPtr;
 }
 else
 {
 anteriorPtr->proximoPtr = nuevoPtr;
 nuevoPtr->proximoPtr = actualPtr;
 }
 printf("\n%-25s%-25s%-25s","sPtr","anteriorPtr","actualPtr");
 printf("\n%-25p%-25p%-25p",sPtr,anteriorPtr,actualPtr);
 getch();
 }
 else printf("%c no insertado. No hay memoria disponible.\n", valor);
 }
 
 /* Suprimiendo un elemento de la lista */
 char suprimir(LISTANODOPTR *sPtr, char valor)
 {
 LISTANODOPTR anteriorPtr, actualPtr, tempPtr;
 
 if (valor == (*sPtr)->dato)
 {
 tempPtr = *sPtr;
 *sPtr = (*sPtr)->proximoPtr;  /* suprimiendo el nodo */
 free(tempPtr);             /* liberando la memoria del nodo suprimido */
 return valor;
 }
 else
 {
 anteriorPtr = *sPtr;
 actualPtr = (*sPtr)->proximoPtr;
 while (actualPtr != NULL && actualPtr->dato != valor)
 {
 anteriorPtr = actualPtr;          /* caminando a ...   */
 actualPtr = actualPtr->proximoPtr;  /* ... proximo node */
 }
 
 if (actualPtr != NULL)
 {
 tempPtr = actualPtr;
 anteriorPtr->proximoPtr = actualPtr->proximoPtr;
 free(tempPtr);
 return valor;
 }
 }
 return '\0';
 }
 
 /* Regresa un 1 si la lista esta vacia, 0 en cualquier otro caso */
 int EstaVacia(LISTANODOPTR sPtr)
 {
 return sPtr == NULL;
 }
 
 /* Imprime la lista */
 void ImprimeLista(LISTANODOPTR actualPtr)
 {
 if (actualPtr == NULL)
 printf("\nLa lista esta vacia.\n\n");
 else
 {
 printf("\nLa lista es:\n");
 while (actualPtr != NULL)
 {
 printf("%c --> ", actualPtr->dato);
 actualPtr = actualPtr->proximoPtr;
 }
 printf("NULL\n\n");
 }
 }