Trabalhando com Lista Dinamica

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

Trabalhando com Lista Dinamica

Mensagem  C++MasTeR em Sex 17 Set 2010 - 10:11

Faça um programa utilizando lista dinamica que segue o seguinte menu:
1 - Insere um elemento na Lista
2 - Ver se existe elemento repitido
3 - Ordenar valores inseridos
4 - Remove um elemento da Lista
5 - Lista todos da Lista
6 - Sair


Código:

#include <cstdlib>
#include <iostream>
#include <conio.h>

using namespace std;
//Criação da estrutura tNo
struct tNo{
           int info;
           tNo *prox;
         };
//Criação da lista dinamica
struct tLista{
            tNo *inicio;
           };

int menu()
{
   int op;
   cout << "\n\nMENU:\n\n";
   cout << "1 - Insere um elemento na Lista\n";
   cout << "2 - Ver se existe elemento repitido\n";
   cout << "3 - Ordenar valores inseridos\n";
   cout << "4 - Remove um elemento da Lista\n";
   cout << "5 - Lista todos da Lista\n";
   cout << "6 - Sair\n\n";
   cout << "Escolha uma opcao: ";
   cin >> op;
   return op;
}
int insere_na_lista(tLista &L, int valor, int &cont,int &flag)
{
   
   tNo *novo_no = new tNo; /* 1 - Cria o novo nó */

   if (novo_no == NULL) /* Overflow */
      return 0;

   novo_no->info = valor; /* 2 – Preenche o campo info */

   if (L.inicio == NULL) /* É o primeiro nó a ser inserido? */
      novo_no->prox = NULL; /* O prox aponta para null */
   else
      novo_no->prox = L.inicio; /* O prox aponta para o início */
      
   L.inicio = novo_no; /* Reposiciona o início */
   cont++;
   flag = 0;
   return 1; /* Inserção feita com sucesso */
}
//Função para converter elementos da lista dinamica para vetor
//Assim podendo usa-lo em outras funçoes
void converte(int *vet,int cont,tLista L)
{
    int o;
    for(o=0;o<cont;o++)
   {
      vet[o] = L.inicio->info;
      L.inicio = L.inicio->prox;
    }   
}
//Função para verificar se existe elemento igual       
int repete(int *vet, tLista L, int cont)
{
  int i,vet2[cont],contt,temp,num;
  int contt2,flag=0,flag2=0,zero=0;
 
    if (L.inicio == NULL) /* Lista vazia */
      return 0;
      
  converte(vet,cont,L);
 
    for(i=0;i<cont;i++)
      vet2[i]=vet[i];
      
    for(i=0;i<cont;i++)
      if(vet2[i] == 0)
        zero++;
    for(contt2=0;contt2<cont;contt2++)
    {
      temp = 0;
    for(contt=0;contt<cont;contt++)
    {
      if(vet2[contt] != 0)
      if(vet2[contt] == vet[contt2])
      {
            num = vet2[contt];
            if(temp != 0)
              vet2[contt]=0;
              temp++;
        }
      }
    //como eu uso o zero pra delimitar a contagem, faço uma condição para contar ele
    if(zero >= 2 && flag2 == 0){
    cout<<"\nO numero repitido foi o: 0";
    cout<<"\nE a quantidade repitida foi: "<<zero<<endl;
    flag++;
    flag2++;
    }
    if(temp >= 2){
    cout<<"\nO numero repido foi o: "<<num;
    cout<<"\nE a quantidade repitida foi: "<<temp<<endl;
    flag++;
    }
  }
    if(flag == 0){
    cout<<"\n Nenhum numero foi repitido \n\n";
    }
}
//Função que remove o ultimo elemento inserido na lista     
int remove_da_lista(tLista &L,int &flag,int &cont)
{
   if (L.inicio == NULL) /* Underflow */
      return 0;

   cout << "\nInformacao a ser removida: ";
   cout << L.inicio->info;

   tNo *no_a_remover = L.inicio;

   L.inicio = L.inicio->prox;

   delete no_a_remover;
   
   flag = 0;
   cont--;

   return 1; /* Sucesso */
}
//Função para listar os elementos
int lista_todos(tLista L,int *vet,int cont,int flag)
{
   if (L.inicio == NULL) /* Lista vazia */
      return 0;
      
   int i;
   //Se caso a lista nao estiver ordenada
   if(flag == 0)
   {
      cout<<"A Lista nao esta ordenada, entre no menu 3 para tal \n\n";
     tNo *aux;
     aux = L.inicio; /* Para não perder o início da lista */
    while (aux)
    {
        cout << aux->info << " ";
        aux = aux->prox;
    }
    }
    else /* Se estiver ordenada */
    {
      for(i=0;i<cont;i++)
        cout<<vet[i]<<" ";
    }
   cout << endl << endl;
   return 1;
}
void inicializa_lista(tLista &L)
{
   L.inicio = NULL;
}
//Função que ordena a lista atraves do vetor
int ordena(tLista L, int cont,int *vet,int &flag)
{
    int o,i,aux;
    if(L.inicio == NULL)
      return 0;

  converte(vet,cont,L);
  for(i=0;i<cont;i++)
    for(o=0;o<cont;o++)
    if(vet[i] < vet[o])
    {
      aux = vet[i];
      vet[i] = vet[o];
      vet[o] = aux;
    }
    flag++;
    return 1;
}   
int main()
{
    int op, info,cont=0,vet[cont],flag=0;
   tLista L;
   inicializa_lista(L);
    bool exit = false;
    while(!exit)
    {
       op = menu();
       system("cls");
       switch(op)
       {
              case 1:
            cout <<"Entre com uma informacao do no:";
            cin >> info;
            if (!insere_na_lista(L, info,cont,flag))
              cout << "\n\nOverflow!";
            else
              cout << "\n\nSucesso na insercao!";
            break;
            case 2:
                    if(!repete(vet,L,cont))
                      cout<< "\n Lista vazia";
                break;     
            case 3:
                if(!ordena(L,cont,vet,flag))
                  cout << "\n Lista vazia!";
                else
                  cout << "\n Lista ordenada com sucesso!";
                break;
            case 4:
            if (!remove_da_lista(L,flag,cont)) 
              cout << "\n\nUnderflow!";
            else
              cout << "\n\nSucesso na remocao!";
            break;
              case 5:
            if (!lista_todos(L,vet,cont,flag))
               cout << "\n\nLista vazia!";
            break;
              case 6:
            cout << "\n\nSaindo...\n\n";
            exit = true;
             break;
              default:
               cout << "\n\nOpcao Invalida!";
          }
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}

É issu ai.. qualquer duvida poste Smile
avatar
C++MasTeR

Mensagens : 8
Data de inscrição : 20/04/2010
Localização : Microsoft Corporation

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