Lista Simples em C

Publicado por Ivan Rocha 04/05/2007

[ Hits: 16.804 ]

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

Digitar dados em um vetor, guardando-os sequencialmente em um arquivo texto

Strcat

Sistema Númerico

Inverter links de downloads

Hello world em COBOL


  

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