MuriloHB
Membro Júnior-
Posts
6 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
Tudo que MuriloHB postou
-
Caso alguem tenha alguma dúvida, o problema se encontrava na função push, especificamenten o trecho: aux = P->topo; while(aux != NULL && aux->info > x ){ proximo = aux; aux = aux->ant; } proximo->ant = p; p->ant = aux; } proximo = NULL; aux = NULL; } Realizei a seguinte alteração: aux = P->topo; //vai procurar o lugar correto pra inserir o elemento while(aux != NULL && aux->info > x ){ proximo = aux; aux = aux->ant; } // se tiver que inserir no começo if (aux == P->topo) { p->ant = P->topo; P->topo = p; } // se for no final else if (aux == NULL) { proximo->ant = p; p->ant = NULL; } // se for no meio else { p->ant = aux; proximo->ant = p; } } proximo = NULL; aux = NULL; } Agora o programa roda normalmente!
-
Eu tenho o DEV C++ aqui também, mas ele dá a mesma coisa. Na hora de compilar ele aponta: Compilation results... -------- - Errors: 0 - Warnings: 0 - Output Filename: C:\Users\Murilo\Desktop\dev.exe - Output Size: 130,6328125 KiB - Compilation Time: 2,81s Mas na hora que eu rodo o programa, informo os elementos da Pilha e dou Enter, o programa também para de funcionar.
-
Então, eu uso o CodeBlocks pra compilar e quanto eu rodo o programa ele não mostra onde estão os erros, apenas aponta " Exercício.exe parou de funcionar... "
-
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: #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!
-
Olá galera, tudo bem? Então... Hoje na minha aula de Algoritmos e Estruturas de Dados meu professor me passou um exercício para entrega, o qual basicamente diz que: Dadas duas filas encadeads e dinâmicas L1 e L2, previamente ordenadas de forma crescente , crie uma terceira fila L3 com os elementos de intersecção da fila L1 com a fila L2. Entrada: A entrada será composta de duas linhas. A primeira são todos os elementos de L1 separados por espaço e a segunda, todos os elementos de L2 separados por espaço. Saida: Fila L3 com todos os elementos separados por espaço. Exemplo de entrada: 1 4 5 10 4 5 11 Saída: 4 5 Além disso, ele adiciona que, para obter a entrada, é necessário ler cada linha utilizando a função fgets e para obter cada número da linha lida, é necessário utilizar a função strtok. Ainda, a conversão de cada número obtido com strtok para seu valor inteiro deve ser feita com a função atoi. No caso, eu escrevi meu código , mas quando tento rodar ele dá erro, falando que o programa parou de funcionar... Aqui está como o código está no momento: #include <stdio.h>#include <stdlib.h>typedef struct NO { int cont; struct NO *prox;}no;typedef struct Fila { no *inicio, *fim;}Fila;Fila *F1;Fila *F2;Fila *F3;void cria(Fila *F){ F->inicio = NULL; F->fim = NULL;}int IsEmpty(Fila *F){ if(F->inicio = NULL){ return; } else return (0);}void entra(Fila *F, int x){ no *p; p =(no*)malloc(sizeof(no)); if(p = NULL){ printf("Erro de alocacao"); exit(1); } else{ p->prox = NULL; p->cont = x; if(F->inicio = NULL){ F->inicio = p; } else F->fim->prox = p; F->fim = p; }}void sai(Fila *F){ no *p; if(IsEmpty(F)){ printf("A fila ja esta vazia!"); exit(1); } else{ p = F->inicio; F->inicio = F->inicio->prox; if(F->inicio = NULL){ F->fim = NULL; } free(p); }}int main(){ cria(F1); cria(F2); cria(F3); char string[6000]; printf("Informe os valores crescentes da Fila 1: "); fgets(string, 6000, stdin); converte(string, F1); printf("Informe os valores crescentes da Fila 2: "); fgets(string, 6000, stdin); converte(string, F2); compara(F1,F2); imprime(F3); esvazia(F1); esvazia(F2); esvazia(F3);}int converte(char string[], Fila *F){ char *pch; int x; pch = strtok(string," "); while (pch != NULL){ x = atoi(pch); entra(F, x); pch = strtok (NULL, " "); }}int compara(Fila *F1, Fila *F2){ no *p, *q; int x; p = F1->inicio; q = F2->inicio; while(p->prox != NULL){ while(q->prox != NULL){ if(p->cont == q->cont); x = &p; entra (F3, x); p = p->prox; } }}void imprime(Fila *F){ no *p; p = F->inicio; while(p != NULL){ printf("%d ", p->cont); p = p->prox; }}void esvazia(Fila *F){ no *p, *temp; p = F->inicio->prox; temp = F->inicio; while(p != NULL){ free(temp); temp = p; p = p->prox; }} Se puderem me dar dicas de como corrigir o código ou apontar alguma função que eu tenha feito errado ficarei muito agradecido! Obrigado.
-
Olá pessoal, eu recebi um trabalho para entregar no qual eu tenho que criar uma calculadora utilizando pilhas e com a notação polonesa reversa. No entando estou tendo muitas dificuldades de como começar a mesma, visto que não consegui acompanhar muito bem a matéria... Nesse trabalho, o professor especificou que deveríamos utilizar sua notação para a Pilha Estática, sendo que sua estrutura foi definida como: typedef struct pilha_dinamica PILHA_DINAMICA;typedef struct NO{ ITEM *item; struct NO *anterior;} NO;struct pilha_dinamica{ NO *topo; int tamanho;}; Essa calculadora trabalha apenas com números positivos e inteiros e tem as quatro operações: adição, subtração, multiplicação e divisão. Além disso tem a tecla C (clear) , que esvazia a pilha e a tecla E (enter) que empilha um 0, e deve ser usada para indicar que vai ser fornecido um número. Comecei o trabalho tentando primeiramente implementar as funções básicas da pilha, mas tenho muita dúvida se elas foram feitas corretamente... Gostaria que vocês dessem uma olhada e apontessem possíveis erros e melhorias no mesmo: #include <stdio.h>#include <stdlib.h>typedef struct pilha_dinamica PILHA_DINAMICA;typedef struct NO{ ITEM *item; struct NO *anterior;} NO;struct pilha_dinamica{ NO *topo; int tamanho;};//Criando a pilha dinamicamentePILHA_DINAMICA *criar_pilha(){ PILHA_DINAMICA *P = (PILHA_DINAMICA*)malloc(sizeof(PILHA_DINAMICA)); if(P == NULL){ printf("Erro de memoria!"); exit(1); } else{ P->topo = NULL; P->tamanho = 0; } return pilha;}//Apagar a pilhavoid apagar_pilha(PILHA_DINAMICA *P){ if(!vazia(P)){ NO *paux = (P)->topo; while(paux != NULL){ NO *patual = paux; paux = paux->anterior; free(patual); } } free(P); P = NULL;}//Verifica se a pilha está vaziaint vazia(PILHA_DINAMICA *P){ return(P->topo = NULL);}//Empilha um elemento na pilhavoid empilha(PILHA_DINAMICA *P, int *x){ NO *novo = (NO*)malloc(sizeof(NO)); novo->item = *x; if(vazia(P)){ P->topo = novo; novo->anterior = NULL; } novo->anterior = P->topo; P->topo = novo; P->tamanho++; }//Desempilha um elemento da pilhaint desempilha(PILHA_DINAMICA *P){ int N; if(vazia(P)){ printf("A pilha ja esta vazia!\n\n"); exit(1); } //no caso de haver apenas 1 nó na pilha else if(P->tamanho == 1){ N = P->topo->item; free(P->topo); P->topo = NULL; } else NO *temp; N = P->topo->item; temp = P->topo; P->topo = P->topo->anterior; free(temp); temp = NULL; return N;} Se o código estiver ok, eu posso começar a pensar em como farei para unir a calculadora a essa lógica da pilha e assim fazer um trabalho de qualidade. Agradeço a atenção e ajuda de todos!
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