Ajuda com lista

1. Ajuda com lista

Rafaela
faela

(usa Outra)

Enviado em 22/08/2012 - 16:43h

Galera meu professor passou um exercício para fazer em C de listas de listas. Tipo assim, ele quer que eu faça uma listas com prioridades num array, onde cada posição do array representa uma prioridade, e cada posição aponta para uma lista. ex.se vc for inserir uma lista com prioridade 1 é inserida no array 1, com prioridade 2 é inserida no array 2, e assim por diante. Como fazer isso??? Me ajudem, por favor...


  


2. Re: Ajuda com lista

Jose Renan Assis
JoseRenan

(usa Ubuntu)

Enviado em 23/08/2012 - 12:02h

Nunca criei um array de listas mais achei esse código aqui mesmo no fórum que talvez ajude

http://www.vivaolinux.com.br/script/Vetor-de-lista


3. Re: Ajuda com lista

Paulo
paulo1205

(usa Ubuntu)

Enviado em 27/08/2012 - 06:25h

Uma lista de listas é simplesmente uma lista como outra qualquer, só que com a particularidade de que o dado armaezado em cada elemento é um ponteiro para outra lista.

Veja este exemplo (que não está otimizado e está longe de estar completo -- e muito menos testado).

struct generic_list_node {
int data; /* o tipo do dado pode ser qualquer coisa, não necessariamente int */

struct generic_list_node *next;
};

struct prio_list_node {
/* "prio" da a prioridade e "list" contem os elementos com tal prioridade. */
unsigned prio;
struct generic_list_node *list;

/* Proximo elemento desta propria lista. */
struct prio_list_node *next;
};


void add_prio_element(struct prio_list_node **prio_list, unsigned prio, int value){
struct prio_list_node *p, *before_p;

before_p=NULL;
p=*prio_list;
while ((p != NULL) && (p->prio < prio)) {
before_p=p;
p=p->next;
}
if ((p != NULL) && (p->prio == prio)) {
/* Prioridade já existe, logo apenas adiciona novo evento à sua lista. */
add_element(&p->list, value);
}
else {
/* A prioridade solicitada ainda não existe. */

struct prio_list_node *new_prio_node;

/* Cria uma nova lista para a dada prioridade. */
new_prio_node=malloc(sizeof struct prio_list_node);
new_prio_node->prio=prio;
new_prio_node->list=NULL;
add_element(&new_prio_node->list, value);
new_prio_node->next=p;

if (before_p==NULL) {
/* Novo primeiro elemento da lista de prioridades (incluindo caso de lista vazia). */
*prio_list=new_prio_node;
}
else {
/* Nova prioridade não é a primeira da lista. */
before_p->next=new_prio_node;
}
}
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts