Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Ordenar Pilha Encadeada

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C / C++ Ordenar Pilha Encadeada

    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:

    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;
    
    }
    Gostaria de saber o que estou errando, pois realmente não tenho a menor ideia.



    Agradeço a atenção!
    Similar Threads
X
Working...
X