C++: Add an integer variable in an ordered way in a list

Asked

Viewed 40 times

1

I need to add integers in an orderly way, within a list implementation that I developed.

//Implementação dos nós para serem usados na lista
NodeList::NodeList(int dataa){
    this->next = NULL;
    this->data = dataa;
}

//Retorna o próximo vértice da lista
NodeList* NodeList::get_next(){
    return next;
}

//Altera o próximo elemento da lista com o parâmetro
void NodeList::add(NodeList* data){
    next = data;
}

//Lista de adjacência  

//Implementação da estrutura de dados lista de adjacência 
ListaAdjacencia::ListaAdjacencia(int node){
    top = new NodeList(node);
    last = top;
}

//Retorna true se encontrar o vertice do parametro na lista
bool ListaAdjacencia::search(int i){
    NodeList* nodee = top;
    while (nodee != NULL)
    {
        int c = nodee->get();
        if (c == i)
        {
            return true;
        }
        nodee = nodee->get_next();
    }
    return false;
}

//Adiciona um vértice a lista de maneira não ordenada
bool ListaAdjacencia::add(int data){
    cout<<"adicionando " <<data<< " a lista de maneira não ordenada\n"<<endl;
    if(!search(data)){
        NodeList* new_node = new NodeList(data);
        if (top == NULL)
        {
            top = new_node;
            last = new_node;
        }else{
            last->add(new_node);
            this->last = new_node;
        }
        sizee +=1;
        return true;        
    }
    return false;
}

Next, my attempt to create the add method, so that the nodes are ordered.


bool ListaAdjacencia::addOrdenada(int data){
   cout<<"adicionando " <<data<< " a lista ordenadamente\n"<<endl;
   if(!search(data)){
       if (top == NULL)
       {
           NodeList *new_node = new NodeList(data);
           top = new_node;
           last = new_node;
       }else{
           NodeList node = *top;
           NodeList previu = *top;
           if (top->get() > data)
           {
               NodeList *temp = top;
               top = new NodeList(data);
               top->add(temp);
               sizee +=1;
           }else if(last->get() < data){
               NodeList NodeNew(data);
               last->add(&NodeNew);
               last = &NodeNew;
               sizee +=1;
           }else{
               for (int i = 0; i < size(); i++)
               {
                   if (node.get() > data)
                   {
                       NodeList NodeNew(data);
                       previu.add(&NodeNew);
                       NodeNew.add(&node);                   //possível problemas com ponteiros?
                       sizee +=1;
                       break;
                   }
               previu = node;
               node = *node.get_next();
               }
           }
       }
       return true;        
   }
   return false;

}

But when I carry out these instructions:

 ListaAdjacencia lista(5);
    lista.addOrdenada(9);
    lista.addOrdenada(4);
    lista.addOrdenada(13);
    lista.addOrdenada(11);
    lista.addOrdenada(7);

    lista.show();

The console prints:

Lista:
4
5
13
  • Please post a complete program that can be compiled.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.