Solución de Ejercicios de Estructura de Datos: Listas Enlazadas en C
Solución de Ejercicios de Estructura de Datos
Prueba de estructura de datos
1. Insertar en orden en una lista enlazada
Construya un procedimiento que trabaje sobre una lista enlazada de números enteros. Este procedimiento debe recibir un número e insertarlo en la posición que le corresponda.
Procedimiento insertarEnOrdenLS
void insertarEnOrdenLS(ListaSimple LS, int x)
{
int pivote;
char encontro;
if (ListaSimpleVacia(LS))
insertar_InicioLS(LS, x);
else
{
pivote = buscar_pivote(LS, x, &encontro);
if (encontro == 'S')
insertarAntesLS(LS, x, pivote);
else
insertarFinLS(LS, x);
}
}
int buscar_pivote(ListaSimple LS, int x, char &encontro)
{
Elemento *aux;
aux = LS->inicio;
while (x > aux->dato && aux != NULL)
aux = aux->siguiente;
if (aux == NULL)
{
encontro = 'N';
return (0);
}
return aux->dato;
}
2. Impresión de notas deficientes
Sea una lista apuntada por primero, en donde se guardan las notas de un curso de n alumnos (un alumno por nodo), ordenadas de mayor a menor. Confeccione un procedimiento que imprima las notas deficientes, es decir, nota < 4.0.
Procedimiento nota
void nota()
{
indice = primero;
float N = 4.0f;
if ((primero->nota) < N)
{
printf("Alumno: %s", primero->alumno);
printf("La nota es: %f", primero->nota);
}
}
3. Conversión de lista simple a lista circular
Cree un procedimiento que modifique una lista simple para convertirla en circular.
Procedimiento modificar
void modificar(lista *l)
{
lista aux = (*l);
while (aux->siguiente != NULL)
{
aux = aux->siguiente;
}
aux->siguiente = (*l);
}
4. Verificación de palíndromo en lista doblemente enlazada
En una lista doblemente enlazada se encuentran almacenados los caracteres de una palabra (un carácter por nodo). Confeccione una función que retorne 1 si la palabra es palíndroma y 0 si no lo es.
Función revisa_palindroma
int revisa_palindroma(char Palabra[100])
{
int largo, i, es_palindroma = 1;
ListaDoble LD1, LD2;
Elemento *aux1, *aux2;
LD1 = CreaListaDoble();
LD2 = CreaListaDoble();
largo = strlen(Palabra);
for (i = 0; i < largo; i++)
{
InsertarInicioLD(LD1, Palabra[i]);
InsertarFinLD(LD2, Palabra[i]);
}
aux1 = LD1->inicio;
aux2 = LD2->inicio;
for (i = 0; i < largo; i++)
{
if (aux1->dato != aux2->dato)
es_palindroma = 0;
aux1 = aux1->siguiente;
aux2 = aux2->siguiente;
}
return es_palindroma;
}