#include #include /* PROGRAMA: lista_circular.cpp DESCRIPCIÓN: Implementación de una lista enlazada circular AUTOR: Fco. J. H. L. VERSIÓN: 1.0 Fecha Inicio: 02-Septiembre-2014 Fecha Actualización: 02-Septiembre-2014 */ typedef struct _nodo{ int valor; struct _nodo *siguiente; }tipoNodo; void insertar(tipoNodo **lista,int x); int eliminar(tipoNodo **lista); void desplegar(tipoNodo *lista); int main(void){ tipoNodo *lista=NULL;//La lista está vacía insertar(&lista,10); insertar(&lista,20); insertar(&lista,30); insertar(&lista,40); insertar(&lista,50); insertar(&lista,60); desplegar(lista); /*printf("%d ",eliminar(&lista)); printf("%d ",eliminar(&lista)); printf("%d ",eliminar(&lista)); printf("%d ",eliminar(&lista)); printf("%d ",eliminar(&lista)); printf("%d ",eliminar(&lista)); */ system("pause"); return(0); } void insertar(tipoNodo **lista,int x){ //Crear memoria del nodo nuevo tipoNodo *nodo_nuevo; nodo_nuevo=(tipoNodo *)malloc(sizeof(tipoNodo)); nodo_nuevo->valor=x; if (*lista==NULL){//Lista vacía //1 *lista=nodo_nuevo; //2: op_1 (*lista)->siguiente=nodo_nuevo; //2: op_2 //nodo_nuevo->siguiente=nodo_nuevo; //nodo_nuevo->siguiente=NULL; //*lista=nodo_nuevo; } else{ //Programar cuando la lista no está vacía... /*nodo_nuevo->siguiente=*lista; *lista=nodo_nuevo; */ //1 nodo_nuevo->siguiente=(*lista)->siguiente; //2 (*lista)->siguiente=nodo_nuevo; } } int eliminar(tipoNodo **lista){ int x_aux; //1 tipoNodo *auxiliar; auxiliar=*lista; //Validar que la lista está vacía if(auxiliar==NULL){ printf("\nLa lista está vacía..."); x_aux=-1; } else{ if(auxiliar==auxiliar->siguiente){//Si es el único elemento x_aux=auxiliar->valor; free(auxiliar); *lista=NULL; } else{ auxiliar=auxiliar->siguiente; (*lista)->siguiente=auxiliar->siguiente; x_aux=auxiliar->valor; free(auxiliar); } } return(x_aux); } void desplegar(tipoNodo *lista){ tipoNodo *auxiliar=lista; printf("\nLista: "); do{ printf("%d ",lista->valor); lista=lista->siguiente; //printf("%d ",lista->valor); }while(lista!=auxiliar); }