Ir ao conteúdo
  • Cadastre-se

Duvida Pilha Dinamica


fabioigor

Posts recomendados

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 porém 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

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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!