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

Problema com pilha dinamica


Fabin

Pergunta

Boa tarde pessoal!

Estou com duvida em um exercicio aqui

consiste em um cadastro de carros para entrarem na cegonha

1 - usuário digita quantos carros serao entregues e todos são lidos e guardados em um vetor dinamico

2 - logo apos são ordenados de forma decrescente

3 - são inseridos na pilha

4 - são retirados elementos da pilha

esta desorganizado ainda pois estou fazendo os teste primeiros

connsegui cadastarr e ordenar de forma decrescente porem não estou conseguindo inserir na pilha alguém pode me ajudar

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

typedef struct TIPO_NO* TIPO_APONTADOR;

typedef struct TIPO_NO
{
        int info;
        TIPO_APONTADOR next;
}TIPO_NODO;

typedef struct{
        TIPO_APONTADOR inicio;
        TIPO_APONTADOR fim;
}TIPO_TADS;

typedef struct {
        int NF;
        char modelo[50];
        int ordem_entrega;
}TIPO_CARRO;


void inserir_carro(TIPO_CARRO *y, int qtde_carros);
void mostra_carros(TIPO_CARRO *y, int qtde_carros);
void selecao_direta(TIPO_CARRO *y , int qtde_carros);
void inicializa_pilha(TIPO_TADS *pilha);
void insere_pilha(TIPO_TADS *pilha, TIPO_CARRO *y, int qtde_carros);
TIPO_CARRO retira_pilha(TIPO_TADS *pilha, TIPO_CARRO *y, int qtde_carros);

int main()
{
    TIPO_CARRO *car;
    TIPO_TADS pilha;
    int qtde_carro;
    char op;
    
    inicializa_pilha(&pilha);
    
    printf("Digite a quantidade de carros a ser entregues:\t");
    scanf("%d",&qtde_carro);
    
    car = (TIPO_CARRO *)malloc(sizeof(TIPO_CARRO) * qtde_carro);
    
    inserir_carro(car, qtde_carro);
    //mostra_carros(car, qtde_carro);
    selecao_direta(car, qtde_carro);
    printf("\nOrdenacao de Pedidos decrescente para coloca-los na Cegonha\n");
    mostra_carros(car, qtde_carro);
    printf("Deseja inserir elementos na fila (S)im/(N)ao:\t");
    scanf("%c",&op);
    switch(op)
        {
            case 'S': insere_pilha(&pilha, car,qtde_carro);
            break;
            case 'N':
            break;
        }    
    
    
    system("pause");
    return 0;
}

void inserir_carro(TIPO_CARRO *y, int qtde_carros)
{
    TIPO_CARRO *carro = y;
    
    for(int i=0;i<qtde_carros;i++)
    {
            system("cls");
            printf("Digite o numero da nota fiscal do pedido %d:\t",i+1);
            scanf("%d",&carro[i].NF);
            printf("Digite o modelo do carro do pedido %d:\t",i+1);
            fflush(stdin);
            gets(carro[i].modelo);
            printf("Digite a ordem que foi entregue o carro do pedido %d:\t",i+1);
            scanf("%d",&carro[i].ordem_entrega);
    }
}

void mostra_carros(TIPO_CARRO *y, int qtde_carros)
{
     TIPO_CARRO *carro = y;
     
     for(int i=0; i<qtde_carros;i++)
     {
             printf("\n\n");
             printf("NF:\t%d\n",carro[i].NF);
             printf("Modelo:\t%s\n",carro[i].modelo);
             printf("Ordem:\t%d\n",carro[i].ordem_entrega);
     }
}

void selecao_direta(TIPO_CARRO *y , int qtde_carros)
{
     TIPO_CARRO *carro = y, aux, maior;
     int i,j,posicao_maior;
     
     for(i=qtde_carros - 1;i>0;i--)
     {
        maior = carro[i];
        posicao_maior = i;
        for(j=i - 1;j>=0;j--)
        {
             if(carro[j].ordem_entrega < maior.ordem_entrega)
             {
                 maior = carro[j];
                 posicao_maior = j;
             }
        }
        aux = maior;
        carro[posicao_maior] = carro[i];
        carro[i] = aux;
     }
}      

void inicializa_pilha(TIPO_TADS *pilha)
{
     pilha -> inicio = NULL; //base
     pilha -> fim = NULL; //topo
}

void insere_pilha(TIPO_TADS *pilha, TIPO_CARRO *y, int qtde_carros)
{
     TIPO_CARRO *carro = y;
     TIPO_APONTADOR aux;
     
     aux = (TIPO_APONTADOR)malloc(sizeof(TIPO_NODO));
     
        if(aux == NULL)
      {
            printf("Erro: Fila cheia!\n");
            system("pause");
     }else{
               for(int i=0; i<qtde_carros; i++){
                   aux -> info = carro[qtde_carros];
                   aux -> next = fim;
                   fila -> fim = aux;
               }
           }
}

TIPO_CARRO retira_pilha(TIPO_TADS *pilha, TIPO_CARRO *y, int qtde_carros)
{
     TIPO_APONTADOR aux;
     TIPO_CARRO *carro = y;
     
     carro[qtde_carros] = pilha -> fim -> info;
     
     pilha -> fim = pilha -> fim--;
     
     if(pilha -> fim == NULL)
     {
              pilha -> inicio = NULL;
     }
     free(aux);
     
     return carro[qtde_carros];
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Fala Fabin,

já resolveu essa pendenga?

Meu, sua função que insere na pilha tá bem maluca heim.

Tem variavel não declarada, você passa carros[qtd_carros] ao invés de carros[n] e etc.

Se ainda precisar de ajuda pra resolver fala ai.

Abs

Link para o comentário
Compartilhar em outros sites

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...