lista en c

Páginas: 5 (1131 palabras) Publicado: 31 de mayo de 2013
Ejercicio 1: TAD Lista de enteros: sólo las primeras 5 operaciones. Opcional: completar el resto de operaciones.
Las 5 operaciones:
1.Lista_T crearLista();
2. int InsertarPrimero(Lista_T *l, int x );
3. int InsertarUltimo(Lista_T *l, int x );
4. int RecorrerLista(Lista_T *l );
5. int EstaVacia(Lista_T l);

1.lista_t crearL(); //en lista.h

lista_t crearL() //en lista.c
{
lista_tmilista; //declaro mi lista que es del tipo lista_t
milista.elemento = 0; //asignamos 0 elementos, es una lista vacia.
milista.L = NULL; //milista que apunta a L es NULL
return (milista); //retornamos milista que es del tipo lista_t
}

2. int insertarP (lista_t *a, int x); //en lista.h

int insertarP (lista_t *a, int x) //en lista.c, los datos se pasan por referencia.
{struct nodo *nuevo, *aux;

nuevo = (struct nodo*)malloc(sizeof(struct nodo)); //aloco memoria para nuevo que es del tipo nodo.
if (nuevo == NULL) //evaluo condición, si nuevo es igual a NULL (no hay espacio) retorno -1.
{
printf ("ERROR DE MEMORIA");
return -1;
} //superado el if, asigno los valores del nodo nuevo, recibe como dato a x.
nuevo->dato = x;nuevo->sig = NULL;
nuevo->ant = NULL;
if (estavacia(*a) == 1) //verifico si la lista esta vacia, si esta vacia a->L es nuevo.
{
a->L = nuevo;
a->elemento++;
}else{ //si la lista no esta vacia
aux = a->L; //utilizo aux para no perder el enlace
nuevo->sig = aux; //nuevo->sig apunta a aux
aux->ant = nuevo; //aux->anterior apunta anuevo
a->L = nuevo; //el puntero de lista tiene que apuntar al nodo nuevo
a->elemento++;
}
return 1;
}

3. int insertarP (lista_t *a, int x); //en lista.h

int insertarP (lista_t *a, int x) //en lista.c, los datos se pasan por referencia.
{
struct nodo *nuevo, *aux;

nuevo = (struct nodo*)malloc(sizeof(struct nodo)); //aloco memoria para nuevo que esdel tipo nodo.
if (nuevo == NULL) //evaluo condición, si nuevo es igual a NULL (no hay espacio) retorno -1.
{
printf ("ERROR DE MEMORIA");
return -1;
}//superado el if, asigno los valores del nodo nuevo, recibe como dato a x.
nuevo->dato = x;
nuevo->sig = NULL;
nuevo->ant = NULL;
if (estavacia(*a) == 1) //verifico si la lista esta vacia, siesta vacia a->L es nuevo.
{
a->L = nuevo;
a->elemento++;
}else{ //si la lista no esta vacia
aux = a->L; //utilizo aux para no perder el enlace
while (aux->sig != NULL) //evaluo si aux->sig, si no lo es, me sigo moviendo por los nodos de la lista hasta que sea NULL, entonces estoy en el ultimo nodo.
{
aux = aux->sig;
} //alsalir del while, estoy en el ultimo nodo.
aux->sig = nuevo; //aux->sig, apunta a nuevo.
nuevo->ant = aux; //nuevo->ant apunta a aux.
a->elemento++;
}
return 1;
}

4. int recorrer (lista_t a); //en lista.h

int recorrer (lista_t a) //recibe el dato por valor, no se modifica, conceptualmente es correcto esto.
{
struct nodo *aux; //creo puntero nodoauxiliar
aux = a.L;
if (estavacia(a) == 1) //evaluo la condición si esta vacia.
{
printf("la lista esta vacia, no hay elementos\n"); //si esta vacia, imprimo mensje correspondiente
}else{
while (aux->sig != NULL) //si no esta vacia, evaluo la condición para moverme por los nodos hasta el ultimo.
{
printf ("%d\n", aux->dato); //imprimo eldato del nodo actual
aux = aux->sig; //me muevo con el puntero por los nodos
}
printf ("%d\n", aux->dato); //salgo del while por que aux->sig es NULL, con este printf imprimo el dato del ultimo nodo.
}
return 1;
}

5. int estavacia (lista_t a) //en lista.h

int estavacia (lista_t a) //recibe el dato por valor, no se modifica, conceptualmente es...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Listas en c#
  • Listas en c
  • Listas c++
  • Listas en C++
  • Listas C++
  • Listas ligadas en c (dev c++)
  • Definición de un programa de listas en c
  • Lista Enlazada En C

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS