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.