Jump to content
Fórum Script Brasil
  • 0

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


Jouy Durão

Question

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

Edited by Jouy Durão
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.9k
×
×
  • Create New...