Lista Dinâmica

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Lista Dinâmica

Mensagem  Renancr em Seg 21 Mar 2011 - 22:12

Lista dinâmica


Código:
#include <iostream>
#include <string>
using namespace std;

struct Tno
{
  int info;
  Tno * prox;
};

//Sinônimo da struct Tno
typedef struct Tno Lista;

//Protótipos
int menu();
Lista *inicializa();
Lista *insere(Lista *L, int i);
Lista *busca(Lista *L, int i);
Lista *remove(Lista *L, int i);
void imprime(Lista *L);


void main()
{
  int op, info;
  Lista *L, *no;
  L=inicializa();
  do{
      op=menu();
      if(op<1 || op>5)
        cout<< "Opcao invalida tente novamente\n";
      else
      {
        if(op==1)
        {
            system("cls");
            cout<< "Entre com a informacao do no\n";
            cin>> info;
            L= insere(L, info);
            if(L == NULL)
            {
              cout<< "\nOverflow\n";
              system("pause");
            }
            else
            {
              cout<< "\nInsercao feita com sucesso\n\n";
              system("pause");
            }
        }
        else
            if(op == 2)
            {
              system("cls");
              cout<< "\nDigite o elemento que deseja buscar\n";
              cin>> info;
              no= busca(L, info);
              if(no == NULL)
              {
                  cout<< "\nElemento nao encontrado\n";
                  system("pause");
              }
              else
              {
                  cout<< "O elemento " << no->info << " existe na lista\n";
                  system("pause");
              }
            }
            else
              if(op == 3)
              {
              system("cls");
              cout<< "Digite o valor para ser removido\n\t";
              cin>> info;
              L=remove(L, info);
              }
              else
                  if(op == 4)
                  {
                    system("cls");
                    imprime(L);
                    system("pause");
                  }
      }
  }while(op != 5);
}

int menu()
{
  int opcao;
  do{
      system("cls");
      cout<< "1- Insere um elemento no inicio da lista\n";
      cout<< "2- Busca por um elemento na lista\n";
      cout<< "3- Remove um elemento na lista\n";
      cout<< "4- Imprime todos os elementos da lista\n";
      cout<< "5- Sair\n";
      cout<< "\n\n\tDigite a opcao desejada\n\t";
      cin>> opcao;
      if(opcao < 1 || opcao > 5)
      {
        system("cls");
        cout<< "\nO valor nao pode ser menor que 1 ou maior que 5\n\n";
        system("pause");
      }
  }while(opcao < 1 || opcao > 5);
  return opcao;
}

//Função de inicialização: Retorna uma lista vazia.

Lista *inicializa()
{
  return NULL;
}

//Inserção no inicio: Retorna a lista atualizada

Lista *insere(Lista *L, int i)
{
  Lista *novo;
  novo=(Lista*) malloc (sizeof (Lista));
  novo->info=i;
  novo->prox=L;
  return novo;
}

Lista *busca(Lista *L, int inform)
{
  Lista *p;
  for(p=L; p!= NULL; p=p->prox)
      if(p->info==inform)
        return p;
  return NULL;
}

Lista *remove(Lista *L, int i)
{
   Lista *p, *ant;
   ant=L;
   for(p=L; p!= NULL; p=p->prox)
   {
      if(p->info==i)
      {
         if(ant == L)
         {
            ant=L;
            L=L->prox;
            free(ant);
            return L;
         }
         else
         {
            ant->prox=p->prox;
            free(p);
            return ant;
         }
      }
      ant=p;
   }
   return L;
}

void imprime(Lista *L)
{
  Lista *p;
  for(p=L; p!=NULL; p=p->prox)
      cout<< "Info "<< p->info << "\n";
}
avatar
Renancr

Mensagens : 118
Data de inscrição : 08/03/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum