Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Pre-requisitos
Los tipos de datos Las estructuras El uso de typedef Los punteros Las funciones usuario
I. Introduccin
El objetivo de este artculo es el de comprender el uso de las listas enlazadas simples. Las listas enlazadas pueden ser utilizadas cuando se necesitan hacer varias operaciones de insercin y eliminacin de elementos.
II. Definicin
Las listas enlazadas son estructuras de datos semejantes a los array salvo que el acceso a un elemento no se hace mediante un indice sino mediante un puntero. La asignacin de memoria es hecha durante la ejecucin. En una lista los elementos son contiguos en lo que concierne al enlazado.
En cambio, mientras que en un array los elementos estn contiguos en la memoria, en una lista los elementos estn dispersos. El enlace entre los elementos se hace mediante un puntero. En realidad, en la memoria la representacin es aleatoria en funcin del espacio asignado. El puntero siguiente del ltimo elemento debe apuntar hacia NULL (el fin de la lista). Para acceder a un elemento, la lista es recorrida comenzando por el inicio, el puntero siguiente permite el desplazamiento hacia el prximo elemento. El desplazamiento se hace en una sola direccin, del primer al ltimo elemento. Si deseas desplazarte en las dos direcciones (hacia delante y hacia atrs) debers utilizar las [ listas doblemente
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista 3/22
10/01/13
enlazadas]
Para tener el control de la lista es preferible guardar ciertos elementos: El primer elemento, el ltimo elemento, el nmero de elementos. Para ello ser utilizado otra estructura (no es obligatorio, pueden ser utilizadas variables)
t y p e d e fs t r u c tL i s t a I d e n t i f i c a r{ E l e m e n t o* i n i c i o ; E l e m e n t o* f i n ; i n tt a m a o ; } L i s t a ;
El puntero inicio contendr la direccin del primer elemento de la lista. El puntero fin contendr la direccin del ltimo elemento de la lista. La variable tamao contiene el nmero de elementos. Cualquiera que sea la posicin en la lista, los punteros inicio y fin apuntan siempre al primer y ltimo elemento. El campo tamao contendr el numero de elementos de la lista cualquiera que sea la operacin efectuada sobre la lista.
A. Inicializacin
Modelo de la funcin:
v o i di n i c i a l i z a c i o n( L i s t a* l i s t a ) ;
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista
4/22
10/01/13
Esta operacin debe ser hecha antes de cualquier otra operacin sobre la lista. Esta inicializa el puntero inicio y el puntero fin con el puntero NULL, y el tamao con el valor 0. La funcin
v o i di n i c i a l i z a c i o n( L i s t a* l i s t a ) { l i s t a > i n i c i o=N U L L ; l i s t a > f i n=N U L L ; t a m a o=0 ; }
Para aadir un elemento a la lista hay varios casos: 1. Insercin en una lista vaca 2. Insercin al inicio de la lista 3. Insercin al final de la lista 4. Insercin en otra parte de la lista.
Ejemplo de la funcin:
i n ti n s _ e n _ l i s t a _ v a c i a( L i s t a* l i s t a ,c h a r* d a t o ) ;
La funcin devuelve 1 en caso de error, si no devuelve 0. Etapas: asignacin de memoria para el nuevo elemento rellenar el campo de datos del nuevo elemento el puntero siguiente del nuevo elemento apuntar hacia NULL (ya que la insercin es hecha en una lista vaca se
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista 5/22
10/01/13
utiliza la direccin del puntero inicio que vale NULL) los punteros inicio y fin apuntaran hacia el nuevo elemento el tamao es actualizado
take a screenshot
cancel
La funcin
/ *i n s e r c i ne nu n al i s t av a c a* / i n ti n s _ e n _ l i s t a _ v a c i a( L i s t a*l i s t a ,c h a r* d a t o ) { E l e m e n t* n u e v o _ e l e m e n t o ; i f( ( n u e v o _ e l e m e n t o=( E l e m e n t* )m a l l o c( s i z e o f( E l e m e n t ) ) )= =N U L L ) r e t u r n1 ; i f( ( n u e v o_ e l e m e n t o > d a t o=( c h a r* )m a l l o c( 5 0*s i z e o f( c h a r ) ) ) = =N U L L ) r e t u r n1 ; s t r c p y( n u e v o _ e l e m e n t o > d a t o ,d a t o ) ; n u e v o _ e l e m e n t o > s i g u i e n t e=N U L L ; l i s t a > i n i c i o=n u e v o _ e l e m e n t o ; l i s t a > f i n=n u e v o _ e l e m e n t o ; l i s t a > t a m a o + + ; r e t u r n0 ; }
Ejemplo de la funcin:
i n ti n s _ i n i c i o _ l i s t a( L i s t a* l i s t a , c h a r* d a t o ) ;
La funcin devuelve -1 en caso de error, si no devuelve 0. Etapas: asignacin de memoria al nuevo elemento
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista 6/22
10/01/13
rellenar el campo de datos del nuevo elemento el puntero siguiente del nuevo elemento apunta hacia el primer elemento el puntero inicio apunta hacia el nuevo elemento el puntero fin no cambia el tamao es incrementado
La funcin
/ *i n s e r c i na li n i c i od el al i s t a* / i n ti n s _ i n i c i o _ l i s t a( L i s t a*l i s t a ,c h a r* d a t o ) { E l e m e n t* n u e v o _ e l e m e n t o ; i f( ( n u e v o _ e l e m e n t o=( E l e m e n t* )m a l l o c( s i z e o f( E l e m e n t ) ) )= =N U L L ) r e t u r n1 ; i f( ( n u e v o _ e l e m e n t o > d a t o=( c h a r* )m a l l o c( 5 0*s i z e o f( c h a r ) ) ) = =N U L L ) r e t u r n1 ; s t r c p y( n u e v o _ e l e m e n t o > d a t o ,d a t o ) ; n u e v o _ e l e m e n t o > s i g u i e n t e=l i s t a > i n i c i o l i s t a > i n i c i o=n u e v o _ e l e m e n t o ; l i s t a > t a m a o + + ; r e t u r n0 ; }
Ejemplo de la funcin:
i n ti n s _ f i n _ l i s t a( L i s t a* l i s t a ,E l e m e n t* a c t u a l ,c h a r* d a t o ) ;
10/01/13
Etapas: asignacin de memoria al nuevo elemento rellenar el campo de datos del nuevo elemento el puntero siguiente del ultimo elemento apunta hacia el nuevo elemento el puntero fin apunta hacia el nuevo elemento el puntero inicio no cambia el tamao es incrementado
La funcin
/ * i n s e r c i na lf i n a ld el al i s t a* / i n ti n s _ f i n _ l i s t a( L i s t a*l i s t a ,E l e m e n t*a c t u a l ,c h a r* d a t o ) { E l e m e n t* n u e v o _ e l e m e n t o ; i f( ( n u e v o _ e l e m e n t o=( E l e m e n t* )m a l l o c( s i z e o f( E l e m e n t ) ) )= =N U L L ) r e t u r n1 ; i f( ( n u e v o _ e l e m e n t o > d a t o=( c h a r* )m a l l o c( 5 0*s i z e o f( c h a r ) ) ) = =N U L L ) r e t u r n1 ; s t r c p y( n u e v o _ e l e m e n t o > d a t o ,d a t o ) ; a c t u a l > s i g u i e n t e=n u e v o _ e l e m e n t o ; n u e v o _ e l e m e n t o > s i g u i e n t e=N U L L ; l i s t a > f i n=n u e v o _ e l e m e n t o ; l i s t a > t a m a o + + ; r e t u r n0 ; }
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista
8/22
10/01/13
Ejemplo de la funcin:
i n ti n s _ l i s t a( L i s t a* l i s t a ,c h a r* d a t o , i n tp o s ) ;
La funcin devuelve -1 en caso de error, si no devuelve 0. La insercin se efectuar despus de haber pasado a la funcin una posicin como argumento. Si la posicin indicada no tiene que ser el ltimo elemento. En ese caso hay que utilizar la funcin de insercin al final de la lista. Etapas: asignacin de memoria al nuevo elemento rellenar el campo de datos del nuevo elemento Elegir una posicin en la lista (la insercin se har despus de haber elegido la posicin) el puntero siguiente del nuevo elemento apunta hacia la direccin a la que apunta el puntero siguiente del elemento actual. el puntero siguiente del elemento actual apunta al nuevo elemento los punteros inicio y fin no cambian el tamao se incrementa en una unidad
La funcin
/ *i n s e r c i ne nl ap o s i c i ns o l i c i t a d a* /
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista 9/22
10/01/13
i n ti n s _ l i s t a( L i s t a*l i s t a ,c h a r* d a t o ,i n tp o s ) { i f( l i s t a > t a m a o<2 ) r e t u r n1 ; i f( p o s<1| |p o s> =l i s t a > t a m a o ) r e t u r n1 ; E l e m e n t* a c t u a l ; E l e m e n t* n u e v o _ e l e m e n t o ; i n ti ; i f( ( n u e v o _ e l e m e n t o=( E l e m e n t* )m a l l o c( s i z e o f( E l e m e n t ) ) )= =N U L L ) r e t u r n1 ; i f( ( n u e v o _ e l e m e n t o > d a t o=( c h a r* )m a l l o c( 5 0*s i z e o f( c h a r ) ) ) = =N U L L ) r e t u r n1 ; a c t u a l=l i s t a > i n i c i o ; f o r( i=1 ;i<p o s ;+ + i ) a c t u a l=a c t u a l > s i g u i e n t e ; i f( a c t u a l > s i g u i e n t e= =N U L L ) r e t u r n1 ; s t r c p y( n u e v o _ e l e m e n t o > d a t o ,d a t o ) ; n u e v o _ e l e m e n t o > s i g u i e n t e=a c t u a l > s i g u i e n t e ; a c t u a l > s i g u i e n t e=n u e v o _ e l e m e n t o ; l i s t a > t a m a o + + ; r e t u r n0 ;
Apuntar el puntero siguiente del elemento actual hacia la direccin del puntero siguiente del elemento a eliminar liberar la memoria ocupada por el elemento eliminado actualizar el tamao de la lista
Para eliminar un elemento de la lista hay varios casos: 1. Eliminacin al inicio de la lista 2. Eliminacin en otra parte de la lista
Ejemplo de la funcin:
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista
10/22
i n ts u p _ i n i c i o( L i s t a* l i s t a ) ;
La funcin devuelve -1 en caso de error, si no devuelve 0. Etapas: el puntero sup_elem contendr la direccin del 1er elemento el puntero inicio apuntara hacia el 2do elemento el tamao de la lista disminuir un elemento
La funcin
/ *e l i m i n a c i na li n i c i od el al i s t a* / i n ts u p _ i n i c i o( L i s t a*l i s t a ) { i f( l i s t a > t a m a o= =0 ) r e t u r n1 ; E l e m e n t* s u p _ e l e m e n t o ; s u p _ e l e m e n t=l i s t a > i n i c i o ; l i s t a > i n i c i o=l i s t a > i n i c i o > s i g u i e n t e ; i f( l i s t a > t a m a o= =1 ) l i s t a > f i n=N U L L ; f r e e( s u p _ e l e m e n t o > d a t o ) ; f r e e( s u p _ e l e m e n t o ) ; l i s t a > t a m a o ; r e t u r n0 ; }
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista
11/22
10/01/13
Ejemplo de la funcin:
i n ts u p _ e n _ l i s t a( L i s t a* l i s t a ,i n tp o s ) ;
La funcin devuelve -1 en caso de error, si no devuelve 0. Etapas: el puntero sup_elem contendr la direccin hacia la que apunta el puntero siguiente del elemento actual el puntero siguiente del elemento actual apuntara hacia el elemento al que apunta el puntero siguiente del elemento que sigue al elemento actual en la lista.
Si el elemento actual es el penltimo elemento, el puntero fin debe ser actualizado. el tamao de la lista ser disminuido en un elemento
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista
12/22
10/01/13
La funcin
/ *e l i m i n a ru ne l e m e n t od e s p u sd el ap o s i c i ns o l i c i t a d a* / i n ts u p _ e n _ l i s t a( L i s t a*l i s t a ,i n tp o s ) { i f( l i s t a > t a m a o< =1| |p o s<1| |p o s> =l i s t a > t a m a o ) r e t u r n1 ; i n ti ; E l e m e n t* a c t u a l ; E l e m e n t* s u p _ e l e m e n t o ; a c t u a l=l i s t a > i n i c i o ; f o r( i=1 ;i<p o s ;+ + i ) a c t u a l=a c t u a l > s i g u i e n t e ; s u p _ e l e m e n t o=a c t u a l > s i g u i e n t e ; a c t u a l > s i g u i e n t e=a c t u a l > s i g u i e n t e > s i g u i e n t e ; i f ( a c t u a l > s i g u i e n t e= =N U L L ) l i s t a > f i n=a c t u a l ; f r e e( s u p _ e l e m e n t o > d a t o ) ; f r e e( s u p _ e l e m e n t o ) ; l i s t a > t a m a o ; r e t u r n0 ; }
D. Visualizacin de la lista
Para mostrar la lista entera hay que posicionarse al inicio de la lista (el puntero inicio lo permitir). Luego utilizando el puntero siguiente de cada elemento la lista es recorrida del 1ero al ultimo elemento. La condicin para detener es dada por el puntero siguiente del ultimo elemento que vale NULL. La funcin
/ *v i s u a l i z a c i nd el al i s t a* / v o i dv i s u a l i z a c i n( L i s t a*l i s t a ) { E l e m e n t* a c t u a l ; a c t u a l=l i s t a > i n i c i o ; w h i l e( a c t u a l! =N U L L ) { p r i n t f( " % p-% s \ n " ,a c t u a l ,a c t u a l > d a t o ) ;
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista
a c t u a l=a c t u a l > s i g u i e n t e ;
13/22
10/01/13
a c t u a l=a c t u a l > s i g u i e n t e ; } }
E. Destruccin de la lista
Para destruir la lista entera, he utilizado la eliminacin al inicio de la lista ya que el tamao es mayor a cero. La funcin
/ *d e s t r u i rl al i s t a* / v o i dd e s t r u i r( L i s t a*l i s t a ) { w h i l e( l i s t a > t a m a o>0 ) s u p _ i n i c i o( l i s t a ) ; }
V. Ejemplo completo
lista.h
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista
14/22
/ *S U P R E S I O N* / i n ts u p _ i n i c i o( L i s t a*l i s t a ) ; i n ts u p _ e n _ l i s t a( L i s t a*l i s t a ,i n tp o s ) ;
l i s t a_ f u n c t i o n . h
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * \ * l i s t a _ f u n c t i o n . h * \ * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d i n i c i a l i s a c i o n( L i s t a*l i s t a ) { l i s t a> i n i c i o=N U L L ; l i s t a> f i n=N U L L ; l i s t a> t a m a o=0 ; } / *i n s e r c i o ne nu n el i s t av a c i a* / i n ti n s _ e n _ l i s t a_ v a c i a( L i s t a*l i s t a ,c h a r* d a t o ) { E l e m e n t o* n u e v o _ e l e m e n t o ; i f( ( n u e v o _ e l e m e n t o=( E l e m e n t o* )m a l l o c( s i z e o f( E l e m e n t o ) ) )= =N U L L ) r e t u r n1 ; i f( ( n u e v o _ e l e m e n t o > d a t o=( c h a r* )m a l l o c( 5 0*s i z e o f( c h a r ) ) ) = =N U L L ) r e t u r n1 ; s t r c p y( n u e v o _ e l e m e n t o > d a t o ,d a t o ) ; n u e v o _ e l e m e n t o > s i g u i e n t e=N U L L ; l i s t a> i n i c i o=n u e v o _ e l e m e n t o ; l i s t a> f i n=n u e v o _ e l e m e n t o ; l i s t a> t a m a o + + ; r e t u r n0 ; } / *i n s e r c i na li n i c i od el al i s t a* / i n ti n s _ i n i c i o _ l i s t a( L i s t a*l i s t a ,c h a r* d a t o ) { E l e m e n t o* n u e v o _ e l e m e n t o ; i f( ( n u e v o _ e l e m e n t o=( E l e m e n t o* )m a l l o c( s i z e o f( E l e m e n t o ) ) )= =N U L L ) r e t u r n1 ; i f( ( n u e v o _ e l e m e n t o > d a t o=( c h a r* )m a l l o c( 5 0*s i z e o f( c h a r ) ) ) = =N U L L ) r e t u r n1 ; s t r c p y( n u e v o _ e l e m e n t o > d a t o ,d a t o ) ; n u e v o _ e l e m e n t o > s i g u i e n t e=l i s t a > i n i c i o ; l i s t a> i n i c i o=n u e v o _ e l e m e n t o ; l i s t a> t a m a o + + ; r e t u r n0 ; } / * i n s e r c i o na lf i n a ld el al i s t a* / i n ti n s _ f i n _ l i s t a( L i s t a*l i s t a ,e l e m e n t o*a c t u a l ,c h a r* d a t o ) { E l e m e n t o* n u e v o _ e l e m e n t o ; i f( ( n u e v o _ e l e m e n t o=( E l e m e n t o* )m a l l o c( s i z e o f( E l e m e n t o ) ) )= =N U L L ) r e t u r n1 ; i f( ( n u e v o _ e l e m e n t o > d a t o=( c h a r* )m a l l o c( 5 0*s i z e o f( c h a r ) ) ) = =N U L L )
10/01/13
= =N U L L ) r e t u r n1 ; s t r c p y( n u e v o _ e l e m e n t o > d a t o ,d a t o ) ; a c t u a l > s i g u i e n t e=n u e v o _ e l e m e n t o ; n u e v o _ e l e m e n t o > s i g u i e n t e=N U L L ; l i s t a> f i n=n u e v o _ e l e m e n t o ; l i s t a> t a m a o + + ; r e t u r n0 ; } / *i n s e r c i o ne nl ap o s i c i o ns o l i c i t a d a* / i n ti n s _l i s t a( L i s t a*l i s t a ,c h a r* d a t o ,i n tp o s ) { i f( l i s t a> t a m a o<2 ) r e t u r n1 ; i f( p o s<1| |p o s> =l i s t a> t a m a o ) r e t u r n1 ; E l e m e n t o* a c t u a l ; E l e m e n t o* n u e v o _ e l e m e n t o ; i n ti ; i f( ( n u e v o _ e l e m e n t o=( E l e m e n t o* )m a l l o c( s i z e o f( E l e m e n t o ) ) )= =N U L L ) r e t u r n1 ; i f( ( n u e v o _ e l e m e n t o > d a t o=( c h a r* )m a l l o c( 5 0*s i z e o f( c h a r ) ) ) = =N U L L ) r e t u r n1 ; a c t u a l=l i s t a> i n i c i o ; f o r( i=1 ;i<p o s ;+ + i ) a c t u a l=a c t u a l > s i g u i e n t e ; i f( a c t u a l > s i g u i e n t e= =N U L L ) r e t u r n1 ; s t r c p y( n u e v o _ e l e m e n t o > d a t o ,d a t o ) ; n u e v o _ e l e m e n t o > s i g u i e n t e=a c t u a l > s i g u i e n t e ; a c t u a l > s i g u i e n t e=n u e v o _ e l e m e n t o ; l i s t a> t a m a o + + ; r e t u r n0 ; } / *s u p r e s i na li n i c i od el al i s t a* / i n ts u p _ i n i c i o( L i s t a*l i s t a ) { i f( l i s t a> t a m a o= =0 ) r e t u r n1 ; E l e m e n t o* s u p _ e l e m e n t o ; s u p _ e l e m e n t o=l i s t a> i n i c i o ; l i s t a> i n i c i o=l i s t a> i n i c i o > s i g u i e n t e ; i f( l i s t a> t a m a o= =1 ) l i s t a> f i n=N U L L ; f r e e( s u p _ e l e m e n t o > d a t o ) ; f r e e( s u p _ e l e m e n t o ) ; l i s t a> t a m a o ; r e t u r n0 ; } / *s u p r i m i ru ne l e m e n t od e s p u sd el ap o s i c i ns o l i c i t a d a* / i n ts u p _ e n _ l i s t a( L i s t a*l i s t a ,i n tp o s ) { i f( l i s t a> t a m a o< =1| |p o s<1| |p o s> =l i s t a> t a m a o ) r e t u r n1 ; i n ti ; E l e m e n t o* a c t u a l ; E l e m e n t o* s u p _ e l e m e n t o ;
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista 16/22
10/01/13
a c t u a l=l i s t a> i n i c i o ; f o r( i=1 ;i<p o s ;+ + i ) a c t u a l=a c t u a l > s i g u i e n t e ; s u p _ e l e m e n t o=a c t u a l > s i g u i e n t e ; a c t u a l > s i g u i e n t e=a c t u a l > s i g u i e n t e > s i g u i e n t e ; i f ( a c t u a l > s i g u i e n t e= =N U L L ) l i s t a> f i n=a c t u a l ; f r e e( s u p _ e l e m e n t o > d a t o ) ; f r e e( s u p _ e l e m e n t o ) ; l i s t a> t a m a o ; r e t u r n0 ; } / *v i s u a l i z a c i nd el aL i s t a* / v o i dm u e s t r a( L i s t a*l i s t a ) { E l e m e n t o* a c t u a l ; a c t u a l=l i s t a> i n i c i o ; w h i l e( a c t u a l! =N U L L ) { p r i n t f( " % p-% s \ n " ,a c t u a l ,a c t u a l > d a t o ) ; a c t u a l=a c t u a l > s i g u i e n t e ; } } / *d e s t r u i rl aL i s t a* / v o i dd e s t r u i r( L i s t a*L i s t a ) { w h i l e( l i s t a> t a m a o>0 ) s u p _ i n i c i o( l i s t a ) ; } i n tm e n u( L i s t a* l i s t a , i n t* k ) { i n te l e c c i n ; p r i n t f ( " * * * * * * * * * *M E N U* * * * * * * * * * \ n " ) ; i f( l i s t a> t a m a o= =0 ) { p r i n t f( " 1 .A d i c i nd e l 1 e re l e m e n t o \ n " ) ; p r i n t f( " 2 .Q u i t a r \ n " ) ; } e l s ei f ( l i s t a> t a m a o= =1| |* k= =1 ) { p r i n t f( " 1 .A d i c i na li n i c i od el al i s t a \ n " ) ; p r i n t f( " 2 .A d i c i na lf i n a ld el al i s t a \ n " ) ; p r i n t f( " 4 .S u p r e s i na li n i c i od el al i s t a \ n " ) ; p r i n t f( " 6 .D e s t r u i rl al i s t a \ n " ) ; p r i n t f( " 7 .Q u i t a r \ n " ) ; } e l s e{ p r i n t f( " 1 .A d i c i na li n i c i od el al i s t a \ n " ) ; p r i n t f( " 2 .A d i c i na lf i n a ld el al i s t a \ n " ) ; p r i n t f( " 3 .A d i c i nd e s p u sd el ap o s i c i ni n d i c a d a \ n " ) ; p r i n t f( " 4 .S u p r e s i na li n i c i od el al i s t a \ n " ) ; p r i n t f( " 5 .S u p r e s i nd e s p u sd el ap o s i c i ni n d i c a d a \ n " ) ; p r i n t f( " 6 .D e s t r u i rl al i s t a \ n " ) ; p r i n t f( " 7 .Q u i t a r \ n " ) ; } p r i n t f( " \ n \ n E l e g i r :" ) ; s c a n f( " % d " ,& e l e c c i n ) ; g e t c h a r ( ) ; i f ( l i s t a > t a m a o= =0& &e l e c c i n= =2 ) e l e c c i n=7 ; r e t u r ne l e c c i n ; } / *-F I Nl i s t a _ f u n c t i o n . h-* /
l i s t a . c
/ * * * * * * * * * * * * * * * * * * * * * * \
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista
l i s t a . c
17/22
10/01/13
* l i s t a . c * \ * * * * * * * * * * * * * * * * * * * * * * / # i n c l u d e< s t d i o . h > # i n c l u d e< s t d l i b . h > # i n c l u d e< s t r i n g . h > # i n c l u d e" l i s t a . h " # i n c l u d e" l i s t a_ f u n c t i o n . h " i n tm a i n( v o i d ) { c h a re l e c c i n ; c h a r* n o m ; L i s t a* l i s t a ; E l e m e n t o* a c t u a l ; i f( ( l i s t a=( L i s t a* )m a l l o c( s i z e o f( L i s t a ) ) )= =N U L L ) r e t u r n1 ; i f( ( n o m=( c h a r* )m a l l o c( 5 0 ) )= =N U L L ) r e t u r n1 ; a c t u a l=N U L L ; e l e c c i n=' o ' ; i n i c i a l i s a c i o n( l i s t a ) ; i n tp o s ,k ; w h i l e( e l e c c i n ! =7 ) { e l e c c i n=m e n u( l i s t a ,& k ) ; s w i t c h( e l e c c i n ) { c a s e1 : p r i n t f( " I n g r e s eu ne l e m e n t o:" ) ; s c a n f( " % s " ,n o m ) ; g e t c h a r( ) ; i f( l i s t a > t a m a o= =0 ) i n s _ e n _ l i s t a _ v a c i a( l i s t a ,n o m ) ; e l s e i n s _ i n i c i o _ l i s t a( l i s t a ,n o m ) ; p r i n t f( " % de l e m e n t o s : i n i = % s , f i n = % s \ n " ,l i s t a > t a m a o , l i s t a > i n i c i o > d a t o ,l i s t a > f i n > d a t o ) ; m u e s t r a( l i s t a ) ; b r e a k ; c a s e2 : p r i n t f( " I n g r e s eu ne l e m e n t o :" ) ; s c a n f( " % s " ,n o m ) ; g e t c h a r( ) ; i n s _ f i n _ l i s t a( l i s t a ,l i s t a > f i n ,n o m ) ; p r i n t f( " % de l e m e n t o s : i n i = % s , f i n = % s \ n " ,l i s t a > t a m a o , l i s t a > i n i c i o > d a t o ,l i s t a > f i n > d a t o ) ; m u e s t r a( l i s t a ) ; b r e a k ; c a s e3 : p r i n t f( " I n g r e s eu ne l e m e n t o :" ) ; s c a n f( " % s " ,n o m ) ; g e t c h a r( ) ; d o { p r i n t f( " I n g r e s el ap o s i c i o n :" ) ; s c a n f( " % d " ,& p o s ) ; } w h i l e( p o s<1| |p o s>l i s t a > t a m a o ) ; g e t c h a r( ) ; i f( l i s t a > t a m a o= =1| |p o s= =l i s t a > t a m a o ) { k=1 ; p r i n t f ( " \ n " ) ; p r i n t f ( " / ! \ \ F r a c a s ol ai n s e r c i o n . U t i l i c ee lm e n u{ 1 | 2 }/ ! \ \ \ n " ) ; p r i n t f ( " \ n " ) ; b r e a k ; }
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista 18/22
10/01/13
i n s _ l i s t a( l i s t a ,n o m ,p o s ) ; p r i n t f( " % de l e m e n t o s : i n i = % s , f i n = % s \ n " ,l i s t a > t a m a o , l i s t a > i n i c i o > d a t o ,l i s t a > f i n > d a t o ) ; m u e s t r a( l i s t a ) ; b r e a k ; c a s e4 : s u p _ i n i c i o( l i s t a ) ; i f( l i s t a > t a m a o! =0 ) p r i n t f( " % de l e m e n t o s : i n i = % s , f i n = % s \ n " ,l i s t a > t a m a o , l i s t a > i n i c i o > d a t o ,l i s t a > f i n > d a t o ) ; e l s e p r i n t f( " l i s t av a c i a \ n " ) ; m u e s t r a( l i s t a ) ; b r e a k ; c a s e5 : d o { p r i n t f( " I n g r e s el ap o s i c i o n:" ) ; s c a n f( " % d " ,& p o s ) ; } w h i l e( p o s<1| |p o s>l i s t a > t a m a o ) ; g e t c h a r( ) ; s u p _ e n _ l i s t a( l i s t a ,p o s ) ; i f( l i s t a > t a m a o! =0 ) p r i n t f( " % de l e m e n t o s : i n i = % s , f i n = % s \ n " ,l i s t a > t a m a o , l i s t a > i n i c i o > d a t o ,l i s t a > f i n > d a t o ) ; e l s e p r i n t f( " l i s t av a c i a \ n " ) ; m u e s t r a( l i s t a ) ; b r e a k ; c a s e6 : d e s t r u i r( l i s t a ) ; p r i n t f( " l al i s t ah as i d od e s t r u i d a :% de l e m e n t o s \ n " ,l i s t a > t a m a o ) ; b r e a k ; } } r e t u r n0 ; }
Vase tambin
Listas enlazadas en c Lenguaje C : Consejos Listas enlazadas simples Las pilas en lenguaje C Trucos - Lenguaje C La lista enlazada simple Foro - Comentarios sobre los trucos Las listas circulares (Ring Buffer) Trucos - Lenguaje C
es.kioskea.net/faq/2842-la-lista-enlazada-simple#2-insercion-al-inicio-de-la-lista 19/22