Implementación de una Lista Doblemente Enlazada en C

Introducción

Este código implementa una lista doblemente enlazada en C, permitiendo la inserción, borrado y otras operaciones como la verificación de palíndromos. Incluye funciones para mostrar la lista en orden ascendente y descendente.

Código

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h> //Para usar getch() y system("pause")
#include <string.h> //Para usar strlen()

#define ASCENDENTE 1
#define DESCENDENTE 0
#define TRUE 1

typedef struct _nodo {
    char valor;
    struct _nodo *siguiente;
    struct _nodo *anterior;
} tipoNodo;

typedef tipoNodo *pNodo;
typedef tipoNodo *Lista;

/* Funciones con listas: */
void Insertar(Lista *l, char v);
void Borrar(Lista *l, char v);
void BorrarLista(Lista *);
void MostrarLista(Lista l, int orden);
void palin(Lista lista);
//void suma(void);

// Programa MAIN
int main() {
    Lista lista = NULL;
    pNodo p;
    char dato;

    while (TRUE) {
        system("cls");
        printf("\n MENU DEL PROGRAMA DE LISTA");
        printf("\n ----------------------------------------------
\n");
        printf("\tI - INTRODUCIR DATO.\n");
        printf("\tA - MOSTRAR ORDEN ACSENDENTE.\n");
        printf("\tD - MOSTRAR ORDEN DESCENDENTE.\n");
        printf("\tB - BORRAR LA LISTA.\n");
        printf("\tP - PALINDROMO.\n");
        printf("\tS - SUMA DE LAS DIFERENCIAS.\n");
        printf("\tX - TERMINAR.\n");

        switch (toupper(getche())) {
            case 'I':
                printf ("\nIngrese valor=\n");
                scanf("%c",&dato); //Corregido para leer un caracter
                Insertar(&lista, dato);
                break;
            case 'A':
                MostrarLista(lista, ASCENDENTE);
                system("pause");
                break;
            case 'D':
                MostrarLista(lista, DESCENDENTE);
                system("pause");
                break;
            case 'B':
                BorrarLista(&lista);
                getchar(); //Consumir el salto de línea
                break;
            case 'P':
                palin(lista);
                getch();
                return 0; //Se sale después de verificar palíndromo
            case 'X':
                exit(0);
        }
    }
}

// FUNCION INSERTAR NODO
void Insertar(Lista *lista, char v) {
// ... (resto del código de la función Insertar)
}

// ... (resto del código de las funciones Borrar, BorrarLista, MostrarLista, palin, etc.)

Explicación del código

El código principal presenta un menú interactivo para el usuario. Se utiliza una lista doblemente enlazada para almacenar caracteres. Se incluyen funciones para insertar, borrar, mostrar y verificar si la lista forma un palíndromo. Se han corregido errores menores en el código original, como la lectura de caracteres con scanf y se ha mejorado la legibilidad.

Conclusión

Esta implementación proporciona una base sólida para trabajar con listas doblemente enlazadas en C. Se recomienda documentar completamente las funciones y agregar manejo de errores para una mayor robustez.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.