Olá galera! Então, estou tendo problemas com o seguinte exercício de Algoritmos e Estrutura de Dados:
Escreva um algoritmo para ordenar os elementos de uma pilha durante o processo de inserção - push(x). Após todas as inserções, os elementos da pilha devem estar dispostos em ordem crescente, estando o maior valor no topo da pilha e o menor, na primeira posição válida da pilha.
Entrada: Todos os elementos a serem inseridos na pilha separados por espaço, aqui os elementos não estão ordenados.
Saída: Elementos na pilha, sendo que o topo da pilha é o primeiro elemento a ser exibido, e assim por diante...
Ex de Entrada: 6 1 9 4 3 2 10 22
Ex de Saída: 22 10 9 6 4 3 2 1
OBS PARA OBTER A ENTRADA: Leia cada linha utilizando a função fgets, utilizando como ponteiro de arquivo stdin. Para obter cada número da linha lida, utilize a função strtok. A conversão de cada número obtido com strtok para seu valor inteiro pode ser feita com a função atoi.
Então, eu escrevi meu código e na minha cabeça a lógica está completamente correta, no entando quando executo dá erro e o programa para de funcionar...
Meu código está assim:
Gostaria de saber o que estou errando, pois realmente não tenho a menor ideia.
Agradeço a atenção!
Escreva um algoritmo para ordenar os elementos de uma pilha durante o processo de inserção - push(x). Após todas as inserções, os elementos da pilha devem estar dispostos em ordem crescente, estando o maior valor no topo da pilha e o menor, na primeira posição válida da pilha.
Entrada: Todos os elementos a serem inseridos na pilha separados por espaço, aqui os elementos não estão ordenados.
Saída: Elementos na pilha, sendo que o topo da pilha é o primeiro elemento a ser exibido, e assim por diante...
Ex de Entrada: 6 1 9 4 3 2 10 22
Ex de Saída: 22 10 9 6 4 3 2 1
OBS PARA OBTER A ENTRADA: Leia cada linha utilizando a função fgets, utilizando como ponteiro de arquivo stdin. Para obter cada número da linha lida, utilize a função strtok. A conversão de cada número obtido com strtok para seu valor inteiro pode ser feita com a função atoi.
Então, eu escrevi meu código e na minha cabeça a lógica está completamente correta, no entando quando executo dá erro e o programa para de funcionar...
Meu código está assim:
Código:
#include <stdio.h> #include <stdlib.h> typedef struct node { int info; struct node *ant; }node; typedef struct Pilha{ node *topo; }Pilha; Pilha *P; void cria(Pilha *P){ P->topo = NULL; } void push(Pilha *P, int x){ node *p; node *aux; node *proximo; proximo = NULL; aux = NULL; p =(node*)malloc(sizeof(node)); if(p == NULL){ printf("Erro de alocacao!"); exit(1); } else{ p->info = x; if(P->topo == NULL){ p->ant = NULL; P->topo = p; } else{ aux = P->topo; while(aux != NULL && aux->info > x ){ proximo = aux; aux = aux->ant; } proximo->ant = p; p->ant = aux; } proximo = NULL; aux = NULL; } } void converte(char string[], Pilha *P){ char *pch; int x; pch = strtok(string," "); while (pch != NULL){ x = atoi(pch); push(P, x); pch = strtok (NULL, " "); } } void imprime(Pilha *P){ node *p; if(P->topo == NULL){ printf("A Pilha esta vazia!"); exit(1); } else{ p = P->topo; while(p!=NULL){ printf("%d ", p->info); p = p->ant; } } } void esvazia(Pilha *P){ node *p, *aux; p = P->topo; while(p != NULL){ aux = p; p = p->ant; free(aux); } free(P); } int main(){ char string[6000]; Pilha *P = (Pilha*) malloc (sizeof(Pilha)); cria(P); printf("Informe os valores da pilha: "); fgets(string, 6000, stdin); converte(string, P); imprime(P); esvazia(P); return 0; }
Agradeço a atenção!