Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Localhost

Exemplo de uma Queue

Mensagens Recomendadas

Localhost

Bem, deixo aqui um exemplo de uma queue. É uma estrutura de dados útil por exemplo para um BFS (algoritmos de pesquisa, foi aqui que aprendi a queue).

Só tem funções básicas mas já dá para perceber a ideia.

Btw, não liguem muito aos nomes das variáveis que estão na estrutura base, era só mesmo uma experiência e depois é que me lembrei em postar aqui no forúm.

// Estrutura de dados
// Queue AKA Fila
// Útil para algoritmos de pesquisa como BFS
// FIFO - First In First Out 

#include <stdio.h>
#include <stdlib.h>

// Estrutura base
typedef struct Set {
    int sum;
    int level;
    struct Set *next;
}Queue;


// Função que vai iniciar a queue com todos os elementos do set
Queue * init_queue(int *set, int N) {
    int k=0;
    Queue *tail=NULL, *head=NULL;
    for(k=0; k < N; k++) {
        if(tail == NULL) {
            tail=(Queue *)malloc(sizeof(Queue));
            tail->sum=set[k];
            tail->level=0;
            head=tail;
            tail->next=NULL;
        }else {
            tail->next=(Queue *)malloc(sizeof(Queue));
            tail=tail->next;
            tail->sum=set[k];
            tail->level=0;
            tail->next=NULL;
        }
    }
    return head;
}

//Função que retira um elemento da queue
Queue * dequeue(Queue *head) {
    Queue *aux=head;
    head=head->next;
    free(aux);
    return head;
}

// Função para adicionar um elemento na queue
void enqueue(Queue *head, int val, int lev) {
    while(head->next != NULL) head=head->next;
    head->next=(Queue *)malloc(sizeof(Queue));
    head=head->next;
    head->sum=val;
    head->level=lev;
    head->next=NULL;
}

// Função para mostrar o conteudo da queue
void print(Queue *tail) {
    while(tail != NULL) {
        printf("%i - %p - %p\n", tail->sum, tail, tail->next);
        tail=tail->next;
    }
    putchar('\n');
}

int main(void) {
    int set[] = {1,2};
    Queue *tail=NULL;
    tail=init_queue(set,2);
    print(tail);
    enqueue(tail,10,0);
    print(tail);
    tail=dequeue(tail);
    print(tail);
    return 0;
}


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.