Ir ao conteúdo
  • Cadastre-se

C++ Preciso criar uma função de remover


Jotape2820

Posts recomendados

#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

typedef struct site{
	char nome[30];
}Cliente;

typedef struct no{
	Cliente info;
	struct no * prox;
}Lista;

Lista * criarLista(){
	return NULL;
}
void InserirInicio(Lista **lista,Cliente cl){
	Lista *novo=(Lista *) calloc(1,sizeof(Lista));
	novo->info=cl;
	novo->prox = *lista;
	*lista=novo;
}


int main(){
	int cnt=0,a=1,b=0;
	Lista * lista;
	Cliente cl;
	Cliente *cp;
	char nome[30];
	lista = criarLista();
    string listaAnt[a];

while(1){
	string operacao;
	cin>>operacao;
	if(operacao == "CUR"){
		if(b==0){
		printf("%s\n",&cl.nome);
		}
	}
	if(operacao == "OPN"){
		scanf("%s",cl.nome);
        InserirInicio(&lista,cl);
		cnt++;
		cout<<cnt<<"\n";
	}if(operacao=="PAN"){
        cout<<cnt<<"\n";
    }if(operacao == "END"){
		return 0;
	}
	
  }
}

Bom dia galera preciso criar uma função de remover para a seguinte linked list,alguem pode me ajudar?


 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

typedef struct no
{
	Cliente    info;
	struct no* prox;

}   Lista;

Uma lista não é um nó. Declarar uma como tal só vai complicar o programa. No entanto parece que é o comum.

 

Veja uma alternativa comum --- ou como eu acho que devia ser comum --- de uma implementação de lista, com os protótipos a seguir:

struct no
{
    void*      item;
    struct no* proxima;
    struct no* anterior;
};  // no
typedef struct no Node;

struct a_propria_lista
{
    char*     nome;
    unsigned  quantos;
    unsigned  maximo;
    Node*     inicio;
    Node*     fim;
};
typedef struct a_propria_lista Lista;

Lista*      apagar(Lista*);
Lista*      criar(const char*);
int         define_maximo(Lista* l, const unsigned);
Lista*      inserir_na_ordem(void*, Lista*, int(*)(void*, void*));
Lista*      inserir_no_inicio(void*, Lista*);
Lista*      inserir_no_final(void*, Lista*);
int         listar(Lista*);
int         listar_do_seu_jeito(Lista*, int(*)(void*));
int         maximo(Lista*);
Node*       primeiro(Lista*);
Lista*      remover(void*, Lista*);
int         tamanho(Lista*);
Node*       ultimo(Lista*);
int         vazia(Lista*);

Comparando:

 

- a estrutura Lista tem uma série de Nodes. Mas também tem uns contadores e até um nome. Então quando você declara algo como 

	Lista* lista = criar("Minha primeira lista");

você tem já os ponteiros pro início e fim, mais um limite pro número de nodes, um contador do total atual e tal. Já pode chamar funções como tamanho(), vazia(), ultimo() e listar() e tudo anda.

 

- Como a Lista é de Nodes o único ponteiro que você usa fora da Lista no programa todo é para a Lista. Tudo fica mais fácil.

 

- Como o Node tem apenas um void* item; a sua Lista funciona para qualquer coisa. Não precisa sequer compilar lista.c para usar a lista. Pode só deixar compilado e ir usando até achar um erro um dia.

 

De volta ao seu programa

 

Talvez devesse usar Lista* nos parâmetros e não Lista** e retornar os endereços, como no exemplo acima. Mas como fez vai funcionar também. A primeira função que deve escrever é a que lista os elementos, na tela. Uma função de teste. Antes mesmo de escrever a lista. Precisar ter uma referência pra testar afinal

void Listar(Lista** lista);

Depois declare a função 

void Apagar(Cliente cliente, Lista** lista);

E copie a implementação dela da implementação de Listar() porque é a mesma. Para apagar você tem que navegar pela lista e achar o Node correto. A mesma coisa que faz ao listar os elementos. Só que quando acha o elemento a apagar você acerta os ponteiros: antes dele pode ter alguém, depois dele pode ter alguém. Então você corrige os ponteiros: o que vem antes dele passa a apontar para o que vem depois. E o que vem depois passa a apontar para o que vinha antes. E aí você apaga o cara e libera a memória correspondente. E cuida dos casos particulares de não ter sucessor ou não predecessor ou não ter nenhum dos dois.

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...