Advertisement
Irlan

Lista_estática

May 28th, 2014
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.31 KB | None | 0 0
  1. // Chamada de Bibliotecas
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. // Variavel global
  8. #define MaxTam 5
  9.  
  10. typedef int TipoApontador; //não entendi
  11. typedef int TipoChave; //nao entendi
  12.  
  13.  
  14. typedef struct TipoItem
  15. {  
  16.   char nome[30];   
  17. } TipoItem;        
  18.  
  19. typedef struct TipoLista
  20. {
  21.         TipoItem Item[MaxTam]; //não entendi
  22.         TipoApontador Primeiro, Ultimo; //não entendi
  23. } TipoLista;
  24.  
  25.  
  26.  
  27. //não entendo o porque de asterisco na frete de *Lista, e os parâmetros utilizados.
  28. int Insere(TipoItem x, TipoLista *Lista);
  29. int Retira(int p, TipoLista *Lista, TipoItem *x);
  30. void FazListaVazia(TipoLista *Lista);
  31. int ListaVazia(TipoLista *Lista);
  32. void InsereItens(TipoLista *Lista);
  33. void RetiraItens(TipoLista *Lista);
  34. void Imprime(TipoLista *Lista);
  35. void Parada(void);
  36.  
  37. int main() {
  38.  
  39.   TipoLista Lista;
  40.   FazListaVazia(&Lista); // faz a Lista ficar vazia
  41.   int opcao;
  42.   do {
  43.     system("cls");
  44.     printf("Implementação de Lista Linear através de vetor ou arranjo.\n\n");
  45.     printf("**** MENU PRINCIPAL *****\n");
  46.     printf("[ 1 ] Inserir Itens\n");
  47.     printf("[ 2 ] Retirar Itens\n");
  48.     printf("[ 0 ] Encerrar o Programa\n");
  49.     printf("[ ? ] Opção Desejada\n");
  50.     do {
  51.       scanf("%d", &opcao);
  52.     } while ((opcao < 0) || (opcao > 2));
  53.     switch (opcao) {
  54.       case 1: InsereItens(&Lista); break;
  55.       case 2: RetiraItens(&Lista);
  56.     }
  57.   } while (opcao != 0);
  58. }
  59.  
  60.  
  61. void FazListaVazia(TipoLista *Lista) {
  62.   Lista->Ultimo = -1;
  63. }
  64.  
  65.  
  66. int ListaVazia(TipoLista *Lista) {
  67.   return(Lista->Ultimo == -1);
  68. }
  69.  
  70.  
  71. void Imprime(TipoLista *Lista) {
  72.   int i;  
  73.   system("cls");
  74.   for (i=0; i<=Lista->Ultimo; i++)
  75.      printf("%d- %s\n", i, Lista->Item[i].nome);
  76. }
  77.  
  78.  
  79. int Insere(TipoItem x, TipoLista *Lista) {
  80.   if (Lista->Ultimo > MaxTam)
  81.   {
  82.       printf("Lista esta cheia\n");              
  83.       return(0); // Erro: Lista Cheia !
  84.   }  
  85.   else
  86.   {
  87.      Lista->Ultimo = Lista->Ultimo + 1;
  88.      Lista->Item[Lista->Ultimo] = x; // item inserido no final da lista
  89.      return(1);     // Item inserido com sucesso
  90.   }
  91. }
  92.  
  93.  
  94. int Retira(int p, TipoLista *Lista, TipoItem *x)
  95. {
  96.   int i;
  97.   if ((ListaVazia(Lista)) || (p < 0) || (p > Lista->Ultimo))
  98.       return(0); // Erro: Lista vazia ou posição não existe.
  99.   else
  100.   {
  101.      *x = Lista->Item[p]; // item retornado
  102.      
  103.      for (i=p; i<=(Lista->Ultimo-1); i++)
  104.         Lista->Item[i] = Lista->Item[i+1];
  105.      Lista->Ultimo = Lista->Ultimo - 1;
  106.      return(1);
  107.   }
  108. }
  109.  
  110. void InsereItens(TipoLista *Lista) {
  111.   fflush(stdin);
  112.   TipoItem x;
  113.   while (1) {
  114.      Imprime(Lista);
  115.      printf("\nInforme um nome do item a ser inserido na lista, (FIM) para encerrar:\n");
  116.      gets(x.nome);
  117.      if (strcmp(x.nome, "FIM") == 0)
  118.          break;
  119.      if (!Insere(x, Lista)) {
  120.          printf("\nErro: lista cheia !");
  121.          Parada();
  122.      }
  123.   }
  124. }
  125.  
  126. void RetiraItens(TipoLista *Lista) {
  127.   fflush(stdin);
  128.   TipoItem x;
  129.   int p;
  130.   while (1) {
  131.      Imprime(Lista);
  132.      printf("\nInforme a posição do item a ser retirado da lista, (-1) para encerrar:\n");
  133.      scanf("%d", &p);
  134.      if (p == (-1))
  135.          break;
  136.      if (!Retira(p, Lista, &x))
  137.          printf("\nErro: lista vazia ou posição inválida !");
  138.      else
  139.          printf("\n%s foi retirado da lista.", x.nome);
  140.      Parada();
  141.   }
  142. }
  143.  
  144. void Parada(void) {
  145.   printf("Pressione [algo] para prosseguir.");
  146.   getch();
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement