terça-feira, 8 de dezembro de 2009

Exercicio de Inserção ordenada

Bom dia galera... muita gente pediu no email da turma... então vai la o trabalho de inserção ordenada...

abraços...

#include <stdlib.h>
#include <stdio.h>

typedef struct elemento
{
   int i;
   struct elemento *prox;
}nodo;
int insere_ordenado(nodo **l, int n)
{
   nodo *aux,*aux2,*no;
   no=(nodo*)malloc(sizeof(nodo));
   no->i=n;
   no->prox=NULL;
   aux=*l;
   if(*l==NULL)
   {
      *l=no;
      return 1;
   }
   else
   {
      if(aux->i > n)
      {
         no->prox=*l;
         *l=no;
         return 1;
      }
      else
      {
         aux2=aux->prox;
         while(aux2!=NULL)
         {
            if(aux->i<=n && n<=aux2->i)
            {
               no->prox=aux2;
               aux->prox=no;
               return 1;
            }
            aux2=aux2->prox;
            aux=aux->prox;
         }
         aux->prox=no;
         return 1;
      }
   }
}
int exclui(nodo ** l,int n)
{
    nodo *aux,*aux2;
    aux=*l;
    if(*l==NULL)
    {
       printf("LISTA VAZIA\n");
       return 0;
    }
    if(aux->i==n)//caso o primeiro da lista seja o escolhido
    {
       aux=*l;
       *l=aux->prox;
       free(aux);
       return 1;
    }
    aux2=aux->prox;
    while(aux2!=NULL)//passa pela lista toda procurando o n
    {
       if(aux2->i==n)
       {
          aux->prox=aux2->prox;
          free(aux2);
          return 1;
       }
       aux2=aux2->prox;
       aux=aux->prox;
    }
    return 0;
}
void imprime(nodo **l)
{
    nodo *aux;
    if(*l==NULL)
    {
       printf("LISTA VAZIA\n");
    }
    else
    {
       aux=*l;
       while(aux!=NULL)
       {
          printf("\t %d",aux->i);
          aux=aux->prox;
       }
       printf("\n");
    }
}
int main()
{
    int escolha, digite;
    nodo *lista=NULL;
    do{
         printf("DIGITE A OPÇÃO DESEJADA: \n 1-INSERIR NUMERO NA LISTA DE FORMA ORDENADA \n 2-EXCLUI NUMERO DIGITADO \n 3-IMPRIME \n 4-SAIR \n");
         scanf("%d",&escolha);
         switch (escolha)
         {
             case 1:printf("Digite um numero a ser colocado na lista \n");
                    scanf("%d",&digite);
                    if(insere_ordenado(&lista,digite)==1)
                       printf("inserido com sucesso!\n");
                    else
                        printf("falhou");
                    break;
             case 2:printf("Digite um numero a ser excluido da lista \n");
                    scanf("%d",&digite);
                    if(exclui(&lista,digite)==1)
                       printf("EXCLUIDO COM SUCESSO!\n");
                    else
                       printf("FALHOU\n");
                    break;
             case 3:imprime(&lista);
                    break;
             case 4:printf("SAINDO\n");
                    system("pause");
                    exit(0);
            default:printf("OPCAO INVALIDA\n");
                    break;
         }                          
       }while(escolha!=0);
    return 0;
}

Nenhum comentário:

Postar um comentário