Codigo en c Pilas

Codigo en c Pilas

Funciones del codigo;
1.-Insertar Elementos a una pila
2.-Mostrar la Pila
3.-Concatenar dos pilas
4.-Invertir la pila
5.-Eliminar un valor especifico de la pila


#include stdio.h
#include stdlib.h
#include string.h
#include ctype.h
 

typedef struct{
 int tope;
    int elemnto[10];
}struct_pila;


int pop(struct_pila *p);
void push(struct_pila *p,int); 
void mostrar(struct_pila p);
void invertir(struct_pila p,struct_pila *pinv); 
void concatenar(struct_pila *p,struct_pila *paux,struct_pila *pcon); 
void ocurrencias(struct_pila *p,struct_pila *paux); 
int pilaaux(struct_pila *paux);
void posicion(struct_pila p); 


int main(){
 int q,g,e;
    int opc;
 struct_pila p;
 struct_pila pinv;
 struct_pila paux;
 struct_pila pcon;
 pinv.tope=-1;
 p.tope=-1;
 pcon.tope=-1;
 paux.tope=-1;
 while(q!=2){
 system("cls"); 
 printf("Practica pila \n");
  printf("1.-  Insertar elementos en la pila \n");
        printf("2.-  Sacar un elemento de la pila \n");
        printf("3.-  Mostrar la pila \n");
        printf("4.-  Profuncidad de la pila \n");
        printf("5.-  Invertir la pila\n");
        printf("6.-  Concatenar 2 pilas\n");
        printf("7.-  Eliminar ocurrencias \n");
        printf("9.- Salir \n");
  printf("Indica la opcion: ");
        scanf("%d", &opc);
         switch(opc)
        {
            case 1:system("cls");
                   printf("Ingresa el numero que deseas meter a la pila: ");
                   scanf("%d",&e);
       push(&p,e);
          break;
   case 2:system("cls");
             pop(&p);
          break;
            case 3:system("cls");
                   mostrar(p);
          break;
   case 4:system("cls"); 
          posicion(p);
          break;
   case 5:system("cls");
          invertir(p,&pinv);
          break;
            case 6:system("cls");
                   pilaaux(&paux);
                   concatenar(&p,&paux,&pcon);
          break;
   case 7:system("cls");
          ocurrencias(&p,&paux);
          break;
            case 9:return 0;
          break;
   default :
                 printf("Opcion no valida\n" );
                 break;
        }
printf("\n¿Desea hacer otro movimiento?\n");
printf("1.-si\n");
printf("2.-no\n\n");
printf("Opcion:");
scanf("%d",&q);
}
}


int pop(struct_pila *p){
int f=-1,val;
if(p->tope==f){
 printf("La pila esta Vacia\n");
}
val=p->elemnto[p->tope];
p->tope--;
return val;
}

void push(struct_pila *p,int e){
 if(p->tope<10){
  p->tope++;
  p->elemnto[p->tope]=e;
  printf("\n el numero %d se ingreso con exito\n",e);
  }
 else{
  printf("\nNo queda espacio en la pila \n");
 }
}

void invertir(struct_pila p,struct_pila *pinv){
int l,i,f=-1;
int c;
l=p.tope;
i=p.tope;
pinv->tope=-1;
  while(i!=f){
    pinv->tope++;
    pinv->elemnto[pinv->tope]=p.elemnto[i];
    i--;
   }
c=pinv->tope;
    printf("PILA INVERTIDA:\n\n");
         printf("_______________________________________________________________\n\n");
         while(c!=f){
        printf(" <-- %d |",pinv->elemnto[c]);
        c--;       
    }
         printf("\n_______________________________________________________________\n\n");
         printf("Pila Original:\n");
mostrar(p);
}

void mostrar(struct_pila p){
 int i,g;
 int f=-1;
 g=p.tope+1;
if (p.tope==f)
     printf("La pila esta vacia.\n\n");
   else
     {
         printf("En la pila se encuentrar:\n\n");
         printf("%d/10 Elementos \n",g);
         printf("_______________________________________________________________\n\n");
         while (p.tope!=f) 
    {
        printf(" <-- %d |",p.elemnto[p.tope]);
        p.tope--;       
    }
     }
         printf("\n_______________________________________________________________\n\n");
         
}

void posicion(struct_pila p){
 int i;
 int n;
 n=10;
 int f=-1;
if (p.tope==f)
     printf("La pila esta vacia.\n\n");
   else
     {
      i=p.tope;
      i=i+1;
      n=n-i;
      printf("El numero de elementos actuales en la pila es: %d \n",i);
      printf("Aun puede agregar :%d  elementos a la pila \n",n);
    }
}


int pilaaux(struct_pila *paux){
int w,t;
printf("Ingreso de la pila 2\n");
printf("¿Cuantos elementos contendra la segunda pila?:\n");
printf("(No deben ser mas de 10 elemntos):\n");
scanf("%d",&w);
w=w-1;
while(paux->tope!=w){
   paux->tope++;
   printf("Ingresa Elemento:");
   scanf("%d",&t);
   paux->elemnto[paux->tope]=t;
}
printf("La pila fue ingresada con exito\n");
}


void concatenar(struct_pila *p,struct_pila *paux,struct_pila *pcon){
 int i,r,r2,f=-1,rf;
 r=p->tope;
 i=0;
    r2=paux->tope;
    rf=r+r2;
    while(r!=f){
     pcon->tope++;
  pcon->elemnto[pcon->tope]=p->elemnto[i];
  r--;
  i++;
 }
 i=0;
    while(r2!=f){
     pcon->tope++;
  pcon->elemnto[pcon->tope]=paux->elemnto[i];
  r2--;
  i++;
 }
  printf("\n_______________________________________________________________\n\n");
         while(rf!=f){
        printf(" <-- %d |",pcon->elemnto[rf]);
        rf--;       
    }
     printf("\n_______________________________________________________________\n\n");
}

void ocurrencias(struct_pila *p,struct_pila *paux){
 int i,d,f=-1,y;
 printf("Ingrese el numero que desea eliminar por completo de la pila: ");
 scanf("%d",&d);
 paux->tope=-1;
 while(p->tope!=f){
  paux->tope++;
  paux->elemnto[paux->tope]=p->elemnto[p->tope];
  p->tope--;
 }
 while(paux->tope!=f){
  p->tope++;
  y=paux->elemnto[paux->tope];
  p->elemnto[p->tope]=paux->elemnto[paux->tope];
  paux->tope--;
  if(y==d){
   p->tope=p->tope-1;
  }
 }
}

Share on Google Plus
    Blogger Comment

0 comentarios:

Publicar un comentario