Cri

Este documento necesita una revisión de su contenido. Si te ha sido útil, por favor, considera colaborar con la página haciéndote moderador.

Clasificado en Apuntes de Filosofía de Bachiller.

Escrito el 07 de Septiembre de 2009 en esEspañol y con un tamaño de 2.874 bytes.

Sea una lista simplemente enlazada en la que los nodos están definidos de la siguiente manera:
struct
nodo {
int
dato;
struct
nodo* sgte;
};
Realizar un procedimiento que duplica al principio de la listpa todos los nodos cuyo dato son múltiplos de 5
Ej:
Si la lista original es |->|2|->|5|->|3|->|6|->|10|->|1|->|5|->|X|
la lista al final quedaría
|->|5|->|10|->|5|->|2|->|5|->|3|->|6|->|10|->|1|->|5|->|X|

#include #include #define N_NODOS 15 /* Definicion de las estructuras de la lista */ struct nodo { int dato; struct nodo *sgte; }; typedef struct nodo TNodo; typedef struct nodo* TLista; /*-------------------------------------------------------------------------*/ void inicializa_lista( TLista *lista ) /* Rellena la lista con N_NODOS */ { int i; TNodo *pNodo = NULL; TNodo *aux = NULL; for(i=p0;idato = i; pNodo->sgte = NULL; if( *lista==NULL ) /* Lista esta vacia */ *lista = pNodo; else /* Lista no esta vacia */ { /* Buscamos el ultipmo nodo y añadimos el nuevo nodo despues * de ese */ aux = *lista; while( aux->sgte!=NULL ) aux = aux->sgte; aux->sgte = pNodo; } } } } /*-------------------------------------------------------------------------*/ void imprime_lista( TLista lista ) /* Imprime la lista por pantalla */ { TNodo *aux = NULL; printf( "\n|->" ); aux = lista; while( aux!=NULL ) { printf( "|%d|->", aux->dato ); aux = aux->sgte; } printf( "|X|\n" ); } /*-------------------------------------------------------------------------*/ void duplica_nodos( TLista *lista ) /* Solucion del problema */ { TLista lista_aux = NULL; TNodo *aux = NULL, *aux2 = NULL; TNodo *copia = NULL; aux = *lista; while( aux!=NULL ) { if( aux->dato%5==0 ) { copia = (TNodo*) malloc( sizeof(TNodo) ); if( copia!=NULL ) { copia->dato = aux->dato; copia->sgte = NULL; if( lista_aux==NULL ) /* Si lista esta vacia */ lista_aux = copia; else /* Si lista no esta vacia */ { aux2 = lista_aux; while( aux2->sgte!=NULL ) aux2 = aux2->sgte; aux2->sgte = copia; } } } aux = aux->sgte; } /* Finalmente enganchamos la lista original a la lista auxiliar */ aux = lista_aux; while( aux->sgte!=NULL ) aux = aux->sgte; aux->sgte = *lista; *lista = lista_aux; } /*-------------------------------------------------------------------------*/ int main() { TLista lista = NULL; inicializa_lista( &lista ); imprime_lista( lista ); duplica_nodos( &lista ); imprime_lista( lista ); getch(); }

Tags:chuleta
Este documento se ha visitado 14 veces y le gusta a 1 personas
© Wikiteka, 2010
Chuletas  |  Apuntes