Como faço para colocar a opção excluir em lista simples encadeada em C

0 respostas
c
R

Boa noite, alguém pode me ajudar a colocar a opção excluir nesse código, tem que procurar pelo nome da pessoa e fazer a exclusão, segue o que eu conseguir fazer até agora.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <locale.h>

struct stNo {

int info, idade, celular;

char nome[100],endereco[100], sexo, cidade[80], email[40];

struct stNo *prox;

};
struct stNo *cria_no() {

struct stNo *p;

if ((p = (struct stNo *) malloc(sizeof(struct stNo))) == NULL)

return NULL;

else {

p->prox = NULL;

return p;

}

}
void insereLista(struct stNo **list){

struct stNo *p,*q;

int n, idade, celular;

char name[100], endereco[100], sexo, cidade[80], email[40];

fflush(stdin);

printf("\nDigite o valor do nó:");

scanf("%i",&n);

fflush(stdin);

printf("\nDigite o nome:");

gets(name);

fflush(stdin);

//printf("\nDigite o seu sexo [F][M]:");

//scanf("%c",&sexo);

//fflush(stdin);

//printf("\nDigite sua idade:");

//scanf("%i",&idade);

//fflush(stdin);

//printf("\nDigite seu endereço:");

//gets(endereco);

//fflush(stdin);

//printf("\nDigite sua cidade:");

//gets(cidade);

//fflush(stdin);

//printf("\nDigite seu celular:");

//scanf("%i",&celular);

//fflush(stdin);

//printf("\nDigite seu e-mail:");

//gets(email);

//fflush(stdin);

if(*list==NULL){ //lista vazia

p = cria_no();

*list = p;

p->prox = NULL;

p->info = n;

strcpy(p->nome,name);

p->sexo=sexo;

p->idade=idade;

strcpy(p->endereco,endereco);

strcpy(p->cidade,cidade);

p->celular=celular;

strcpy(p->email,email);

}

else{

p=*list;

while(p->prox!=NULL)

p=p->prox;// posiciona no final da lista

q = cria_no();

p->prox = q;

q->prox = NULL;

q->info = n;

strcpy(q->nome,name);

*list = q;

};

};

void mostraLista(struct stNo **list){

struct stNo *p;

if(*list!=NULL){

p=*list;

while(p->prox!=NULL){

printf(" %d->",p->info);

p = p->prox;

};

printf(" %d->",p->info);

}

else printf("\nLista Vazia");

};

void excluirLista(struct stNo **list){

struct stNo *p,*q;

int n;

char name[100];

if(*list!=NULL){ //lista vazia

p = *list;

while (p->prox!=NULL && strcmp(p->nome, name) != 0) {

p = p->prox;

};

if(strcmp(p->nome, name) == 0){

printf("\nCódigo: %d",p->info);

printf("\nNome: %s",p->nome);

if(p->prox==NULL){

free§;

*list =NULL;

}else{

while(p->prox!=NULL){

q=p;

p=p->prox;

}

q->prox=NULL;

free§;
else{

q=p->prox;

free§;

*list=q;

}

else{

q->prox=NULL;

free§;

}

}else{

printf("\nLista Vazia");

}

};
void visualizarLista(struct stNo **list){

struct stNo *p;

int n;

char name[100];

fflush(stdin);

printf("\nDigite o nome:");

gets(name);

fflush(stdin);

if (*list!=NULL) {

p = *list;

while (p->prox!=NULL && strcmp(p->nome, name) != 0) {

p = p->prox;

};

if(strcmp(p->nome, name) == 0){

printf("\nCódigo: %d",p->info);

printf("\nNome: %s",p->nome);

//printf("\nSexo: %c",p->sexo);

//printf("\nIdade: %d",p->idade);

//printf("\nEndereço: %s",p->endereco);

//printf("\nCidade: %s",p->cidade);

//printf("\nCelular: %i",p->celular);

//printf("\nE-mail: %s",p->email);

};

}

else printf("\nLista Vazia");

};
main(){

setlocale(LC_ALL,Portuguese);

struct stNo *lista;

int menu;

lista = NULL; // inicializando a lista vazia
do{

system(“cls”);

printf("\n");

mostraLista(&lista);

printf("\n\n");

printf("[1-Inserir] “);

printf(”[2-Visualizar] “);

printf(”[3-Excluir] “);

printf(”[4-Sair] “);

printf(“Opção:);

scanf(”%i",&menu);

switch(menu){

case 1 : insereLista(&lista);

break;

case 2 : visualizarLista(&lista);

break;

case 3 : excluirLista(&lista);

break;

case 4 : printf("\nSaindo…");

break;

default: printf("\nCódigo Inválido");

}

printf("\n");system(pause);

}while(menu!=3);

}
Criado 27 de novembro de 2020
Respostas 0
Participantes 1