martes, 26 de noviembre de 2013

Programa 9 Burbuja - Daniel Prado Garcia




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



main ()
{
    int n,i,j,aux;
    int *num;
    
    
    printf("\n\n  Cuantos elementos habra en el arreglo:   ");
    scanf("%d",&n);
    num=(int *)malloc(sizeof(int)*n);
    

    system("cls");
    for(i=0;i<n;i++)
    {
        printf("\n\n  Dame el elemento #%d del arreglo: ",i);
        scanf("%d",&num[i]);
    }
    
    
    //Ordenar el arreglo
    system("cls");
    printf("\n\n\n ***  Ordenamiento del arreglo  ***\n\n\n");
    
    
    for(j=0;j<(n-1);j++)
    {
        for(i=(n-1);i>j;i--)
        {
            if(num[i]<num[i-1])
            {
                aux=num[i];
                printf("\n\n AUXILIAR: %d \n",aux);
                
                num[i]=num[i-1];
                printf(" NUM i : %d \n",num[i]);
                
                num[i-1]=aux;
                printf(" NUM i-1: %d \n",num[i-1]);
                
            }
        }
        printf("\n Vuelta: ");
        for(i=0;i<n;i++)
        {
            printf(" %d ",num[i]);
        }
        printf("\n\n");
    }

Programa lista 7 Daniel Prado Garcia



Una lista enlazada es una de las estructuras de datos fundamentales, y puede ser usada para implementar otras estructuras de datos. Consiste en una secuencia de nodos, en los que se guardan campos de datos arbitrarios y una o dos referencias (punteros) al nodo anterior o posterior. El principal beneficio de las listas enlazadas respecto a los array convencionales es que el orden de los elementos enlazados puede ser diferente al orden de almacenamiento en la memoria o el disco, permitiendo que el orden de recorrido de la lista sea diferente al de almacenamiento.



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


struct lista
{
       int clave;
       char descrip[25];
       struct lista *sigptr; 
};


typedef struct lista LISTA;
typedef LISTA *LSTPTR;

//Funcion para imprimir lista 
void imprime(LSTPTR auxptr)
{
    system("cls");
    if (auxptr==NULL)
        printf("\n\n    La lista esta vacia\n\n");
    else
    {
        printf("\n\n    El contenido de la lista es: ");
        printf("\n\n\n  ---- Principio de la lista ----\n");
        while(auxptr!=NULL)//mientras sigptr que esta siendo apuntado por auxptr sea diferente de nulo
        {
            printf("\n\n   %d - %s",auxptr->clave, auxptr->descrip); 
            auxptr=auxptr->sigptr; 
        }
        printf("\n\n\n  ---- Fin de la lista ----\n");
    }
    system("pause");
}



void extraer(LSTPTR *iniptr,LSTPTR *finptr,int cla)
{
    system("cls");
    LSTPTR auxptr,ultptr,buscaptr;
    auxptr=*iniptr;
    ultptr=*finptr; 
    
    if(*iniptr==NULL)//si el contenido de "iniptr" es nulo entonces no hay lista
    {
        printf("\n\n  No hay nodos en la lista \n\n");
        system("pause");
    }
    else 
    {
        if(cla<auxptr->clave || cla>ultptr->clave)
        {
            printf("\n\n  No existe ese nodo en la lista \n\n");
            system("pause");
        }
        else 
        {
            if(cla==auxptr->clave)
            {
                *iniptr=auxptr->sigptr;
                free(auxptr);
            }
            else
            {
                if(cla==ultptr->clave) //si "cla" es igual al miembro "clave" que esta siendo apuntada por "ultptr"
                {
                    while(auxptr->sigptr!=ultptr)
                    {
                        auxptr=auxptr->sigptr;
                    }
                    auxptr->sigptr=NULL;
                    free(ultptr);
                    *finptr=auxptr;
                }
                else
                {
                    while(cla!=auxptr->clave)
                    {
                        buscaptr=auxptr;
                        auxptr=auxptr->sigptr;
                    }
                    buscaptr->sigptr=auxptr->sigptr;
                    free(auxptr);
        }
      }
     }
    }
    }


void enlista(LSTPTR *iniptr, LSTPTR *finptr, int cla, char descr[25]) 
      LSTPTR nvoptr, actptr, otroptr; //crear 3 apuntadores
      
      nvoptr = (LSTPTR)malloc(sizeof(LISTA)); 
      
      
      if (nvoptr != NULL)
      {
             nvoptr->clave = cla;
             strcpy(nvoptr->descrip, descr); 
             nvoptr->sigptr = NULL; 
             
            
             if (*iniptr == NULL)
             {
                  *iniptr = nvoptr; 
                  *finptr = nvoptr; 
             }
            
             else
             {
                 actptr = *iniptr;
                
                 if (cla < (*iniptr)->clave)
                 {
                     nvoptr->sigptr = *iniptr;
                     *iniptr = nvoptr;
                 }
                
                 else
                 {
                     if (cla > (*finptr)->clave)
                     {
                         (*finptr)->sigptr = nvoptr;
                         *finptr = nvoptr;
                     }
                    
                     else  
                     {
                        otroptr = actptr->sigptr; 
                        while (cla > otroptr->clave) 
                        {
                            actptr= actptr->sigptr;
                            otroptr= actptr->sigptr;
                        }
                        actptr->sigptr = nvoptr; 
                        nvoptr->sigptr = otroptr;
                     }
                     }
                     }
                     }
      else 
          printf("%d no fue insertado. No hay memoria n\n", cla);
}

        void menu(void)
     { 
           system("cls");
           printf("\n\n\n\n"
              "    OPERACIONES DISPONIBLES EN LA LISTA ORDENADA: \n\n\n\n"
              " 1.- AGREGAR UN ELEMENTO A LA LISTA\n"
              "2.- IMPRIMIR LA LISTA\n"
              "  3.- EXTRAER UN ELEMENTO DE LA LISTA\n"
              "    4 SALIR DEL PROGRAMA\n");
     }


main()
      LSTPTR iniptr = NULL, finptr = NULL;
      char opcion, descri[25];
      int clav;
      menu();
      printf("\n    Elige opcion: ");
      scanf("%c", &opcion);
      while (opcion != '4')
      { 
          switch(opcion)
          { 
              case '1': 
                  system("cls");
                  printf("\n   Clave del articulo (entero): ");
                  scanf("%d", &clav);
                  fflush(stdin);
                  printf("\n    Descripcion del articulo : ");
                  gets(descri);
                  enlista(&iniptr, &finptr, clav, descri);
                    imprime(iniptr);
              break;
              case '2':
                    imprime(iniptr);
              break;
              case '3':
                    printf("\n                Clave del articulo a extraer (entero): ");
                  scanf("%d", &clav);
                    extraer(&iniptr,&finptr,clav);
                    imprime(iniptr);
              break;
              default : 
                  printf("\n\n Opcion no valida.....");
                  printf("\n\n Enter para continuar...");
                  getch(); 
              break;
          }
          menu();
          fflush(stdin);
          printf("\n                Elige opcion: ");
          scanf("%c", &opcion);
      }
      printf("\n   Fin del programa.\n\n");
      printf("  Enter para terminar...");
      system("pause");
}

Programa 5 (colas)  Daniel Prado Garcia







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


struct colanodo 
      {
           int clave;
           char descrip[20];
           struct colanodo *sigptr;
       };


typedef struct colanodo COLANODO;
typedef COLANODO *COLANODOPTR;



void enqueue(COLANODOPTR *, COLANODOPTR *, int, char[]);
void menu(void);
void imprimir(COLANODOPTR);
int descolar(COLANODOPTR *);



main()
      COLANODOPTR adelaptr = NULL, atrasptr = NULL;
      int opcion, clav;
      char descri[20];
      menu();
      printf("\n                Elige opcion: ");
      scanf("%d", &opcion);
    
      while (opcion != 4)
      { 
          system("cls");
          switch(opcion) 
          { 
              case 1: 
                  printf("\n   INSERCION EN LA COLA\n\n");   
                  printf("\n\n   Clave del articulo:  ");
                  scanf("%d", &clav);
                  fflush(stdin);
                  printf("\n  Descripcion del articulo:  ");
                  gets(descri);
                  enqueue(&adelaptr, &atrasptr, clav, descri); //direcciones de memoria
                  imprimir(adelaptr); 
              break;
              case 2:
                    descolar(&adelaptr);
                    imprimir(adelaptr); 
              break;
              case 3:
                    imprimir(adelaptr); 
              break;
              default : 
                  printf("\n    Opcion no permitida.\n\n");
                  printf("   Enter para continuar...");
                  getch();
                  menu();
              break;
          }
          menu();
          printf("\n   Elige opcion: ");
          scanf("%d", &opcion);
      }
      printf("\n    Fin del programa.\n\n");
      printf("\n     Enter para salir...");
      getch();
}


void menu(void)
       system("cls");
       printf("\n\n\n\n"
          "OPERACIONES DISPONIBLES CON LA COLA: \n\n\n\n"
          " 1 (enqueue) AGREGAR UN DATO A LA COLA\n"
          " 2 (dequeue) ELIMINAR UN DATO DE LA COLA\n"
          " 3 IMPRIMIR LA COLA\n"
          " 4 SALIR DEL PROGRAMA\n");
}



void enqueue(COLANODOPTR *adelaptr, COLANODOPTR *atrasptr, int cla, char desc[20])
       COLANODOPTR nvoptr;
       nvoptr = (COLANODOPTR) malloc(sizeof(COLANODO)); //apuntador nuevoptr apunta al area de memoria reservada
       if (nvoptr != NULL) 
       {
           nvoptr->clave = cla; //al elemento "clave" que esta siendo apuntado por "nvoptr" asignale "cla".
           strcpy(nvoptr->descrip, desc); //copiar lo qe esta en "desc" (todo el string) al elemento "descrip" que esta siendo apuntado por "nvoptr"
           nvoptr->sigptr = NULL; //asignar NULL al miembro "sigptr" que esta siendo apuntado por "nvoptr"
           if (*adelaptr==NULL) //si la variable (en main) que esta siendo apuntada por "adelaptr" (temporal) es NULL
               *adelaptr = nvoptr; //asigna el valor que tiene "nvoptr" a "adelaptr" (tienen el mismo valor)
           else
              (*atrasptr)->sigptr = nvoptr; //al elemento "sigptr" que esta siendo apuntado por la variable que esta siendo apuntada por "atrasptr" asignale "nvoptr"
              *atrasptr = nvoptr; //asigna el valor de "nvoptr" a "adelaptr" (tienen el mismo valor)
       }
       else
              printf("%c %s no fue insertado. No hay memoria disponible\n\n", cla, desc);   
}

int descolar(COLANODOPTR *inicioptr)
{
    COLANODOPTR auxptr;
    auxptr=*inicioptr; //la variable que esta siendo apuntada por "inicioptr" asignaselo a "auxptr"
    *inicioptr=auxptr->sigptr;
    free(auxptr); 
}


void imprimir(COLANODOPTR auxptr)
{
    system("cls");
    if(auxptr==NULL) //la cola esta vacia
        printf("\n\n    La cola esta vacia");
    else
    {
        printf("\n\n    El contenido de la cola es: ");
        printf("\n\n\n  ---- Principio de la cola ----\n");
        while(auxptr!=NULL)
        {
            printf("\n\n   %d - %s",auxptr->clave, auxptr->descrip); //clave que esta siendo apuntada por auxptr
            auxptr=auxptr->sigptr;
        }
        printf("\n\n\n  ---- Fin de la cola ----\n");
    }
    getch();
}


PROGRAMA 4 


Ejemplo de PILA 
DANIEL PRADO GARCIA


#include <stdio.h>     DANIEL PRADO GARCIA
#include <conio.h>
#include <stdlib.h>

struct pilanodo 
      {
       int clave; // Nombre clave
       char descrip[20]; //arreglo de 20 caracteres 
       struct pilanodo *sigptr; // apuntando al siguiente nodo 
      };

typedef struct pilanodo PILANODO; 
typedef PILANODO *PILANODOPTR;

void push(PILANODOPTR *, int, char[]); //prototipo, al final regresa el valor. 
void instrucciones(void); // Funcion nula.
void listar (PILANODOPTR);
main()
     { 
     PILANODOPTR pilaptr = NULL; //apuntando al tope de la pila . 
     int opcion, cve; .
     char desc[20]; 
     instrucciones();
     printf("\n          Opcion a Elegir : ");
     scanf("%d", &opcion);

    while (opcion != 4)
       { 
           switch(opcion)
                  { case 1: printf("\n         Escribe la clave del articulo (entero): ");
                   scanf("%d", &cve);
                   fflush(stdin);  
                   printf("\n             Escribir descripcon del articulo: ");
                   gets(desc);           
                   push(&pilaptr, cve, desc); 
                   break;
                   case 3: listar (pilaptr);
                   
           default : printf("\n                Opcion invalida. \n\n");
                     printf("\n                Enter para continuar...");
                     getch();
                     instrucciones();
         }
         instrucciones();
         printf("\n                Elige opcion: ");
         scanf("%d", &opcion);
      }
  printf("\n                Fin del programa.\n\n");
  printf("                Enter para salir...");
  getch();
}
//Funcion para imprimir los nodos 
void listar(PILANODOPTR auxptr)
{
if (auxptr==NULL)
    printf("\n\n LA PILA ESTA VACIA");
    else 
    {   printf("\n\n El contenido de la pila es:");
        printf("\n\n ----Tope de la pila -----");
        while (auxptr!=NULL)
        { 
         printf("\n %d %s",auxptr->clave, auxptr->descrip);
         auxptr=auxptr->sigptr;
    
        }
        printf("\n Fondo de la pila");
    }
    getch();
}


void push(PILANODOPTR *topeptr, int cve, char des[20])
{ PILANODOPTR nuevoptr;
  nuevoptr = (PILANODOPTR) malloc(sizeof(PILANODO));
  if (nuevoptr != NULL) 
     { nuevoptr->clave = cve;
       strcpy(nuevoptr->descrip, des);  // Copia 
       nuevoptr->sigptr = *topeptr;
       *topeptr = nuevoptr;
     }
     else
     { printf("\n                %d %s, no fue insertado."
              "\n                No hay memoria disponible. \n", cve, des);
       printf("\n                Enter para continuar...");
       getch();
     }
}

void instrucciones(void) //Funcion nula

         system("cls"); //limpia la pantalla
           printf(" \n\n\n\n"
     "                OPERACIONES DISPONIBLES CON LA PILA: \n\n\n\n"
     "                1 (push) INSERTAR UN VALOR EN LA PILA \n"
     "                2 (pop)  EXTRAER UN VALOR DE LA PILA \n"
     "                3 IMPRIMIR LA PILA \n"
     "                4 SALIR DEL PROGRAMA \n");
}