Ir ao conteúdo
  • Cadastre-se

Problema com Filas Encadeadas [RESOLVIDO]


MuriloHB

Posts recomendados

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.

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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!