Ir ao conteúdo
  • Cadastre-se
Main.cpp

C Lista encadeada - linguagem C

Recommended Posts

Quando estava me sentindo que sabia programar em Linguagem C,
já relachando, e perdendo aos poucos o entusiasmo pela linguagem,
resolvi criar uma Lista Encadeada simples, e pra minha surrprêsa
tive muitas dificuldades, e a bola muchou.
Passei um fim de semana lindo e ensolarado preso neste código,
e pra ser bem sincero, tive pena de postar na época que criei,
más resolvi postar, pois o que sei em programação aprendi mais
na marra, estudando outros códigos do que por teorias intermináveis
sobre o assunto.
Na verdade, Lista Encadeada em Linguagem C, não é difícil de criar,
e nem de implementar, porém não é fácil de entender e mais ainda de explicar.
Confira a eficiência desta lista em todas as funções,
aliás ela é toda baseada em funções,
que facilitam os interessados no assunto.
Como sempre criado no eclipse, onde rodou sem nenhum warnings.

 

Veja abaixo uma imagem do programa em execução:

 

lstEncd.thumb.PNG.78105f9b9e63bcace6dfefe4396d1bc4.PNG

 

Veja abaixo o código do programa:

 

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define TRUE 1
int resp, opc;
int i = 0;
char lista [ 100 ];
struct ListaEncadeada {
     char nome [ 100 ];
     struct ListaEncadeada *liga;
};
typedef ListaEncadeada ListEnc;
int insere ( char ins_nome [ 100 ] );
void imprime ( );
void inserindo ( );
void Mostra ( );
void Excluindo ( );
void Elementos ( );
int exclui ( char ins_nome [ 100 ] );
ListEnc *Lista;
ListEnc *Primeiro;
void Janela ( ) {
     int c, l;
     for ( c = 3; c <= 78 ; c++ ) {
         gotoxy ( c , 1 );
         printf ( "%c" , 205 );
         gotoxy ( c , 4 );
         printf ( "%c" , 205 );
     }
     gotoxy ( 2 , 1 );
     printf ( "%c" , 201 );
     gotoxy ( 79 , 1 );
     printf ( "%c" , 187 );
     gotoxy ( 79 , 4 );
     printf ( "%c" , 188 );
     gotoxy ( 2 , 4 );
     printf ( "%c" , 200 );
     for ( l = 2; l <= 3 ; l++ ) {
         gotoxy ( 2 , l );
         printf ( "%c" , 186 );
         gotoxy ( 79 , l );
         printf ( "%c" , 186 );
     }
     for ( c = 3; c <= 78 ; c++ ) {
         for ( l = 2; l <= 3 ; l++ ) {
              gotoxy ( c , l );
              printf ( "%c" , 177 );
         }
     }
     for ( c = 3; c <= 78 ; c++ ) {
         gotoxy ( c , 5 );
         printf ( "%c" , 205 );
         gotoxy ( c , 25 );
         printf ( "%c" , 205 );
     }
     gotoxy ( 2 , 5 );
     printf ( "%c" , 201 );
     gotoxy ( 79 , 5 );
     printf ( "%c" , 187 );
     gotoxy ( 79 , 25 );
     printf ( "%c" , 188 );
     gotoxy ( 2 , 25 );
     printf ( "%c" , 200 );
     gotoxy ( 2 , 8 );
     printf ( "%c" , 204 );
     gotoxy ( 79 , 8 );
     printf ( "%c" , 185 );
     for ( l = 9; l <= 24 ; l++ ) {
         gotoxy ( 2 , l );
         printf ( "%c" , 186 );
         gotoxy ( 79 , l );
         printf ( "%c" , 186 );
     }
     for ( l = 6; l <= 7 ; l++ ) {
         gotoxy ( 2 , l );
         printf ( "%c" , 186 );
         gotoxy ( 79 , l );
         printf ( "%c" , 186 );
     }
     for ( c = 3; c <= 78 ; c++ ) {
         gotoxy ( c , 8 );
         printf ( "%c" , 205 );
     }
     for ( c = 5; c <= 25 ; c++ ) {
         gotoxy ( c + 25 , 9 );
         printf ( "%c" , 205 );
         gotoxy ( c + 25 , 24 );
         printf ( "%c" , 205 );
     }
     gotoxy ( 29 , 9 );
     printf ( "%c" , 201 );
     gotoxy ( 51 , 9 );
     printf ( "%c" , 187 );
     gotoxy ( 51 , 24 );
     printf ( "%c" , 188 );
     gotoxy ( 29 , 24 );
     printf ( "%c" , 200 );
     for ( l = 10; l <= 23 ; l++ ) {
         gotoxy ( 29 , l );
         printf ( "%c" , 186 );
         gotoxy ( 51 , l );
         printf ( "%c" , 186 );
     }
}
int main ( ) {
     system ( "title PROGRAMA LISTA ENCADEADA" );
     do {
         system ( "cls" );
         Janela ( );
         textcolor ( LIGHTCYAN );
         gotoxy ( 30 , 3 );
         printf ( "PROGRAMA LISTA ENCADEADA" );
         textcolor ( LIGHTBLUE );
         gotoxy ( 30 , 7 );
         printf ( "ESCOLHA UMA OPCAO ABAIXO" );
         textcolor ( YELLOW );
         gotoxy ( 35 , 11 );
         printf ( "1 - INSERIR" );
         gotoxy ( 35 , 13 );
         printf ( "2 - LISTAR" );
         gotoxy ( 35 , 15 );
         printf ( "3 - EXCLUIR" );
         gotoxy ( 35 , 17 );
         printf ( "4 - ELEMENTOS" );
         gotoxy ( 35 , 19 );
         printf ( "5 - SAIR" );
         gotoxy ( 35 , 21 );
         textcolor ( LIGHTRED );
         scanf ( "%d" , &opc );
         fflush ( stdin );
         if ( opc == 1 ) {
              system ( "cls" );
              inserindo ( );
         }
         if ( opc == 2 ) {
              Mostra ( );
         }
         if ( opc == 3 ) {
              Excluindo ( );
         }
         if ( opc == 4 ) {
              Elementos ( );
         }
         if ( opc == 5 ) {
              textcolor ( LIGHTRED );
              gotoxy ( 34 , 21 );
              printf ( "MUITO OBRIGADO" );
              Sleep ( 1800 );
              exit ( 0 );
         } else {
              textcolor ( LIGHTRED );
              gotoxy ( 34 , 21 );
              printf ( "\a OPCAO ERRADA" );
              Sleep ( 800 );
         }
     } while ( 1 );
}
void inserindo ( ) {
     textcolor ( LIGHTRED );
     gotoxy ( 30 , 3 );
     printf ( "PROGRAMA LISTA ENCADEADA" );
     textcolor ( LIGHTBLUE );
     gotoxy ( 30 , 5 );
     printf ( "INSERINDO ITENS" );
     textcolor ( LIGHTGREEN );
     gotoxy ( 30 , 7 );
     printf ( "NOME DO ITEM A SER INSERIDO: " );
     textcolor ( LIGHTRED );
     gets ( lista );
     fflush ( stdin );
     resp = insere ( lista );
     if ( resp == TRUE ) {
         textcolor ( LIGHTCYAN );
         gotoxy ( 30 , 9 );
         printf ( "%s ITEM INSERIDO COM SUCESSO" , lista );
         i++;
     }
     getche ( );
     main ( );
}
void Mostra ( ) {
     system ( "cls" );
     textcolor ( LIGHTRED );
     gotoxy ( 30 , 3 );
     printf ( "PROGRAMA LISTA ENCADEADA" );
     textcolor ( LIGHTBLUE );
     gotoxy ( 30 , 5 );
     printf ( "ELEMENTOS DA LISTA" );
     printf ( "\n\n\t\t" );
     imprime ( );
     getche ( );
     main ( );
}
void Excluindo ( ) {
     system ( "cls" );
     do {
         textcolor ( LIGHTRED );
         gotoxy ( 30 , 3 );
         printf ( "PROGRAMA LISTA ENCADEADA" );
         textcolor ( LIGHTBLUE );
         gotoxy ( 30 , 5 );
         printf ( "ELEMENTOS DA LISTA" );
         printf ( "\n\n\t\t" );
         imprime ( );
         textcolor ( LIGHTCYAN );
         gotoxy ( 30 , 17 );
         printf ( "ESCOLHA UM PARA SER EXCLUIDO" );
         gotoxy ( 30 , 19 );
         textcolor ( LIGHTRED );
         gets ( lista );
         fflush ( stdin );
         resp = exclui ( lista );
         if ( resp == TRUE ) {
              textcolor ( YELLOW );
              gotoxy ( 30 , 21 );
              printf ( "%s EXCLUIDO COM SUCESSO" , lista );
              i--;
              getche ( );
              main ( );
         } else {
              textcolor ( YELLOW );
              gotoxy ( 30 , 21 );
              printf ( "\aNAO EXISTE ESTE ITEM NA LISTA" );
         }
         getche ( );
         system ( "cls" );
     } while ( 1 );
}
void Elementos ( ) {
     system ( "cls" );
     textcolor ( LIGHTRED );
     gotoxy ( 30 , 3 );
     printf ( "PROGRAMA LISTA ENCADEADA" );
     textcolor ( LIGHTBLUE );
     gotoxy ( 30 , 5 );
     printf ( "ELEMENTOS DA LISTA" );
     printf ( "\n\n\t\t" );
     imprime ( );
     textcolor ( LIGHTCYAN );
     gotoxy ( 30 , 17 );
     printf ( "QUANTIDADE DE ELEMENTOS" );
     textcolor ( YELLOW );
     gotoxy ( 30 , 19 );
     printf ( "%d ELEMENTOS" , i );
     getche ( );
     main ( );
}
int insere ( char Nome_Palavra [ 100 ] ) {
     ListEnc *Aux;
     ListEnc *Analisa_lista;
     Aux = ( ListEnc * ) malloc ( sizeof ( ListEnc ) );
     if ( Aux == NULL ) {
         return ( 0 );
     } else {
         strcpy ( Aux->nome , Nome_Palavra );
         Aux->liga = NULL;
         if ( Lista != NULL ) {
              if ( Primeiro != NULL ) {
                   Aux->liga = Primeiro;
                   Lista = Aux;
                   Analisa_lista = Primeiro;
                   if ( stricmp ( Lista->nome , Primeiro->nome ) > 0 ) {
                        Aux = Primeiro;
                        Analisa_lista = Primeiro->liga;
                        while ( ( Analisa_lista != NULL )
                                 && ( ( ( stricmp ( Lista->nome ,
                                          Analisa_lista->nome ) ) > 0 ) ) ) {
                            Aux = Analisa_lista;
                            Analisa_lista = Analisa_lista->liga;
                        }
                        Lista->liga = Analisa_lista;
                        Aux->liga = Lista;
                   } else {
                        Primeiro = Lista;
                   }
              } else {
                   if ( stricmp ( Aux->nome , Lista->nome ) > 0 ) {
                        Lista->liga = Aux;
                        Primeiro = Lista;
                        Lista = Aux;
                   }
                   if ( stricmp ( Aux->nome , Lista->nome ) < 0 ) {
                        Aux->liga = Lista;
                        Lista = Aux;
                        Primeiro = Lista;
                   }
              }
         } else {
              Lista = Aux;
         }
     }
     return ( 1 );
}
void imprime ( ) {
     ListEnc *Aux;
     if ( Lista == NULL ) {
         textcolor ( LIGHTGREEN );
         gotoxy ( 30 , 7 );
         printf ( "\aA LISTA ESTA VAZIA" );
         Sleep ( 1800 );
         main ( );
     } else {
         if ( Primeiro == NULL ) {
              Aux = Lista;
              textcolor ( LIGHTGREEN );
              printf ( "%s" , Aux->nome );
         } else {
              Lista = Primeiro;
              Aux = Lista;
              while ( Aux != NULL ) {
                   printf ( "%s\n\t\t" , Aux->nome );
                   Aux = Aux->liga;
              }
         }
     }
}
int exclui ( char stringnome [ 100 ] ) {
     ListEnc *Aux;
     ListEnc *Repl = 0;
     int Testa_Compara;
     if ( Lista == NULL ) {
         return ( 0 );
     } else {
         if ( Primeiro == NULL ) {
              Aux = Lista;
              Testa_Compara = stricmp ( Aux->nome , stringnome );
              if ( Testa_Compara == 0 ) {
                   free ( Aux );
                   Lista = NULL;
                   return ( 1 );
              } else {
                   return ( 0 );
              }
         } else {
              Lista = Primeiro;
              Aux = Lista;
              while ( Aux != NULL ) {
                   Testa_Compara = stricmp ( Aux->nome , stringnome );
                   if ( Testa_Compara == 0 ) {
                        if ( Aux == Primeiro ) {
                            if ( Aux->liga == NULL ) {
                                 free ( Aux );
                                 Lista = NULL;
                                 return ( 1 );
                            } else {
                                 Primeiro = Aux->liga;
                                 free ( Aux );
                                 return ( 1 );
                            }
                        } else {
                            Repl->liga = Aux->liga;
                            free ( Aux );
                            return ( 1 );
                        }
                   } else {
                        Repl = Aux;
                        Aux = Aux->liga;
                   }
              }
              return ( 0 );
         }
         return ( 1 );
     }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×