viernes, 10 de agosto de 2012

Lista doblemente ligada c++


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <todas.h>

#define ASCENDENTE 1
#define DESCENDENTE 0
void datos (void)
    {
    system("color 6");
    int a=15,b=8;
    gotoxy (a,b);
    printf ("Edith Juarez Juarez \n\n");
    int c=20,d=5;
    gotoxy (c,d);
    printf ("Grupo 351\n\n");
    for(int x=3;x<=40;x++){
    gotoxy(x,3);
    printf("*");
  }
    for(int x=3;x<=40;x++){
    gotoxy(x,10);
    printf("*");
  }
   getch();
  }

typedef struct _Nodo{
int Valor;
char Letras[3];
struct _Nodo *Siguiente;
struct _Nodo *Anterior;
}Nodo;

int TotReg=0;
Nodo *Lista = NULL;

int Inicio(void);
void Agregar(void);
void Listar(int);
void Borrar(void);
void Quitar(void);

main()
{
  datos();
  int op=0;
  while(1)
  {
  system("CLS");
  printf("1.- Agregar\n");
  printf("2.- Ascendente\n");
  printf("3.- Descendente\n");
  printf("4.- Borrar \n");
  printf("5.- Quitar 3 \n");
  printf("6.- Salir\n");
  printf("\nEliga la opcion: ");
  fflush(stdin);
  scanf("%i",&op);
  switch(op)
  {
  case 1:
  free(Lista);
  if(Inicio() == 1)
  Agregar();
  else
  {
  printf("\nNo se pudo reservar memoria\n");
  getch();
  }
  break;
  case 2:
  Listar(0);
  break;
  case 3:
  Listar(1);
  break;
  case 4:
  Borrar();
  break;
  case 5:
  Quitar();
  break;
  case 6:
  free(Lista);
  exit(1);
  break;
  default:
  printf("\n<Opcion no valida>\n\n");
  fflush(stdin);
  getch();
  break;
  }
  }
  }
  int Inicio(void)
  {
  Lista = (Nodo *)malloc(sizeof(Nodo));
  if(Lista == NULL)
  return 0;
  else
  {
  Lista -> Siguiente = NULL;
  Lista -> Anterior = NULL;
  return 1;
  }
  }
void Agregar(void)
{
  int j,i,k,m;
  Nodo *New=NULL;
  Nodo *Tmp=Lista;
  system("CLS");
  if (Tmp!=NULL)
  {
  printf("Cuantos numeros deseas agregar: ");
  fflush(stdin);
  scanf("%d",&j);
  for(i=0;i<j;i++)
  {
  New = (Nodo *)malloc(sizeof(Nodo));
  printf("\nNumero: ");
  fflush(stdin);
  scanf("%i",&New->Valor);
  for(k=0;k<2;k++)
  {
  printf("Letra [%i]: ",k+1);
  fflush(stdin);
  scanf("%c",&New->Letras[k]);
  }
  New->Siguiente=NULL;
  while(Tmp->Siguiente!=NULL) Tmp = Tmp->Siguiente;
  New->Anterior = Tmp;
  Tmp->Siguiente = New;
  TotReg++;
  }
  }
  else
  {
  printf("\nNo se pudo agregar elemento.\n");
  fflush(stdin);
  getch();
  }
  }
  void Listar(int Orden)
  {
  int i=0,j=0;
  Nodo *Tmp=Lista;
  system("CLS");
  if(Tmp!=NULL)
  {
  if(TotReg > 0)
  {
  if(Orden==0)
  {
  while(Tmp->Siguiente != NULL)
  {
  Tmp=Tmp->Siguiente;
  printf("\n\nRegistro [%i]\n",j+1);
  printf("Numero: %i\n",Tmp->Valor);
  printf("Letras: ");
  for(i=0;i<5;i++)
  {
  printf(" %c",Tmp->Letras[i]);
  }
  j++;
  }
  }
  else
  {
  while(Tmp->Siguiente!=NULL) Tmp=Tmp->Siguiente;
  do{
  printf("\n\nRegistro [%i]\n",j+1);
  printf("Numero: %i\n",Tmp->Valor);
  printf("Letras: ");
  for(i=0;i<5;i++)
  {
  printf(" %c",Tmp->Letras[i]);
  }
  j++;
  Tmp = Tmp->Anterior;
  }while(Tmp->Anterior!=NULL);
  }
  }
  else
  {
  printf("\nLista Vacia.");
  }
  }
  else
  {
  printf("No se pudo Listar\n");
  }
  fflush(stdin);
  getch();
  }
  void Borrar(void)
  {
  int Num=0,i=0;
  Nodo *Tmp=Lista;
  system("CLS");
  if(Tmp!=NULL)
  {
  printf("Establezca el numero de elementos a Eliminar: ");
  fflush(stdin);
  scanf("%i",&Num);
  for(i=0;i<Num&&Tmp->Siguiente!=NULL;i++)
  {
  Tmp=Tmp->Siguiente;
  TotReg--;
  }
  Lista=Tmp;
  printf("\nDatos Eliminados.");
  }
  else
  printf("\nLista vacia.");
  fflush(stdin);
  getch();
  }
  void Quitar(void)
  {
  int i = 0;
  Nodo *Tmp = Lista;
  system("CLS");
  if(Tmp->Siguiente != NULL)
  {
  while(Tmp->Siguiente!=NULL)
  {
  Tmp=Tmp->Siguiente;
  for(i=0;i<5;i++)
  {
  if(i>1) Tmp->Letras[i]=' ';
  }
  }
  printf("\nLetras quitadas.");
  }
  else
  {
  printf("\nLista vacia.");
  }
  fflush(stdin);
  getch();
  }

No hay comentarios:

Publicar un comentario