Lista Simples em C

Publicado por Ivan Rocha 04/05/2007

[ Hits: 15.199 ]

Homepage: http://homes.dcc.ufba.br/~ivan062/bahia

Download ListaC




Lista encadeada simples em C, com funções de inserir, remover, consultar, e imprimir valores da lista.

  



Esconder código-fonte

# include<stdio.h>
# include<stdlib.h>
# include<string.h>
# include<ncurses.h>
# include<curses.h>
# include<ctype.h>
//#define MALLOC(x) ((x *) malloc (sizeof(x)))


typedef struct ElemListaint{
   int chave;
   struct ElemListaint *ant, *prox;
}Listaint;


void inicializa(Listaint **l){
   *l = NULL;
};

int consulta(Listaint *l, int x){
   Listaint *p;
   int achou = 0;
   
   p = l;
   while((p != NULL) && (!achou)){
      if( p -> chave == x)
         achou = 1;
      else
         p = p -> prox;
   }
   return (achou);
};

int insere(Listaint **l, int x){
   Listaint *p;
   int inserido;
   
   if(!consulta(*l, x)){
      p = ((Listaint *) malloc (sizeof(Listaint)));
      p -> chave = x;
      p -> prox = *l;
      *l = p;
   }
   inserido = 1;
   return (inserido);
};

int remover(Listaint **l, int x){
   Listaint *p, *q; int achou = 0;
   
   p = *l;
   q = (*l) -> prox;

   if((*l) -> chave == x){
      (*l) = (*l) -> prox;
      free(p);
      //free(q);
      //printf("\nElemento Removido com Sucesso! ");
      achou = 1;
   }else{
      while(q){
         if(q -> chave == x){
            p -> prox = q -> prox;
            //p = NULL;
            free(q);
            //q = NULL;
            achou = 1;
         }else
            p = p -> prox;
            q = q -> prox;
      }
   }
   return (achou);   
}

void imprime(Listaint *l){
   Listaint *p;
   
   p = l;
   printf("\nLista de Inteiros: "); 
   while(p){
      printf("%d ", p -> chave);
      p = p -> prox;
   }
   getchar();
}

int main(){
   char op[1];
   Listaint *l;
   int a;

   inicializa(&l);
      for(;;){//do{
         printf("\n\n");
         system("clear");
         printf("Programa Lista Duplamente Encadeada!\n\n");
         printf("a. Insere na Lista;\n");
         printf("b. Remove da Lista;\n");
         printf("c. Consulta na Lista;\n");
         printf("d. Imprime Lista;\n");
         printf("s. SAIR.\n\n");
         printf("OPCAO: "); //printf("{FONTE}3310;25H[");
         //printf("{FONTE}33[8;8H");
         gets(op);
         switch(toupper(op[0])){
            case 'A':{
               fflush(stdin);
               //system("clear");
               printf("\nDigite o Elemento a Inserir: ");
               scanf("%d", &a);
               a = insere(&l, a); //****************************************88
               if(a)
                  printf("\nElemento Inserido com Sucesso!\n");
               else
                  printf("\nElemento nao Inserido!\n");
               usleep(1000000);
            }break;
            case 'B':{
               fflush(stdin);
               //system("clear");
               if (l == NULL){
                  printf("\nLista Vazia!!!");
                  getchar();
               }else{
                  printf("\nDigite o Elemento a Remover: ");
                  scanf("%d", &a);
                  a = remover(&l, a);
                  if (a)
                     printf("\nElemento Removido com Sucesso!\n");
                  else
                     printf("\nNao existe este Elemento!\n");
               }
               usleep(1000000);
            }break;
            case 'C':{
               fflush(stdin);
               if (l == NULL){
                  printf("\nLista Vazia!!!");
                  getchar();
               }else{
                  printf("\nDigite o Elemento a Consultar: ");
                  scanf("%d", &a);
                  a = consulta(l, a); //*******************************************
                  //printf("{FONTE}33[x;yH");
                  if(a)
                    printf("\nValor encontrado na lista!!!\n");
                  else
                     printf("\nValor nao encontrado na lista!!!\n");
                  usleep(1000000);
               }
            }break;
            case 'D':{
               fflush(stdin);
               if(l == NULL){
                  printf("\nLista Vazia!!!");
                  getchar();
               }else
                  imprime(l);
            }break;
            case 'S':{
               fflush(stdin);
               printf("\nTem certeza? (S/N) ");
               gets(op);
               if(toupper(op[0]) == 'S'){
                  system("clear");
                  exit(0);
            }
            }break;
            default:{
               fflush(stdin);
               if(toupper(op[0]) != 'S')
                  printf("Opcao incorreta, digite novamente!");
               //usleep(1000000);
            }break;
         }
      }//while(toupper(op[0]) != 'S');
   return (0);
}



Scripts recomendados

Pilha, algoritmos push, pop e imprimir explicados

Cria os dígitos verificadores para CPF

Hello world em COBOL

Par ou Ímpar

SOFTCALC


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário