Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.36 KB | None | 0 0
  1. /******************************************************************************
  2.  * Universidade Federal da Paraíba (U.F.P.B)                                  *
  3.  * Estrutura de Dados                                                         *
  4.  * Professora: Liliane dos Santos Machado                                     *
  5.  * Aluno: Vinícius Antônio Campos Fagundes                                    *
  6.  * Matrícula: 10921059                                                        *
  7.  * Data: 28 de Outubro de 2010(28/10/2010)                                    *
  8.  *----------------------------------------------------------------------------*
  9.  * Apresentação do projeto:                                                   *
  10.  * 1ª Parte do projeto. Aqui foi construída a biblioteca da pilha. As funções *
  11.  * serão para criar uma pilha, adicionar elementos nela, remover elementos,   *
  12.  * verificar se a pilha está vazia e liberar a pilha                          *
  13.  * PS: a função imprime_pilha foi implementada apenas para conferir os        *
  14.  * resultados, seguindo estritamente os conceitos de pilha, esta função não   *
  15.  * deve ser implementada.                                                     *
  16.  ******************************************************************************/
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20.  
  21. struct no{         // Estrutura que representará os nós da lista
  22.         char info;
  23.         struct no *prox;
  24.         };
  25.        
  26. struct pilha{      // Estrutura que representará um ponteiro para o primeiro
  27.         struct no *prim;   // elemento da lista.
  28.         };
  29.  
  30. /******************************************************************************/
  31.  
  32. /* Protótipos */
  33. void LimpaBuffer(void);
  34. struct pilha* cria_pilha(void);
  35. void push(struct pilha *pile, char valor);
  36. void pop(struct pilha *pile);
  37. void pilha_vazia(struct pilha *pile);
  38. void libera_pilha(struct pilha *pile);
  39.  
  40. /******************************************************************************/
  41.  
  42. void LimpaBuffer(void){
  43.      int valorLido;
  44.      do{
  45.          valorLido = getchar();
  46.          }while((valorLido != '\n') && (valorLido != EOF));
  47. }
  48.  
  49. /******************************************************************************/
  50.  
  51. /* Função para a criação da Pilha */
  52. struct pilha* cria_pilha(void){
  53.      struct pilha *pile;    // Cria um ponteiro que apontará para o primeiro
  54.                             // elemento da lista.
  55.      pile = (struct pilha*)malloc(sizeof(struct pilha)); // Aloca espaço para ele
  56.      pile->prim = NULL;                         // e inicia ele com NULL
  57.      return pile;
  58. }
  59.  
  60. /******************************************************************************/
  61.  
  62. /* Função para adicionar elementos na Pilha */
  63. void push(struct pilha *pile, char valor){
  64.      struct no *novo; // Cria o novo elemento.
  65.      novo = (struct no*)malloc(sizeof(struct no)); // Aloca espaço para ele.
  66.      novo->info = valor;          // Atribui o valor que será inserido ao campo
  67.                                   // info da estrutura.
  68.      novo->prox = pile->prim;   // Faz o elemento que será inserido apontar
  69.                                 // para onde prim aponta.
  70.      pile->prim = novo;    // Faz prim apontar para o novo elemento, tornanando
  71.                            // este o novo primeiro elemento da pilha.
  72. }
  73.  
  74. /******************************************************************************/
  75.  
  76. /* Função para remover o elemento do topo da Pilha */
  77. /* Eventual transtorno como no caso de a Pilha estiver vazia foi tratado */
  78. void pop(struct pilha *pile){
  79.      if(!(pile->prim)) printf("\n=> Pilha Vazia !"); // Caso a pilha esteja
  80.                        // vazia, emita uma mensagem de advertência.
  81.                        
  82.      else{             // Caso contrário..
  83.           struct no *rem;        // Crie uma variável que
  84.           rem = pile->prim;      // apontará para o primeiro elemento da lista.
  85.           pile->prim = rem->prox;  // Faça o ponteiro da pilha apontar então
  86.                                    // para o segundo elemento da lista.
  87.           rem->prox = NULL; // Tire o apontamento do primeiro elemento.
  88.           printf("\n=> O elemento %c foi removido com sucesso !",rem->info);
  89.           free(rem); // Remova-o.
  90.           if(!(pile->prim))  printf("\n=> Pilha Vazia\n=> Parabens!!");
  91.      }
  92. }
  93.  
  94. /******************************************************************************/
  95.  
  96. /* Função para verificar se a Pilha está vazia */
  97. void pilha_vazia(struct pilha *pile){
  98.      if(!(pile->prim))  printf("\n=> Pilha Vazia\n=> Parabens!!");
  99.      else               printf("\n=> Erro: Pilha nao Vazia !");
  100. }
  101.  
  102. /******************************************************************************/
  103.  
  104. /* Função para liberar a Pilha */
  105. void libera_pilha(struct pilha *pile){
  106.      free(pile);
  107.      }
  108.  
  109. /******************************************************************************/
  110.  
  111. /* Função para imprimir os elementos da Pilha */
  112. void imprime_pilha(struct pilha *pile){
  113.      if(!(pile->prim))    printf("\n=> Pilha Vazia !");
  114.      else{
  115.           int i = 1;  // Variável para indicar as posições dos elementos
  116.                       // de cima à baixo
  117.           struct no *var;  // Ponteiro para varrer a lista
  118.           for(var = pile->prim ; var ; var = var->prox, i++){
  119.              printf("\n=> %do Elemento: %c",i,var->info);
  120.              }
  121.           }
  122. }
  123.  
  124. /******************************************************************************/
  125.  
  126. /* Função para imprimir os elementos da Pilha */
  127. /* Esta sim, pode ser implementada seguindo os conceitos de Pilha */
  128. /* Nesta daqui, após consultar o elemento do topo, ele é apagado para que se */
  129. /* possa consultar o elemento posterior, e assim sucessivamente */
  130. void imprime_true_pilha(struct pilha *pile){
  131.      if(!(pile->prim))         printf("\n=> Pilha Vazia !");
  132.      else{
  133.           int i = 1;  // Variável para indicar as posições dos elementos de cima
  134.                       // à baixo
  135.           struct no *varre;  // Ponteiro que irá varrer a Pilha
  136.           for(varre = pile->prim ; varre ; i++){
  137.                     printf("\n=> %do Elemento: %c",i,varre->info);
  138.                     varre = varre->prox;
  139.                     pop(pile);
  140.                     printf("\n");
  141.           // Cada elemento que é lido, em seguida é apagado, seguindo assim os
  142.           //n conceitos de pilha.
  143.                     }
  144.           }
  145. }
  146.  
  147. /******************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement