Ir ao conteúdo
  • Cadastre-se

C Listas em C que utilize estrutura de dados


Vagabond1001

Posts recomendados

Aliás a título de curiosidade o argumento para usar -1 ao invés de 1 para indicar quando é VERDADEIRO é por causa da forma binária.

 

-1 fica como ..111111111 (todos os bits igual 1) na forma binária.

 

Enquanto 1 fica como ..00000001 (só 1 bit fica igual a 1).

 

E o 0 obviamente é ..0000000  (todos os bits iguais a 0).

 

Então dá para dizer que -1 é o total oposto de 0 na forma binária, enquanto o 1 só é diferente em 1 bit do 0. Logo, -1 representa melhor o estado oposto de 0 == FALSO.

 

Tem até uma discussão de que usando -1 teria menos risco de uma falha na memória mudar o estado de VERDADEIRO para FALSO e vice-versa, e gerar resultados oposto ao esperado na execução do programa, pois seria necessário que a falha invertesse todos os bits para transformar um -1 em um 0 e vice-versa.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Ok, então a proposta seria trocar o valor da palavra chave True para -1 se possível, pois é em binário opositores como a lógica booleana. Mas é convencionalmente  1 e seria muito sem sentido mudar isso agora daí o professor resolveu aplicar ao estado null, assim temos uma lista vazia com verdadeiro especial para um ponteiro vazio. 

 

Você está pau a pau com @arfneto cada um a seu modo. 

 

Olha o autor precisa tirar essa questão alimpo com professor dele a critério de curiosidade porque se meu colega disser que os dois estão corretos o trio tá formado.

 

Pense bem se esta bendita tá vazia e você partir pra adicionar qualquer coisa vai dá tudo certinho. Acho que não.

 

Está vazia, mas é null o seu endereço.

Link para o comentário
Compartilhar em outros sites

@Mauro Britivaldo  Não há dúvidas, o -1 na função do professor é para indicar VERDADEIRO.

 

Afinal se fosse para indicar um erro então no escopo que chamou a função, teria que pegar o retorno da função e fazer um if else if para verificar se retornou -1, 0 ou 1, e se vai ter que fazer isso para que a função foi criada? Nesse caso seria melhor não usar a função e testar direto no escopo original se é NULL e se está vazia.

 

A única vantagem dessa função é possibilitar fazer isso:

if( lista_vazia(lista) ){
    //faz algo
}

Então só tem uma possibilidade o -1 é para indicar VERDADEIRO.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

7 horas atrás, isrnick disse:

Afinal se fosse para indicar um erro então no escopo que chamou a função, teria que pegar o retorno da função e fazer um if else if para verificar se retornou -1, 0 ou 1, e se vai ter que fazer isso para que a função foi criada?

Para testa se na memória reservada há espaço de mais um elemento. 

 

As exceções foram ignoradas deixa acreditar que jamais ocorreu. Ou seja, esse ponteiro nunca vai ser null ele pensou, meu aluno entende que se tentar adicionar um elemento a lista de ponteiro nulo vai se lascar todo. Mas, creditar que um ponteiro null é também uma lista vazia é fazer esse "samba do crioulo doido" até modificar as funções dele que em nada tem haver com exercício é de lascar.

 

Só tem duas maneiras de se mover na lista; adicionar ou retirar elemento. No caso de um ponteiro de lista vazia que aponta pra null; nenhum dos métodos se aplica, seguramente.

 

13 horas atrás, isrnick disse:

Do contrário deveria considerar um erro e assumir que a lista existe quando a função foi chamada e nem examinar o caso do NULL

Acredito bem nisso, pós returno de -1. Chegou a conclusão tardia que o "bixo" não vai esquecer de inicializar essa ***** e deixou os três retornos como é de se esperar, fica -1 indicação de Erro.

Link para o comentário
Compartilhar em outros sites

3 minutos atrás, Mauro Britivaldo disse:

Para testa se na memória reservada há espaço para mais um elemento. 

 

Essa função não indica se tem espaço para mais um elemento, ela só indica se está vazia, a função para checar se tem espaço é a que checa se está cheia.

 

Na verdade ela seria usada quando estiver removendo elementos da lista, para indicar se ainda tem elementos para serem removidos.

 

(E quando lista é NULL não tem items para serem removidos. hahahaha 😆 )

Link para o comentário
Compartilhar em outros sites

Exatamente não tem como retirar ou adicionar nada.

 

Se está vazia como pode está cheia. Seria loucura... Mas se é null apontando pra 0 tem espaço pra quê? Inclusive essa função citada original está logicamente certa.

 

Repito; o professor confia que seu aluno não é bobo de tentar nada com uma lista nula, quem confia conhece bem.

 

Apesar do esforço incompreensível de introduzir um conceito descabido que um ponteiro de estrutura que aponta para 0, aponta para um tipo de memória considerável vejo todo como mais uma perda de tempo que qualquer outra coisa. Nunca vi tamanha besteira!

 
6 horas atrás, isrnick disse:

E quando lista é NULL não tem items para serem removidos. hahahaha 😆

Nem exite a dito cuja, quiçá elementos pra nada.

 

True( -1) e 😒 lista vazia com memória no ponteiro 0, é cada coisa que só aqui no CdH mesmo!

Link para o comentário
Compartilhar em outros sites

9 horas atrás, Mauro Britivaldo disse:

Meus professores não eram programadores de profissão, eram da ciência doutores em física e outro em química. Agradeço a Deus por saber que são melhores que muitos dá área

 

Devo lembrar que além de programadores de profissão existem doutores e pesquisadores em estruturas de dados, programação, linguagens, algoritmos, lógica e matemática. 

 

Há muito software é ciência. E estruturas de dados e Álgebra antes disso. 

 

Para seu registro George Boole, um ícone da lógica a ponto de ter a lógica binária conhecida como álgebra de Boole, em 1840 foi condecorado por seus trabalhos em Lógica. Veja em BrasilEscola pode ser sugestivo. Bem antes dos computadores e de seus ilustres leitores.

 

9 horas atrás, Mauro Britivaldo disse:

Está defendendo um erro, mas o problema não é meu. Se eu, um aluno apresento essa função e essa justificativa é 0 na hora.

 

Eu não sou o professor

 

Se apresentar para os ilustres doutores em química ao julgar essa questão, talvez. Afinal aparentemente não estudou ou dá valor a isso como ciência. Já abriu um livro de estrutura de dados? Lógica? Análise? Desenvolvimento de sistemas complexos em grupos?

 

7 horas atrás, Mauro Britivaldo disse:

Ou seja, esse ponteiro nunca vai ser null ele pensou, meu aluno entende que se tentar adicionar um elemento a lista de ponteiro nulo vai se lascar todo. Mas, creditar que um ponteiro null é também uma lista vazia é fazer esse "samba do crioulo doido" até modificar as funções dele que em nada tem haver com exercício é de lascar

 

Em linguagens como C++ e java essas funções retornam sempre verdadeiro ou falso e assim o autor imaginou aqui. Podia ter usado 3 estados, mas só para complicar a vida de todo mundo que chama isso. 

 

Você sabe o que é um rvalue? Uma simplificação seria dizer que é algo que pode ser usado em uma expressão. Um if não pode. Uma função que retorna um entre 3 estados também não. Usar isso criaria um problema.

 

7 horas atrás, Mauro Britivaldo disse:

Repito; o professor confia que seu aluno não é bobo de tentar nada com uma lista nula, quem confia conhece bem.

 

Apesar do esforço incompreensível de introduzir um conceito descabido que um ponteiro de estrutura que aponta para 0, aponta para um tipo de memória considerável vejo todo como mais uma perda de tempo que qualquer outra coisa. Nunca vi tamanha besteira!

 

Esse já é novamente um tom que eu acho arrogante.

 

Eis a realidade de quem usa isso: lista_vazia(NULL) retornar false para lista vazia é simples filosofia e é perigoso porque leva a conclusões nocivas por parte de quem chamou. O programa vai cancelar logo mais por uma razão que você vê claramente e que pode levar usuários a "fazer você andar descalço no alfalto. Ou pode custar seu emprego. Ou seu estágio. Ou o seu pagamento.

 

Por outro lado retornar true pode levar simplesmente o cara a chamar insere() na próxima linha, e insere() pode implicitamente criar a lista quando o ponteiro for nulo. Não por acaso muitas versões de insere() devolvem o novo endereço da lista como parâmetro, assim como criar(). É o inofensivo. Software é caro. Cancelar um programa é caro. 

 

E como eu te expliquei a conta fecha de modo mais simples fazendo assim: em geral essas funções não são escritas por quem usa e tem uma reputação a zelar, e não é junto aos doutores em física: é junto a quem usa, ou a quem paga.

 

7 horas atrás, Mauro Britivaldo disse:

True( -1) e 😒 lista vazia com memória no ponteiro 0, é cada coisa que só aqui no CdH mesmo!

 

Como eu te disse, é o comum. Na prática. As listas são implementadas assim pelas razões que tentamos te explicar. Sua opinião não duraria nada na prática ou na academia. A menos que fosse para os seus doutores ilustres imagino.

 

7 horas atrás, Mauro Britivaldo disse:

Apesar do esforço incompreensível de introduzir um conceito descabido que um ponteiro de estrutura que aponta para 0, aponta para um tipo de memória considerável vejo todo como mais uma perda de tempo que qualquer outra coisa. Nunca vi tamanha besteira!

 

Isso não me parece educado, mas não sou moderador.

 

Acho que sequer leu o enunciado direito, porque nesse caso a lista é estática: não há alocação de memória. Por isso acho que você só quer mostrar um ponto.

 

8 horas atrás, Mauro Britivaldo disse:

Jamais, prefiro corre no asfalto descalço no verão que comenter outras burrices consiente

 

Entendo. Mesmo que tenha escrito "consiente"

 

 

adicionado 5 minutos depois
8 horas atrás, Mauro Britivaldo disse:

Pense bem se esta bendita tá vazia e você partir pra adicionar qualquer coisa vai dá tudo certinho. Acho que não.

 

Está vazia, mas é null o seu endereço

 

Sim. Em geral dá certinho. Inserir retorna o novo endereço da lista e em muitos casos sequer há uma função para criar a lista. A operação é implicitamente executada ao tentar adicionar o primeiro elemento. 

 

Tem gente que acha desnecessário ter uma função para criar a lista, e por um argumento bem razoável: para inserir tem que existir. Para que criar se não vai inserir? Então ao inserir o primeiro cria a estrutura. Implicitamente.

 

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, arfneto disse:

Se apresentar para os ilustres doutores em química ao julgar essa questão, talvez. Afinal aparentemente não estudou ou dá valor a isso como ciência. Já abriu um livro de estrutura de dados? Lógica? Análise? Desenvolvimento de sistemas complexos em grupos?

Não tem relevância alguma falar sobre meu histórico acadêmico, isso não ajuda em nada com exercício e desvia ainda mais a discussão que já foi bastante desviada por temas desnecessários e não precisa prosseguir assim.

 

1 hora atrás, arfneto disse:

Entendo. Mesmo que tenha escrito "consiente"

Peço-lhe desculpas pela ortografia a qual entre outras coisas é um constante aperfeiçoamento.

sua escrita é: consciente.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...