Tipo abstrato de dados - ListSet

0 respostas
Soraynha

[size=12]Pessoal,
Alguém por gentileza, poderia me dar um norte de como implementar os tipos abstratos descritos nesta atividade? criei uma interface chamada ListSet e utilizei o implements nas classes ListSetArranjo e ListSetApontador. Mas não tenho certeza se devo estender de hashSet, ArrayList, ou seja to perdida. Sei que meu codigo ta confuso, mas vou postar para ver se alguém me ajuda com a lógica que devo usar. Já estou a alguns dias tentando codificar esta atividade.[/size]

Atividade:
Parte 01
Um Conjunto é definido como uma coleção arbitrária de elementos. Não existem elementos duplicados em um conjunto.
Algumas definições básicas de conjuntos:
- Elemento: é um componente ou instância de um conjunto.
- Pertinência: é uma característica dos elementos que pertencem a um conjunto.
- Cardinalidade: corresponde ao número de elementos de um conjunto.
Algumas operações podem ser definidas sobre conjuntos. Os resultados destas operações são também conjuntos.
- A união de dois conjuntos A e B, denotada por , é o conjunto definido como
- A interseção de dois conjuntos A e , denotada por , é o conjunto definido como
- A diferença do conjunto A pelo conjunto B, denotada por , é o conjunto definido como
- A diferença simultânea dos conjuntos A e B, denotada por , é o conjunto definido como

Uma Lista é definida como uma seqüência mutável de zero ou mais itens na forma A0, A1,?,An-1 onde n é o tamanho da lista e Ai são elementos de um determinado tipo, estruturados da seguinte forma:
- O elemento Ai está na i-ésima
- Ai precede Ai+1 (para 0 <= i < n-1)
- Ai+1 sucede Ai (para 0 <= i < n-2)
- O predecessor de A0 e o sucessor de An-1 não são definidos
Em uma Lista Ordenada os elementos possuem ainda a seguinte propriedade de ordem.
- A0

Pede-se:

1) Implemente os Tipos Abstrato de Dados ListSet e OrderedListSet. Você deverá apresentar duas implementações para cada TAD: uma com arranjos e outra com apontadores. O TAD ListSet possue as propriedades dos Conjuntos e das Listas e TAD OrderedListSet possue as propriedades dos Conjuntos e das Listas Ordenadas.

Os TADs devem possuir pelo menos os seguintes métodos públicos:
boolean isEmpty()
int size()
void addElement (Object elem)
void removeElementAt (Object elem, int index) throws OutOfBoundsException
Object elementAt(int index) throws OutOfBoundsException
ListSet union(ListSet set)
ListSet intersection(ListSet set)
ListSet difference(ListSet set)
ListSet symDif(ListSet set)

Nota: Para o TAD OrderedListSet substitua o tipo Object pelo tipo Comparable nas assinaturas dos diversos métodos.

2) Defina a complexidade assintótica do pior e do melhor caso dos diversos métodos públicos dos TAD ListSet e OrderedListSet para ambas as representações (arranjos e apontadores).

3) Você foi contratado para fazer um estudo mercadológico dos clientes de duas lojas em um determinado ramo de negócio. Para efeito deste estudo, criou-se a seguinte classificação para os clientes:
Cliente Oportunista: Procura sempre a melhor oportunidade de negócio, isto é, compra sempre na loja com o melhor preço.
Cliente Fiel: Compra sempre na mesma loja.
Você está recebendo dois arquivos texto com a relação dos clientes de duas lojas distintas e um arquivo Java com o tipo Cliente. Complemente o código da classe Cliente com o código necessário.
Você deverá criar uma aplicação que leia os arquivos com os nomes dos clientes de cada loja e apresente os seguintes relatórios:
A lista de todos os clientes.
A lista de todos os clientes Fiéis?
A lista de todos os Clientes Oportunista?
A lista dos Clientes Fiéis somente da Loja A.

Apresente também os mesmos relatórios com os clientes listados em ordem alfabética.

Notas:
a) A sua aplicação deverá utilizar os tipos ListSet e OrderedListSet.
b) Os elementos adicionados as listas-conjuntos devem ser instâncias da classe Cliente.
c) Entregue uma aplicação que utilize a representação dos tipos com arranjos e outra que utilize a versão com apontadores.

package tda;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**
 *
 * @author Soraya
 */
public class ListSetArranjo extends HashSet<Object>implements ListSet{
   
   protected List list = new ArrayList();
   
   public ListSetArranjo(final ListSet listSet) {
      // Não aceita itens duplicados
      int size = listSet.size();
      for (int i=0; i<size; i++) {
         Object obj = listSet.get(i);
         if (listSet.indexOf(obj) != listSet.lastIndexOf(obj)) {
            throw new IllegalArgumentException
               ("A lista contém itens duplicados");
         }
      }
     // this.list = listSet.list;
   }
   
   public ListSetArranjo() {
      this(new ListSetArranjo());
   }
   
    public boolean isEmpty() {
        return this.list.isEmpty();
    }

    public int size() {
        return this.list.size();
    }
   
    public void addElement(Object elem) {
       if (!this.list.contains(elem)){
         this.list.add(elem);    
       }       
    }
   
    public void removeElementAt(Object elem, int index) {
     if (!this.list.remove(elem)){
      throw new ArrayIndexOutOfBoundsException(index);      
     } 
    }
  
    public Object elementAt(int index){
      int i = 0;  
      Iterator iter = this.list.iterator();  
      while (i < index) {  
            i++;  
            iter.next();  
      }  
      return iter.next();
    }
    
    public ListSet union(ListSet set) {
      ListSet u = new ListSetArranjo(set);  // Copia o conjunto atual   
      u.addAll(set); // Adiciona o segundo conjunto  
      return u;    // Retorna um novo conjunto com a união.  
    }

    public ListSet intersection(ListSet set) {
      ListSet i = new ListSetArranjo(set);  // Copia o conjunto atual   
      i.retainAll(set); // pega os itens em comum  
      return i;    // Retorna um novo conjunto com a interseção.
    }
    
    public ListSet difference(ListSet set) {
      ListSet d = new ListSetArranjo(set);  // Copia o conjunto atual   
      d.removeAll(set); // remove os itens do segundo conjunto  
      return d;    // Retorna um novo conjunto com a diferença.       
    }

    public ListSet symDif(ListSet set) {
        ListSet s = new ListSetArranjo(set);// Copia o conjunto atual
        s.addAll (set);// Adiciona o segundo conjunto
        ListSet tmp = new ListSetArranjo(set);// Copia o conjunto atual no bkp
        tmp.retainAll (set);// pega os itens em comum
        s.removeAll (tmp);// remove os itens em comum
        return s;
    }
Criado 18 de maio de 2013
Respostas 0
Participantes 1