Ir para conteúdo
Fórum Script Brasil
  • 0

Estrutura de Dados - Listas Simplesmente Encadeadas - Ajuda com exercício URGENTE


Jouy Durão

Pergunta

EDIT: RESOLVIDO! Achei uma forma rápida e fácil, quem precisar só mandar pm.

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

Editado por Jouy Durão
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...