Problem in placing the delete option in the simple list chained in C

Asked

Viewed 61 times

0

How to put the delete option in the chained list by looking for the person’s name.

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


struct stNo {
     int info;
     char nome[50];
     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;
    char name[50], endereco[100], sexo, cidade[80], celular[11], 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("%i",&idade);
    //fflush(stdin);
    //printf("\nDigite sua idade:");
    //scanf("%c",&sexo);
    //fflush(stdin);
    //printf("\nDigite seu endereço:");
    //scanf(endereco);
    //fflush(stdin);
    //printf("\nDigite sua cidade:");
    //gets(cidade);
    //fflush(stdin);
    //printf("\nDigite seu celular:");
    //scanf(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);
     }
     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);
         };
};

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 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);
        };
     }
     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-Sair] ");
        printf("Opção:");
        scanf("%i",&menu);
        switch(menu){
            case 1 :    insereLista(&lista);
                        break;
            case 2 :    visualizarLista(&lista);
                        break;
            case 3 :    printf("\nSaindo...");
                        break;
            default:     printf("\nCódigo Inválido");
        }
        printf("\n");system("pause");
        }while(menu!=3);
}

No answers

Browser other questions tagged

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