Jump to content
joanalr

Dúvida - Listas Ligadas

Recommended Posts

joanalr

Olá a todos!Estou a realizar um trabalho de programação, em que o objectivo é guardar numa estrutura o stock de um armazém. O armazém é composto por 3 corredores, com 4 armários cada. Cada armário contem um número de produtos ilimitado. É necessário registar o código do produto e a sua respectiva quantidade.O que pensei foi em fazer um array bidimensional de estruturas, cada estrutura ligada em listas. Mas estou com dificuldades em adicionar e listar o que contém cada lista. ( Tentei fazer o código apenas para o 1º elemento do array t[0][0] ) por enquanto.Será que há outra forma mais indicada de resolver o problema?Obrigado pela possível ajuda :) *

http://pastebin.com/Cq2xtcXW

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


typedef struct objecto produto, *pprod;
struct objecto{
   char nome[100];
   int quantidade;
   pprod prox;
};

produto t[4][3];


int lista_vazia(pprod p)
{
   if(p == NULL)
    return 1;
   else
    return 0;
}
void mostra_info(pprod p)
{
   while(p != NULL)
   {
    printf("%s\t%d\n",
		   p->nome, p->quantidade);
    p = p->prox;
   } }

void preenche(pprod p)
{
   printf("Nome: ");
   scanf("%s",p->nome);
   printf("Quantidade: ");
   scanf("%d",&p->quantidade);
   p->prox = NULL;
}

pprod insere_inicio(pprod p)
{
   pprod novo;
   if((novo = malloc(sizeof(produto))) == NULL)
    printf("Erro na alocacao de memoria\n");
   else
   {
    preenche(novo);
    novo->prox = p; } p = novo;
   return p;
}


int main(int argc, char *argv[]){
   insere_inicio(t[0][0].prox);
   mostra_info(t[0][0].prox);
   printf("%d",lista_vazia(t[0][0].prox));


}

Edited by joanalr

Share this post


Link to post
Share on other sites
HappyHippyHippo

O que pensei foi em fazer um array bidimensional de estruturas, cada estrutura ligada em listas ... Será que há outra forma mais indicada de resolver o problema?

nop


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
joanalr

Não estou a conseguir aceder aos elementos da lista. Neste caso, inserir e listar. Devo ter várias coisas mal no código que aqui coloquei. :confused:

Share this post


Link to post
Share on other sites
KTachyon

@joanalr ISEC?

A resposta:

Tens corredores que têm armários que têm produtos. O primeiro corredor representa todo o armazém, porque esse corredor aponta para o próximo corredor, que aponta para o próximo,... (lista ligada).

Cada corredor aponta para o primeiro armário, que aponta para o próximo, que aponta para o próximo,… (lista ligada).

Cada armário aponta para o primeiro produto, que aponta para o próximo, que aponta para o próximo,… (lista ligada).

Espero que ajude a responder à tua dúvida ;)


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
HappyHippyHippo

antes de mais, para quem não sabe/percebe ponteiro, nunca deveria usar typedef's !!!

por outras palavras, aconselho vivamente a escreveres o teu código sem a seguinte linha:

typedef struct objecto produto, *pprod;

agora para perceberes o teu problema, testa este exercício:

(nota que este código é muito semelhante ao teu, simplesmente tem o que interessa para perceberes o teu erro)

struct Objecto {
 int valor;
 struct Object * prox;
}

void alloc(struct Object * pt_obj)
{
 pt_obj = malloc(sizeof(struct Object));
}

int main()
{
 struct Object obj;

 obj.prox = NULL;
 printf("valor do ponteiro prox = %p\n", obj.prox);

 alloc(obj.prox);
 printf("valor do ponteiro prox = %p\n", obj.prox);
}

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.