Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alessandra Canutto

lista encadeada

Recommended Posts

Pessoal eu to começando a estudar linguagem de programação agora estou com duvidas de como excluir dados específicos com lista encadeada, por favor se alguém puder me ajudar

 

segue o meu codigo

 

/* Crie um programa para criar uma lista dinâmica dos telefones celulares: marca, modelo, capacidade, cor, preco.
Peça que o usuário informe quantos telefones ele desejar, e ao final o programa deverá mostrar todos os dados do telefone mais barato,
se houver mais de um com o mesmo preço (sendo os mais baratos) mostrar, o que tem maior capacidade. */
// Crie um programa pra excluir o/os telefone que contiver o menor preço. Considere o programa realizado na atividade anterior.
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cstdio>
#include <iomanip>
#include <fstream>
#include <conio.h>
#include <string.h>
using namespace std;
typedef struct celular {
char marca[15], modelo[15], cor[10];
float capac, preco, menor_p;
int dado;
celular *proximo;
} Cel;
Cel *primeiro_aux = NULL;
float calcula(Cel *aux, float cel_barato)
{
float maior_c = 0;
while (aux != NULL) {
if (aux->preco == cel_barato) {
aux->menor_p = 1;
}
if (aux->menor_p == 1) {
if (maior_c < aux->capac) {
maior_c = aux->capac;
}
}
aux = aux->proximo;
}
return maior_c;
}
void imprime_cel(Cel *aux, float maior_c)
{
while (aux != NULL) {
if ((aux->menor_p == 1) && (aux->capac == maior_c)) {
cout<< "\tO celular mais barato e com maior capacidade eh: " <<endl <<endl;
cout<<"Marca: "<<aux->marca <<endl;
cout<<"Modelo: "<<aux->modelo <<endl;
cout<<"Cor: "<<aux->cor <<endl;
cout<<"Preco: "<<aux->preco <<endl;
cout<<"Capacidade: "<<aux->capac <<endl;
}
aux = aux->proximo;
}
}
void apaga_cel(int valor)
{
Cel *anterior = primeiro_aux, *auxiliar, *aux = primeiro_aux;
while (aux != NULL)
{
if (aux->dado == valor)
{
if (anterior != aux)
{
anterior->proximo = aux->proximo;
}
else
{
anterior = aux->proximo;
primeiro_aux = aux->proximo;
}
auxiliar = aux;
aux = aux->proximo;
delete auxiliar;
}
else
{
anterior = aux;
aux = aux->proximo;
}
}
}
int main()
{
Cel *aux_atual, *aux_anterior = NULL, *primeiro_aux = NULL;
char cel_marca[15],cel_modelo[15],cel_cor[10];
float cel_capac, cel_preco, menor_preco = 0, maior_cap = 0;
int cel_menor_p = 0, quant = 0, num;
while (quant <= 0) {
cout << "\tInforme a quantidade de celulares: ";
cin >> quant;
cout <<endl <<endl;
if (quant<=0){
cout << "Por favor informe um valor maior ou igual a 1" <<endl;
getch();
system ("cls");
}
else {
system ("cls");
getch();
}
}
do {
aux_atual = new celular;
fflush(stdin);
cout << "\t======= PESQUISA - CELULARES ========\t" <<endl <<endl;
cout << "Digite a marca do celular: ";
gets (cel_marca);
cout << "Digite o modelo: ";
gets (cel_modelo);
cout << "Digite a cor: ";
gets (cel_cor);
cout << "Digite o preco: ";
cin >> cel_preco;
cout << "Digite a capacidade em gigabytes: ";
cin >> cel_capac;
system ("cls");
getch();
strcpy(aux_atual->marca, cel_marca);
strcpy(aux_atual->modelo, cel_modelo);
strcpy(aux_atual->cor, cel_cor);
aux_atual->capac = cel_capac;
aux_atual->preco = cel_preco;
if (menor_preco == 0) {
menor_preco = cel_preco;
} else if (menor_preco > cel_preco) {
menor_preco = cel_preco;
}
aux_atual->menor_p = cel_menor_p;
aux_atual->proximo = NULL;
if (aux_anterior != NULL) {
aux_anterior->proximo = aux_atual;
}
aux_anterior = aux_atual;
if (primeiro_aux == NULL) {
primeiro_aux = aux_atual;
}
quant -= 1;
} while (quant > 0);
maior_cap = calcula(primeiro_aux, menor_preco);
imprime_cel(primeiro_aux, maior_cap);
getch();
system ("cls");
while (num != 1) {
cout <<"Insira o numero (1) para excluir da lista o celular mais barato: ";
cin>>num;
if (num == 1) {
apaga_cel(num);
cout <<"\nCelular excluido com sucesso!!!" <<endl <<endl;
}
else {
cout <<endl <<"Favor inserir o numero que se pede!!" <<endl;
getch();
system ("cls");
}
}
free(aux_atual);
getch();
cout << endl << endl;
system ("pause");
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

@@Alessandra Canutto

 

No caso de exclusões, você coloca um ponteiro para o elemento a ser excluído (ponteiro *P) e um ponteiro apontado para o elemento anterior (ponteiro *q).

Exemplo:

 

[...]

 

plista q p

\/ \/ \/

5 -> 3 -> 10 -> 1 -> 40 ->

 

E serão necessário apenas as seguintes instruções:

q->prox = p->prox;
free(p);

A função free(p) libera memória alocada para o elemento apontado por p.

 

 

*Talvez isso te ajude!

 

brHUE

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.