Ir ao conteúdo
  • Cadastre-se
MuriloHB

Problema com Filas Encadeadas [RESOLVIDO]

Recommended Posts

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.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×