Listas Lineares

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

Listas Lineares

Mensagem  Renancr em Qua 29 Set 2010 - 22:08

Implementar

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

const int N = 5; // máximo de elementos (nós)

struct tNo{
         int chave;
         char nome[30];
         char endereco[100];
      };
tNo L[N]; // Lista de nós
int k=0; //número de elementos inseridos na lista

  • A função main contendo o seguite menu:
    1- Inserir um elemento na lista
    2- Remover um elemento da lista
    3- Sair



  • Utilize a função insere.


Código:
int insere (tNo y, tNo L[N], int &k)
{
   if (k < N)
   {
      if(busca(L, k, y.chave) == -1) // não encontrou
      {
         L[k] = y;
         k++;
         return 1; // sucesso na inserção
      }
      return -1; // Elemento existente!
   }
   else
      return 0; // overflow: limite máximo alcançado
}

  • Utilize a função busca.


Código:
int busca( tNo L[N], int k, int x)
{
   int i=0;

   while ( i < k )
      if (L[i].chave == x)
         return i; // retorna o índice
      else
         i++;
   return -1; // não encontrou
}

  • Utilze a função de remoção.


Código:
int remove(tNo y, tNo L[N], int &k)
{
   int j, pos;
   if (k == 0) // underflow: lista vazia
      return 0;
   pos = busca(L, k, y.chave);
   if (pos == -1) // não encontrou a chave
      return -1;
   for (j=pos; j < k-1; j++)
      vet[j] = vet[j+1];
   k--; // decrementa a quantidade de elementos
   return 1; /

Resolução:

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

const int N = 5; // máximo de elementos (nós)

struct tNo{
        int chave;
        char nome[30];
        char endereco[100];
      };
tNo L[N]; // Lista de nós
int k=0; //número de elementos inseridos na lista

int menu();
int insere (tNo y, tNo L[N], int &k);
int remove(tNo y, tNo L[N], int &k);
int busca( tNo L[N], int k, int x);

void main()
{
   int op;
   
   do{
      op=menu();
      
      if(op == 1)
      {
         insere (y, L, k);   
      }
      else
      {
         remove(y, L, k);
      }
   }while(op != 3);
}

int menu()
{
   int op;

   do{
      system("cls");
      cout<< "============================================\n";
      cout<< "\t1- Inserir um elemento na lista\n";
      cout<< "\t2- Remover um elemento da lista\n";
      cout<< "\t3- Sair\n";
      cout<< "============================================\n";
      cout<< "\n\tDigite a opcao desejada.\n\t";
      cin>> op;
      if(op < 1 || op > 3)
      {
         system("cls");
         cout<< "Opcao invalida digite novamente.\n";
         system("pause");
      }
   }while(op < 1 || op > 3);

   return op;
}

int insere (tNo y, tNo L[N], int &k)
{
  if (k < N)
  {
      if(busca(L, k, y.chave) == -1) // não encontrou
      {
        L[k] = y;
        k++;
        return 1; // sucesso na inserção
      }
      return -1; // Elemento existente!
  }
  else
      return 0; // overflow: limite máximo alcançado
}

int remove(tNo y, tNo L[N], int &k)
{
  int j, pos;
  if (k == 0) // underflow: lista vazia
      return 0;
  pos = busca(L, k, y.chave);
  if (pos == -1) // não encontrou a chave
      return -1;
  for (j=pos; j < k-1; j++)
      vet[j] = vet[j+1];
  k--; // decrementa a quantidade de elementos
  return 1; // sucesso na remoção
}

int busca( tNo L[N], int k, int x)
{
  int i=0;

  while ( i < k )
      if (L[i].chave == x)
        return i; // retorna o índice
      else
        i++;
  return -1; // não encontrou
}

Versão Dev-C++:
Código:
#include <iostream>
#include <string.h>
using namespace std;

const int N = 5; // máximo de elementos (nós)

struct tNo{
        int chave;
        char nome[30];
        char endereco[100];
      };
tNo L[N]; // Lista de nós
int k=0; //número de elementos inseridos na lista

int menu();
int insere (tNo y, tNo L[N], int &k);
int remove(tNo y, tNo L[N], int &k);
int busca( tNo L[N], int k, int x);

int main()
{
    int op;
    tNo y;
    do{
        op=menu();
        if(op == 1)
        {
              insere (y, L, k); 
        }
        else
            if(op == 2)
            {
                  remove(y, L, k);
            }
  }while(op != 3);
    return EXIT_SUCCESS;
}

int menu()
{
  int op;

  do{
      system("cls");
      cout<< "============================================\n";
      cout<< "\t1- Inserir um elemento na lista\n";
      cout<< "\t2- Remover um elemento da lista\n";
      cout<< "\t3- Sair\n";
      cout<< "============================================\n";
      cout<< "\n\tDigite a opcao desejada.\n\t";
      cin>> op;
      if(op < 1 || op > 3)
      {
        system("cls");
        cout<< "Opcao invalida digite novamente.\n";
        system("pause");
      }
  }while(op < 1 || op > 3);

  return op;
}

int insere (tNo y, tNo L[N], int &k)
{
  if (k < N)
  {
      if(busca(L, k, y.chave) == -1) // não encontrou
      {
        L[k] = y;
        k++;
        return 1; // sucesso na inserção
      }
      return -1; // Elemento existente!
  }
  else
      return 0; // overflow: limite máximo alcançado
}

int remove(tNo y, tNo L[N], int &k)
{
  int j, pos, vet[N];
  if (k == 0) // underflow: lista vazia
      return 0;
  pos = busca(L, k, y.chave);
  if (pos == -1) // não encontrou a chave
      return -1;
  for (j=pos; j < k-1; j++)
      vet[j] = vet[j+1];
  k--; // decrementa a quantidade de elementos
  return 1; // sucesso na remoção
}

int busca( tNo L[N], int k, int x)
{
  int i=0;

  while ( i < k )
      if (L[i].chave == x)
        return i; // retorna o índice
      else
        i++;
  return -1; // não encontrou
}
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