Solución de Ejercicios de Estructura de Datos: Listas Enlazadas en C

Informática3,03 KB

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;
}

Descargar

PDF Word HTML