Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com lista circular


Marcos Sales

Pergunta

Galera, to precisando de uma forte ajuda com esse código que eu estava montando e fico extremamente grato se vocês puderem me ajudar com seus conhecimentos .

Preciso fazer uma remoção de lista circular, vou publicar o código abaixo 

 

#include <iostream>
using namespace std;

struct no
{
    int info;
    struct no*prox;
    struct no*ant;
};

typedef struct no* noPtr;
noPtr inicio = NULL;
noPtr fim = NULL;


// Escopo das funcoes

int menu();
bool listaVazia();
void inserir();
void listar();
void remover();
//bool achei();

// termino do escopo

int main()
{
    int valor;
    do
    {
        valor = menu();
        switch(valor)
        {
        case 1:
            inserir();
            break;
        case 2:
            listar();
            break;
        case 3:
            remover();
            break;
        case 0:
            break;
        }
    }
    while(valor != 0);

    return 0;
}


int menu()
{
    int op;
    cout << "Digite um numero para comecar\n ";
    cout << "Digite 1 para inserir " << endl;
    cout << "Digite 2 para listar " << endl;
    cout << "Digite 3 para remover " << endl;

    cin >> op;
    return op;

}

bool listaVazia()
{
    if(inicio == NULL)
        return true;
    else
    {
        return false;
    }
}

void inserir ()
{
    noPtr p = new no;
    cout << "Digite um numero que queira inserir na lista " << endl;

    cin >> p->info;

    if(listaVazia())
    {
        inicio = p;
        p->prox = fim;
        p->ant = fim;  // lista circular retorna a ela mesmo, no caso ao inicio;

    }
    else
    {
        p->prox = inicio;
        inicio ->ant = p;
        p->ant = inicio;
        inicio = p;

    }
}

void listar()
{
    noPtr p = inicio;

    if(!listaVazia())
    {
        while(p != fim)
        {
            cout << p->info << endl;
            p = p->prox;
        }
    }
    else
    {
        cout << "Lista Vazia ! \n";
    }

}

void remover()
{
    int num;
    cout << "Digite um numero que queira remover, caso ele exista " << endl;
    cin >> num;
    noPtr p = inicio;

    if(!listaVazia())
    {
        while(p->prox != fim)
        {
            if(num == p->info)
            {
                if(p->prox == fim)
                {
                    p->ant ->prox = fim;
                    delete(p);
                }
                if(p->ant == fim)
                {
                    p->prox->ant = fim;
                    p->ant -> prox = p->prox;
                    p->ant -> prox = inicio;
                    delete(p);
                }
                if(p->prox != fim && p->ant != fim)
                {
                    p->ant -> prox = p-> prox;
                    p->prox ->ant = p->ant;
                    delete(p);
                }
            }
            p = p->prox;
        }
    }
    else
    {
        cout << "Lista Vazia\n";
    }
}
/*
bool achei()
{
    noPtr p = inicio;

    while(p->prox != fim)
    {
        if(p->info == num)
        {
            return true;
        }
        p = p->prox;
    }
    return false;
}
*/

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...