Ir ao conteúdo
  • Cadastre-se

Jouy Durão

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

posts postados por Jouy Durão

  1. Oi! Sou novo no fórum, e já venho pedindo ajuda =P
    Mas é o seguinte, tenho que entregar esse exercício até quinta, e por me enrolar estudando cálculo, GA e física, acabei deixando pra última hora esse exercício! D:
    Esse é o cabeçalho do exercício:

    Escrever um programa para gerenciar passagens reservadas:
    O programa deve mostrar um menu com 4 opções,
    1 - Reservar Passagem
    2 - Cancelar Passagem
    3 - Verificar Passagem Reservada
    4 - Mostrar Passageiros
    
    A informação deve ser armazenada em uma lista, com nomes em ordem alfabética.
    Cada passageiro pode reservar apenas uma vez.

    O programa deve ser em C.
    Deve ser feito utilizando Listas Simplesmente Encadeadas.
    Estou utilizando o CodeBlocks.

    Como base, tenho o seguinte código:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct elemento{
        int dado;
        struct elemento *proximo;
    } Elemento;
    
    typedef struct listasimples{
        Elemento *inicio;
        int tamanho;
    } ListaSimples;
    
    ListaSimples *inicializaLista()
    {
        ListaSimples *l;
        l = (ListaSimples *)malloc(sizeof(ListaSimples));
        l->inicio = NULL;
        l->tamanho = 0;
        return l;
    }
    
    void colocaDado(int d, ListaSimples *l, int pos){
    
        Elemento *andarilho = l->inicio;
        Elemento *anterior = NULL;
    
        Elemento *novoDado;
        novoDado = (Elemento *)malloc(sizeof(Elemento));
        novoDado->dado = d;
    
        int i = 0;
        while(andarilho != NULL && i < pos) {
            anterior = andarilho;
            andarilho = andarilho->proximo;
            i++;
        }
    
        if (anterior == NULL){
            novoDado->proximo = l->inicio;
            l->inicio = novoDado;
        }
        else{
            anterior->proximo = novoDado;
            novoDado->proximo = andarilho;
        }
    
        l->tamanho++;
    
    }
    
    int retiraDado(ListaSimples *l,int pos) {
        if (l->inicio == NULL){
            printf("A lista esta vazia, não há o que retirar! \n");
            return 0;
        }
        else {
    
            Elemento *andarilho = l->inicio;
            Elemento *anterior = NULL;
            Elemento *retirado;
            retirado = (Elemento *)malloc(sizeof(Elemento));
    
            int i = 0;
            while(i < pos) {
                anterior = andarilho;
                andarilho = andarilho->proximo;
                i++;
            }
    
            retirado = andarilho;
            int saida = retirado->dado;
    
            if (anterior == NULL) {
                l->inicio = andarilho->proximo;
            }
            else{
                anterior->proximo = andarilho->proximo;
            }
            free(retirado);
            return saida;
        }
    }
    
    void imprimeListaSimples(ListaSimples *l) {
        Elemento *iterador;
        iterador = l->inicio;
    
        if (iterador == NULL) {
            printf("Lista vazia!");
        }
        else{
            while (iterador != NULL) {
                printf("%i",iterador->dado);
                iterador = iterador->proximo;
            }
        }
    	printf("\n");
    }
    
    void limpaListaSimples(ListaSimples *l) {
        Elemento *iterador, *anterior;
        iterador = l->inicio;
        anterior = NULL;
    
        if (iterador == NULL) {
            printf("Lista vazia!");
        }
        else{
            while (iterador != NULL) {
                anterior = iterador;
                iterador = iterador->proximo;
                free(anterior);
            }
        }
        l->inicio = NULL;
    }
    
    int main(void)
    {
        ListaSimples *l = inicializaLista();
        colocaDado(1,l,0);
        imprimeListaSimples(l);
        colocaDado(2,l,1);
        imprimeListaSimples(l);
        colocaDado(3,l,1);
        imprimeListaSimples(l);
        colocaDado(4,l,2);
        imprimeListaSimples(l);
        retiraDado(l,0);
        imprimeListaSimples(l);
        retiraDado(l,0);
        imprimeListaSimples(l);
        colocaDado(5,l,0);
        imprimeListaSimples(l);
        colocaDado(6,l,0);
        imprimeListaSimples(l);
        retiraDado(l,0);
        imprimeListaSimples(l);
        retiraDado(l,2);
        imprimeListaSimples(l);
        retiraDado(l,1);
        imprimeListaSimples(l);
        retiraDado(l,0);
        imprimeListaSimples(l);
        retiraDado(l,0);
        return 0;
    }

     

    e meu código está atualmente assim:
     

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <strings.h>
    
    typedef struct elemento{
        char nome[20];
        int dado;
        struct elemento *proximo;
    } Elemento;
    
    typedef struct listasimples{
        Elemento *inicio;
        int tamanho;
    } ListaSimples;
    
    ListaSimples *inicializaLista()
    {
        ListaSimples *l;
        l = (ListaSimples *)malloc(sizeof(ListaSimples));
        l->inicio = NULL;
        l->tamanho = 0;
        return l;
    }
    
    void colocaDado(char d, ListaSimples *l, int pos){
    
        Elemento *andarilho = l->inicio;
        Elemento *anterior = NULL;
    
        Elemento *novoDado;
        novoDado = (Elemento *)malloc(sizeof(Elemento));
        novoDado->nome[20] = d;
    
        int i = 0;
        while(andarilho != NULL && i < pos) {
            anterior = andarilho;
            andarilho = andarilho->proximo;
            i++;
        }
    
        if (anterior == NULL){
            novoDado->proximo = l->inicio;
            l->inicio = novoDado;
        }
        else{
            anterior->proximo = novoDado;
            novoDado->proximo = andarilho;
        }
    
        l->tamanho++;
    
    }
    
    int retiraDado(ListaSimples *l,int pos) {
        if (l->inicio == NULL){
            printf("A lista esta vazia, não há o que retirar! \n");
            return 0;
        }
        else {
    
            Elemento *andarilho = l->inicio;
            Elemento *anterior = NULL;
            Elemento *retirado;
            retirado = (Elemento *)malloc(sizeof(Elemento));
    
            int i = 0;
            while(i < pos) {
                anterior = andarilho;
                andarilho = andarilho->proximo;
                i++;
            }
    
            retirado = andarilho;
            int saida = retirado->dado;
    
            if (anterior == NULL) {
                l->inicio = andarilho->proximo;
            }
            else{
                anterior->proximo = andarilho->proximo;
            }
            free(retirado);
            return saida;
        }
    }
    
    void imprimeListaSimples(ListaSimples *l) {
        Elemento *iterador;
        iterador = l->inicio;
    
        if (iterador == NULL) {
            printf("Lista vazia!");
        }
        else{
            while (iterador != NULL) {
                //printf("%s",iterador->nome);
                puts(iterador->nome);
                iterador = iterador->proximo;
            }
        }
    	printf("\n");
    }
    
    void limpaListaSimples(ListaSimples *l) {
        Elemento *iterador, *anterior;
        iterador = l->inicio;
        anterior = NULL;
    
        if (iterador == NULL) {
            printf("Lista vazia!");
        }
        else{
            while (iterador != NULL) {
                anterior = iterador;
                iterador = iterador->proximo;
                free(anterior);
            }
        }
        l->inicio = NULL;
    }
    
    int main(void)
    {
        ListaSimples *l = inicializaLista();
        int escolha=0;
        char name[20];
        printf("Reservator v0.1\n");
        printf("1 - Reservar Passagem\n2 - Cancelar Passagem\n3 - Verificar Passagem Reservada\n4 - Mostrar Passageiros\n");
        while(escolha<1 || escolha>4)
        {
            scanf("%d",&escolha);
        }
        gets(name);
        colocaDado(name,l,0);
        imprimeListaSimples(l);
        colocaDado("ass",l,1);
    
        imprimeListaSimples(l);
        retiraDado(l,0);
        return 0;
    }

     

    Eu empaquei, e minhas dúvidas são as seguintes:
    1) Como eu faço para enviar um nome, com espaços, para a lista???
    2) Como eu faço para a lista se organizar em ordem alfabética? (pensei em usar o strcmp, mas n sei como fazer isso junto da lista),
    3) Como eu imprimo esses nomes da lista?

     

    Por favor, me ajudem :(

    To desesperado pois tenho prova de fisica na quinta, mesmo dia da entrega desse exercício que vale nota..

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!