List sorted C ++ struct

0

I need to do a job with this struct and it contains insert, search and delete by year and impression. Only I'm with doubt in the following code. I need it right after the insert is sorted.

struct mundial{
   int ano;
   char sede[10];
   char campeao[10];
struct mundial *prox;
};
struct mundial *inicio;
void iniciaLista (){
    inicio = NULL;
}
bool testaListaVazia (){
     return (inicio == NULL);
}
void insereLista(int dado1, char dado2, char dado3){
     struct mundial *pt;
     pt = new struct mundial;
     pt -> ano = dado1; 
     pt -> sede[10] = dado2;
     pt -> campeao[10] = dado3;
     pt -> prox = NULL;
     if(testaListaVazia()){
       inicio = pt;
     }else {
       pt -> prox = inicio;
       inicio = pt;
     }
       return 1;
}
void viewInsere(){
     int t,x;
     char sd[10];
     char cp[10];
     cout<<"\nDigite o ano:";
     cin>> t;
     cout << "\n Digite a sede:";
     cin >> sd[10];
     cout << "\nDigite o campeao:";
     cin >> cp[10];
     x = insereLista(t,sd,cp);
     if (x!=1) {
        cout<<"Erro na insercao";
     }else {
              cout<<" inserido com sucesso!";
     }
 }

What am I doing wrong?

When I arrive at headquarters he closes the program void viewInsere(){ int t,x; char *sd; char *cp; cout<<"\nDigite o ano:"; cin>> t; cout << "\nDigite a sede:"; cin >> *sd; cout << "\nDigite o campeao:"; cin >> *cp; x = insereLista(t, sd, cp); if (x!=1) { cout<<"Erro na insercao"; }else { cout<<" inserido com sucesso!"; } }

    
asked by anonymous 29.05.2018 / 19:52

1 answer

2

There are some things wrong with your code, the unordered list would be like this

struct mundial {
    int ano;
    const char* sede; //usar ponteiro em vez de array
    const char* campeao; //usar ponteiro em vez de array
    struct mundial *prox;
};

struct mundial *inicio = NULL;

bool insereLista(int dado1,const char *dado2, const char *dado3) { //usar const char*
    struct mundial *pt;
    pt = new struct mundial;
    pt->ano = dado1;
    pt->sede = dado2;
    pt->campeao = dado3;
    pt->prox = NULL;
    if (testaListaVazia()) {
        inicio = pt;
    } else {
        pt->prox = inicio;
        inicio = pt;
    }
    return true;
}

void main() {
    insereLista(2018, "Unesp", "Diogo");
    insereLista(2014, "USP", "Luiz");
    insereLista(2016, "Unicamp", "Carol");
    insereLista(2020, "Uninter", "Beatriz");
}

For the main code, the result would be

2020 - Uninter - Beatriz
2016 - Unicamp- Carol
2014 - USP- Luiz
2018 - Unesp- Diogo

For the ordered list would be this:

bool insereLista(int dado1,const char *dado2, const char *dado3) {
    struct mundial *pt;
    pt = new struct mundial;
    pt->ano = dado1;
    pt->sede = dado2;
    pt->campeao = dado3;
    pt->prox = NULL;

    struct mundial *leitor = inicio;
    struct mundial *anterior = nullptr;

    while (leitor != nullptr && leitor->ano < dado1) {
        anterior = leitor;
        leitor = leitor->prox;
    }

    if (leitor != nullptr) {
        if (anterior == nullptr) {
            pt->prox = inicio;
            inicio = pt;
        } else {
            anterior->prox = pt;
            pt->prox = leitor;
        }
    } else {
        if (anterior == nullptr) {
            inicio = pt;
        } else {
            anterior->prox = pt;
        }
    }

    return true;
}

The result would be ordered:

   2014 - USP- Luiz
   2016 - Unicamp- Carol
   2018 - Unesp- Diogo
   2020 - Uninter - Beatriz

To print you can do the following (for iostream):

void print() {
    struct mundial *leitor = inicio;
    while (leitor != nullptr) {
        cout << leitor->ano << " - " << leitor->sede << " - " << leitor->campeao << endl;
        leitor = leitor->prox;
    }
}

or (for stdafx.h)

void print() {
    struct mundial *leitor = inicio;
    while (leitor != nullptr) {
        printf("%d - %s - %s\n", leitor->ano, leitor->sede, leitor->campeao);
        leitor = leitor->prox;
    }
}

Using your ViewInsere you could use the following for 4 inputs, for example:

void viewInsere() {
    int t, x;

    char *sd = (char*)malloc(sizeof(char) * 10);
    char *cp = (char*)malloc(sizeof(char) * 10);
    std::cout << "\nDigite o ano:";
    std::cin >> t;
    std::cout << "\nDigite a sede:";
    std::cin >> sd;
    std::cout << "\nDigite o campeao:";
    std::cin >> cp;
    x = insereLista(t, sd, cp);
    if (x != 1) {
        std::cout << "Erro na insercao";
    } else {
        std::cout << " inserido com sucesso!";
    }
}

void main() {
    viewInsere();
    viewInsere();
    viewInsere();
    viewInsere();

    print();

    system("pause");
}

Source:

Cadilag

    
29.05.2018 / 21:16