RomeroFuentes S18

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 6

ESTRUCTURAS DE DATOS Y ALGORITMOS

ALUMNO: MAURICIO ROMERO FUENTES

PRACTICA # 3

OBJETIVO: • Conocer y Analizar las operaciones insertar, eliminar y recorrer de una lista
• Analizar los algoritmos en el manejo de datos de las listas abiertas

En los incisos identificar los pasos del cada algoritmo de la presentación contra el código, ejecutar paso a
paso e indicando los valores de las variables.

Ejercicio # 1 Explicar el código para insertar un elemento en una lista vacía


1.- Hacer que nuestro NODO->Siguiente apunte a NULL
2.- Posterior a ellos Lista apunta a nuestro NODO, en donde será el primer elemento a insertar de la lista
vacía.
Ejercicio # 2 Explicar el código para insertar un elemento en la primera posición de una lista
La lista es no vacía por lo tanto tenemos al nodo que se quiere insertar en la primera
posición guardado en un apuntador, dicho nodo apuntara hacia el siguiente nodo y lista
ahora apuntara al nodo que se insertó.
Ejercicio # 3 Explicar el código para insertar un elemento en la última posición de una lista
Primeramente, se tiene una lista NO vacía y un apuntador que indicará el último elemento, la
manera de posicionarlo es empezar por el primero e ir avanzando hasta que el nodo tenga como
siguiente el valor NULL, es decir que nodo->siguiente sea NULL y hacer que último->siguiente sea
nodo.
Ejercicio # 4 Explicar el código para insertar un elemento en cualquier parte de una lista
El nodo que se va a insertar dentro de la lista debe apuntar al nodo ->siguiente en donde se desea
insertar y anterior->siguiente debe direccionarse hacia el nodo.

Ejercicio # 5 Explicar el código para recorrer una lista


Primeramente, la lectura de los datos es realizada mediante un ciclo for el cual es insertado dentro de la
variable valor. Posteriormente se pasan los parámetros a la función insertar el cual recibe como parámetros
un apuntador listo y el valor asignado a la variable dentro del for anterior.
Ya dentro de la función insertar se asigna el valor a insertar dentro del nodo con su respectiva asignación en
memoria (malloc). Si la lista está vacía se asigna al inicio, si no lo está se asigna al nodo siguiente.

for(i=1;i<=5;i++)

printf("Dame el valor %i: ",i);

scanf("%i",&valor);

Insertar(&lista,valor); //LLamado a a función lista, con la direccion de memoria del apuntador lista

void Insertar(Lista*lista,int v)

pNodo nuevo,anterior;

nuevo = (pNodo)malloc(sizeof(tipoNodo)); //A nuevo se le asigna el espacio en la memoria del tipoNodo


nuevo->valor=v; //Nuevo salor se le asigna el valor del teclado

if(ListaVacia(*lista)||(*lista)->valor>v){

nuevo->siguiente=*lista; //Nuevo siguiente apunta a NULL

*lista=nuevo; //Al contenido de lista se le asigna el nuevo valor


}

else

anterior=*lista;

while(anterior->siguiente&&anterior->siguiente->valor <=v)

anterior = anterior->siguiente;

nuevo->siguiente=anterior->siguiente;

anterior->siguiente=nuevo;

Ejercicio # 6 Explicar el código para eliminar cualquier elemento de la lista


Se requiere de un apuntador anterior al nodo a eliminar y otro apuntador auxiliar que se encargará
de guardar el valor a eliminar, por ende, el nodo anterior debe apuntar al nodo->siguiente y se
procede a eliminar el nodo seleccionado.
En el ejemplo se realiza la impresión solicitando el valor a eliminar, posteriormente este valor a
eliminar se guarda en la variable valor y se pasa como parámetro al método borrar. Este método
borrar recibe los parámetros de un apuntador lista y el valor a eliminar. Dentro de este método
borrar se le asigna a nodo el apuntador lista. Posteriormente se indica que el nodo anterior es
NULL. Finalmente se libera el nodo.
MostrarLista(lista);
printf("Dame el que quieres eliminar: ");
scanf("%i",&valor);

Borrar(&lista, valor);
FIN DE SEGMENTO DENTRO DEL MAIN
void Borrar(Lista *lista, int v)
{
pNodo anterior, nodo;

nodo = *lista;
anterior = NULL;
while(nodo && nodo->valor < v) {
anterior = nodo;
nodo = nodo->siguiente;
}
if(!nodo || nodo->valor != v) return;
else {
if(!anterior)
*lista = nodo->siguiente;
else
anterior->siguiente = nodo->siguiente;
free(nodo);
}
}
Ejercicio # 7 Modificar el programa para que el nodo almacene dos datos un entero y un flotante, y que
muestre un menú donde se pregunte si se quiere insertar, eliminar o mostrar, y que regrese al menú

También podría gustarte