• Lunes 29 de Abril de 2024, 07:24

Autor Tema:  Menu en una lista doblemente enlazada C++  (Leído 18153 veces)

anakin777666

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Menu en una lista doblemente enlazada C++
« en: Domingo 3 de Octubre de 2010, 01:52 »
0
Buenas, necesito ayuda para crear un menu principal en una lista doblemente enlazada en c++ asi como sus submenues

jaajmonterrey

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Menu en una lista doblemente enlazada C++
« Respuesta #1 en: Domingo 3 de Octubre de 2010, 06:47 »
0
Mira este este código que es para insertar y eliminar elementos de una listas doblemente enlazada que hase como una semana acavo de realizar espero que te sirva y que lo comprendas que eso es lo mejor xD.

*Estructura De Datos*/
/*Actividad 4 Listas Doblemente Encadenadas*/

/*Jaime Arturo Acosta Jacinto*/
#include <stdio.h>
#include <stdlib.h>

/*Estructura que tiene el contenido*/

typedef struct DEncadenada {
   char elemento;
   struct DEncadenada *next;
   struct DEncadenada *back;
}grupo;

typedef grupo *pNodo;
typedef grupo *Lista;

/* Funciones con listas: */
void insertar(Lista *, char);
void eliminar(Lista *, char);
void mostrarLista(Lista);

/*Funciones utilizadas*/
void menu();
char introducirDato();

/*Funcion main*/
int main()
{
   Lista lista = NULL;
   char a,b,c;

   do
   {
       menu();
       a = introducirDato();

       switch(a)
       {
            case '1':
                system("CLS");
                printf("_____________________________________n");
                printf("         "Insertar Elemento"nn");
                printf("Introducir elemento: ");
                scanf("%c",&b);

                insertar(&lista,b);
                mostrarLista(lista);
                system("PAUSE");
                system("CLS");
                break;

            case '2':
                system("CLS");

                if(lista!=NULL)
                {
                   printf("_____________________________________n");
                   printf("         "Eliminar Elemento"nn");
                   mostrarLista(lista);
                   printf("n");
                   printf("Eliminar elemento: ");
                   scanf("%c",&c);

                   eliminar(&lista,c);
                   printf("n");

                }

                mostrarLista(lista);

                system("PAUSE");
                system("CLS");
                break;

            case '3':
                system("CLS");
                mostrarLista(lista);
                system("PAUSE");
                system("CLS");
                break;

            case '4':
                system("CLS");
                printf("        "Fin del programa"n");
                printf("_____________________________________n");

                a='';

                break;
       }
   }while(a!='');

   return 0;

}

/*Función de Menu de opciones*/

void menu()
{
    printf("   "Listas Doblemente Encadenadas"  n");
    printf("_____________________________________n");
    printf("Insertar Elemento.................[1]n");
    printf("Eliminar Elemento.................[2]n");
    printf("Mostrar Lista.....................[3]n");
    printf("Salir.............................[4]n");
    printf("_____________________________________n");
}

/*Introducir el numero de inicio*/

char introducirDato()
{
   char ch;

   do{

      printf("nAccion a realizar: ");
      fflush(stdin);
      ch=getche();
      if(!(ch>='1'&& ch<='4'))
      {
          printf("n"Inserte un digito correcto"");
      }
      printf("n");

   }while(!(ch>='1'&& ch<='4'));


   return ch;
}


/*Funcion para insertar elementos en la lista*/

void insertar(Lista *lista, char v)
{
   pNodo nuevo, actual;

   nuevo = (pNodo)malloc(sizeof(grupo));
   nuevo->elemento = v;
   actual = *lista;

   if(actual)
   {
        while(actual->back)
        {
            actual = actual->back;
        }
   }
   if(!actual || actual->elemento > v) {
      nuevo->next = actual;
      nuevo->back = NULL;

      if(actual)
      {
            actual->back = nuevo;
      }

      if(!*lista)
      {
            *lista = nuevo;
      }
   }
   else {
      while(actual->next &&actual->next->elemento <= v)
      {
            actual = actual->next;
      }

      nuevo->next = actual->next;
      actual->next = nuevo;
      nuevo->back = actual;

      if(nuevo->next)
      {
          nuevo->next->back = nuevo;
      }
   }
}

/*Funcion para eliminar elemento en la lista*/

void eliminar(Lista *lista, char v)
{
   pNodo nodo;

   nodo = *lista;

   while(nodo && nodo->elemento < v)
   {
       nodo = nodo->next;
   }

   while(nodo && nodo->elemento > v)
   {
       nodo = nodo->back;
   }

   if(!nodo || nodo->elemento != v)
   {
       return;
   }

   if(nodo == *lista)
   {
        if(nodo->back)
        {
            *lista = nodo->back;
        }
        else
        {
            *lista = nodo->next;
        }

   }

   if(nodo->back)
   {
      nodo->back->next = nodo->next;
   }

   if(nodo->next)
   {
      nodo->next->back = nodo->back;
   }

   free(nodo);
}

/*Funcion para mostrar la lista*/

void mostrarLista(Lista lista)
{
   pNodo nodo = lista;

   if(!lista)
   {
        printf(""La Lista esta Vacia"");
   }
   else{
      while(nodo->back)
      {

            nodo = nodo->back;
      }
      printf("n     "Elementos de la Lista"      n");
      printf("_____________________________________n");
      while(nodo)
      {
         printf("-> %c", nodo->elemento);
         nodo = nodo->next;
      }

   }

   printf("n");
}