Pilha

Publicado por Kleber de Andrade Reis 11/05/2005

[ Hits: 8.334 ]

Download pilha.c




exemplo de pilha com funcoes como comparacao de pilhas, copia de uma pilha entre outra.....

  



Esconder código-fonte

[code]
#include <stdio.h>
#include <string.h>

struct escola
{
   char nome[50];
   int n1,n2,n3,n4;
}*m2,*m3;

int i=0,y=0;

typedef struct escola pilha;
void menu1(void);
void menu(void);
int empilha(pilha *emp, int c);
int desempilha(int c);
void status(int c);
void imptopo(pilha *imp, int c);
void lista(pilha *list, int c);
int cria(void);
int libera(void);
pilha * copia_pilha(pilha *p);
int pilhas_iguais(pilha *p1, pilha *p2);
void show(pilha *p);

int main()
{
   pilha aluno[10];

   int j=0,op,igual;
   for(i=0;i<10;i++)
   {
      aluno[i].n1=0;
      aluno[i].n2=0;
      aluno[i].n3=0;
      aluno[i].n4=0;
      aluno[i].nome[0]='{FONTE}';
   }
   i=0;
      
   for(;;)
   {
      menu();
      scanf("%i",&op);
      system("clear");

      switch(op)
      {
         case 0:
            exit(0);
            break;
         case 1:
            cria();
            break;
         case 2:
            i=empilha(aluno,i);
            break;
         case 3:
            i=desempilha(i);
            break;
         case 4:
            status(i);
            break;
         case 5:
            lista(aluno,i-1);
            break;
         case 6:
            imptopo(aluno,i-1);
            break;
         case 7:
            libera();
            break;
         case 8:
            m3=copia_pilha(aluno);
            free(m2);
            break; 
         case 9:
            igual=pilhas_iguais(aluno,m3);
            system("clear");
            if(igual==1)
               printf("As pilhas sao identicas\n");
            else
               printf("As pilhas sao diferentes\n");
            sleep(4);
            break;
         default:
            printf("comando (%i) desconhecido\n",op);
            sleep(4);
            break;
      }
   }
};

void menu1(void)
{
   system("clear");
   printf("*******************MENU*******************\n\n");
   printf("1 - desempilha 1 dado\n");
   printf("2 - desempilha 2 dados\n");
   printf("3 - desempilha n dados\n");
   printf("4 - desempilha todos os dados da pilha\n");
   printf("\n*****************************************\n");
   printf("Digite sua opcao: ");
};

void menu(void)
{
   system("clear");
   printf("*******************MENU*********************\n\n");
   printf("0 - sai do programa\n");
   printf("1 - cria uma pilha\n");
   printf("2 - empilha um elemento na pilha\n");
   printf("3 - chama menu de desempilhamento\n");
   printf("4 - verifica se a pilha esta vazia\n");
   printf("5 - lista o conteudo da pilha\n");
   printf("6 - imprime o ultimo elemento da pilha\n");
   printf("7 - libera espaco de memoria alocado\n");
   printf("8 - faz uma copia indentica da pilha aluno\n");
   printf("9 - compara pilhas\n");
   printf("\n********************************************\n");
   printf("Digite sua opcao: ");
};

int empilha(pilha *emp, int c)
{
   int a;
   if(c<=9)
   {  
      getchar();
      //for(a=c;a>=0;a--)
      //{
         //strcpy(emp[a+1].nome,emp[a].nome);
         //emp[a+1].n1=emp[a].n1;
         //emp[a+1].n2=emp[a].n2;
         //emp[a+1].n3=emp[a].n3;
         //emp[a+1].n4=emp[a].n4;
      //}
      printf("Digite o nome do aluno\n");  
      fgets(emp[c].nome,50,stdin);
      printf("Digite a nota do 1 bimestre\n");
      scanf("%i",&emp[c].n1);  
      printf("Digite a nota do 2 bimestre\n");
      scanf("%i",&emp[c].n2); 
      printf("Digite a nota do 3 bimestre\n");
      scanf("%i",&emp[c].n3); 
      printf("Digite a nota do 4 bimestre\n");
      scanf("%i",&emp[c].n4); 
      c++;
   }
   else
   {
      printf("A pilha esta cheia!!!\n");
      sleep(4);
   }
   return c;
};

int desempilha(int c)
{
   int k,a;
   if(c>0)
   {
      menu1();
      scanf("%i",&k);
      switch(k)
      {
         case 1:
            c--;
            return c;
         case 2:
       if(c>=2)
               c=c-2;
       else
       {
          printf("\n\nImpossivel desempilhar!!!\n");
          sleep(4);
            }
            return c;
         case 3:
            system("clear");
            printf("Digite a quantidade de elementos a ser desempilhado: ");
            scanf("%i",&a);
            if(a>c)
            {
               printf("\n\nImpossivel desempilhar!!!\n");
               sleep(4);
            }
            else
               c=c-a;
            return c;
         case 4:
            c=0;
            return c;
         default:
            return c;
      }
   }
   else
   {
      printf("Verifique se a pilha foi criada ou se ela esta vazia!!\n");
      sleep(4);
   }
   return c;
};

void status(int c)
{ 
   if(c==0)
      printf("A pilha esta vazia\n");
   else
      printf("A pilha contem dados\n");
   sleep(4);
};

void imptopo(pilha *imp, int c)
{
   if(c>=0)
   {
      printf("Ultimo dado contido na pilha e:\n\n");
      printf("Nome do aluno: %s\n",imp[c].nome);
      printf("Nota 1 bimestre: %i\n",imp[c].n1);
      printf("Nota 2 bimestre: %i\n",imp[c].n2);
      printf("Nota 3 bimestre: %i\n",imp[c].n3);
      printf("Nota 4 bimestre: %i\n",imp[c].n4);
   }
   else
      printf("Verifique se a pilha foi criada ou se ela esta vazia!!\n");
   sleep(4);
};

void lista(pilha *list, int c)
{

   int m=0;
   while(m<=c)
   {
      printf("Nome do aluno: %s\n",list[m].nome);
      printf("Nota 1 bimestre: %i\n",list[m].n1);
      printf("Nota 2 bimestre: %i\n",list[m].n2);
      printf("Nota 3 bimestre: %i\n",list[m].n3);
      printf("Nota 4 bimestre: %i\n\n\n",list[m].n4);
      m++;
   }  
   if(c==-1)
      printf("Verifique se a pilha foi criada ou se ela esta vazia!!\n");
   sleep(4);   
};

int cria(void)
{
   m3=(pilha *) calloc(10,sizeof (pilha));   
   system("clear");
   printf("Foi alocado um espaco em memoria para outra pilha\n"); 
   sleep(4);
   return 0;
};

int libera(void)
{
   free(m3);
   system("clear");
   printf("Foi liberado da memoria o espaco de m1\n");
   sleep(4);
   return 0;
};

pilha * copia_pilha(pilha *p)
{
   int c;
   m2=(pilha *) calloc(10,sizeof (pilha));
   for(c=0;c<i;c++)
   {
      strcpy(m2->nome,p->nome);
      m2->n1=p->n1;
      m2->n2=p->n2;
      m2->n3=p->n3;
      m2->n4=p->n4;
      m2++;
      p++;
   }
   y=i;
   m2=m2-c;
   return m2;
};

int pilhas_iguais(pilha *p1, pilha *p2)
{
   int c=0,a=0;
   char f;
   
   while(a<10)
   {
      if((y==i)&&(p1->n1==p2->n1)&&(p1->n2==p2->n2)&&(p1->n3==p2->n3)&&(p1->n4==p2->n4)&&(strcmp(p1->nome,p2->nome)==0))
      ;
      else
      {
         return 0;
      }
      p1++;
      p2++;
      a++;
   }
   return 1;
};

void show(pilha *p)
{
   int c;
   for(c=0;c<i;c++)
   {
      printf("%s\n",p->nome);
      printf("%i\n",p->n1);
      printf("%i\n",p->n2);
      printf("%i\n",p->n3);
      printf("%i\n",p->n4);
      p++;
      sleep(4);
   }
};
[/code]

Scripts recomendados

Fila usando lista encadeada

Pilha estática em C

Algoritmo do método de Newton

Calculadora em C separada por funções e com diretivas

merge sort


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts