Boas, Tenho de fazer um programa em que crio uma Lista dinamica LIFO. Para essa lista estou a utilizar uma estrutura que tem num dos campos um array de chars, para guardar uma string... A minha lista está a funcionar bem, cada vez que introduzo uma string, ela aloca espaco para uma nova estrutura de dados. Porem, o que queria fazer era: quando se introduzisse a mesma string, ela nao alocaria espaço, porque já haveria uma estrutura na lista com o mesmo nome. Como é que faço isso? crio uma funçao que percorra todos os elementos da lista antes de alocar memoria? ou posso fazer um ciclo dentro da funcao "insere_pilha" (funcao que vai aumentando a lista, por assim dizer)? Já agora, se possivel, gostaria que me dessem algumas dicas de como fazer isso... Espero ter-me feito entender, Cumps
Creio que até já devias ter uma função com um nome do estilo "procura_pilha(<nome>,<pilha>);" que vai verificar se existe ou não a estrutura com o nome que tu pretendes. Seria algo do estilo: Código: pilha *procura_pilha(char nome, pilha *pilha) { pilha *tmp, *found; tmp = pilha; While (tmp != NULL) { if (tmp->nome == nome) { found = tmp; } tmp = tmp->next; } return found; } Creio que seja algo deste estilo.
qual é o mal de inserires os mesmos dados outra vez ? todas as pilhas que conheço não procuram por valores duplicados. é objectivo da pilha armazenar dados, quer sejam repetidos ou não. podes dar é uma forma de o utilizador saber, antes de inserir, se já existe o valor em pilha. essa função já foi sugerida acima. cumprimentos.
Eu tenho de introduzir duas strings de cada vez... e tenho que garantir que a primeira é diferente de todas as outras. por exemplo: "JOAO PEDRO", a pilha ficaria: JOAO -> PEDRO sendo que o utilizador nao poderia por nunca mais a primeira string outra vez na primeira posicao, se pusesse agora: "ANTONIO PEDRO". a pilha teria de ficar: JOAO -> PEDRO -> ANTONIO se introduzisse, a seguir: "MANUEL JOAO", a pilha ficaria JOAO -> PEDRO -> ANTONIO -> MANUEL Espero ter sido explicito... Cumps