domingo, 19 de agosto de 2012

Árbol


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


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




struct nodoarbol{
       struct nodoarbol *izqnodo;
       int info;
       char letra; //let
       struct nodoarbol *dernodo;
       };
       typedef struct nodoarbol NODO;
       typedef NODO *ARBOL;
       void insertanodonuevo(ARBOL *, int,char);
       void inorden (ARBOL);
       void preorden (ARBOL);
       void postorden (ARBOL);
       void treefree (ARBOL);
     
main()
{
  datos();
  int i,m,num;
  char newnod, chain ;
  ARBOL raiz=NULL;
  printf("\nDigite cuandos nodos quiere insertar\n");
  scanf("%d",&m);
  for (i=0;i<m;i++)
  {
      fflush(stdin);
      printf("Introduzca numero y numero : ");
      scanf("%d  %c",&num,&chain);
      fflush(stdin);
     
      insertanodonuevo(&raiz,num,chain);
      }
  printf("\nPreorden \n");
  preorden(raiz);
  printf("\ninorden \n");
  inorden(raiz);
  printf("\nPostorden \n");
  postorden(raiz);
  getch();
  treefree(raiz);
  raiz=NULL;
  return 0;
}




void insertanodonuevo(ARBOL *rarbol, int nuevo,char l)
{
     if (*rarbol==NULL)
     {
     *rarbol=(NODO *)malloc(sizeof(NODO));
     if(*rarbol!=NULL)
     {
     (*rarbol)->info=nuevo;
     (*rarbol)->letra=l;
     (*rarbol)->izqnodo=NULL;
     (*rarbol)->dernodo=NULL;
     }
     else {printf("memoria no disponible\n");}
     }
     else
     if(nuevo<(*rarbol)->info)
     insertanodonuevo(&((*rarbol)->izqnodo),nuevo,l);
     else
     if(nuevo>(*rarbol)->info)
     insertanodonuevo(&((*rarbol)->dernodo),nuevo,l);
     }
   
void preorden (ARBOL rarbol)
{
     if(rarbol!=NULL)
     {
                   
     printf("%d",rarbol->info);
     printf("%c",rarbol->letra);
     preorden(rarbol->izqnodo);
     preorden(rarbol->dernodo);
     }
}


void inorden(ARBOL rarbol)
{
     if(rarbol!=NULL)
     {
     inorden(rarbol->izqnodo);
     printf("%d", rarbol->info);
     printf("%c",rarbol->letra);
     inorden(rarbol->dernodo);
     }
}


void postorden(ARBOL rarbol)
{
     if(rarbol!=NULL)
     {
                   
     postorden(rarbol->izqnodo);
     postorden(rarbol->dernodo);
     printf("%d", rarbol->info);
     printf("%c",rarbol->letra);
     }
}


void treefree(ARBOL rarbol)
{
     if(rarbol!=NULL)
{
     treefree (rarbol->izqnodo);
     treefree(rarbol->dernodo);
     treefree (rarbol);
}
}

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