Construindo uma lista encadeada com a linguagem de programação C - Ponteiros parte III
Вставка
- Опубліковано 8 лют 2025
- Vetores são estruturas de dados interessantes, porém estáticos. Uma lista encadeada é uma estrutura de dados dinâmica que vai crescendo conforme novos elementos são adicionados.
Veja na aula de hoje como construir uma estrutura de dados do tipo lista encadeada na linguagem C.
Na aula são apresentados os seguintes tópicos:
1) O que são listas encadeadas e como funcionam;
2) Como criar a estrutura Nó;
3) Como criar a estrutura Lista;
4) Como inserir um novo nó no início da lista;
5) Como imprimir toda a lista;
6) Como inserir um novo nó ao final da lista;
Curso de Programação C: • Curso de Programação C...
Curso de Algoritmos e Lógica de Programação: • Curso de algoritmos e ...
Frequentemente recebo mensagens pedindo indicação de livros. Particularmente não gosto muito de indicar livros. Acho que livro é uma experiência muito pessoal que vai desde a linguagem adotada pelo autor como a disposição do conteúdo ao longo dos capítulos. Contudo, para os insistentes (rsrsrs), deixo aqui a sugestão de alguns livros que gosto fazendo duas ressalvas:
1) Antes de comprar leia as avaliações de quem já comprou, isso pode trazer informações importantes para você.
2) Estes links são de afiliado. Isso significa que comprando por meio destes links você CONTRIBUI com o canal, recebemos uma pequena porcentagem do valor SEM NENHUM ACRÉSCIMO para você.
Programação com a Linguagem C
1) C Como Programar: amzn.to/3wWtC4E
2) Linguagem C - Completa e Descomplicada: amzn.to/3x5JTER
3) Elementos de Programação em C: amzn.to/3zkqn8X
4) Curso Básico da Linguagem C: amzn.to/3iBjZ6j
5) Algoritmos e programação em linguagem C: amzn.to/3itnOKW
6) Introdução a Programação com a Linguagem C: amzn.to/3xXPIW3
7) Linguagem C: amzn.to/3wX8lIn
8) Estruturas de dados em C: amzn.to/3hWbXpE (este livro é um pouco mais avançado e não cobre a parte introdutória não sendo indicado para iniciantes)
Algoritmos e Lógica de Programação
1) Fundamentos da Programação de Computadores: Algoritmos, Pascal, C, C++ e Java: amzn.to/3kHUzXC
2) Aprenda Lógica de Programação e Algoritmos com Implementações em Portugol, Scratch, C, Java, C# e Python: amzn.to/3BrDyqE
3) Entendendo Algoritmos: Um Guia Ilustrado Para Programadores e Outros Curiosos: amzn.to/36SvTna
4) Algoritmos e Programação de Computadores: amzn.to/3y04kEf (Este livro apresenta os exemplos nas seguintes linguagens: Portugol, Pascal, C, Java e PHP)
5) Algoritmos: Lógica Para Desenvolvimento de Programação de Computadores: amzn.to/2V64cUY
6) Algoritmos E Lógica Da Programação: amzn.to/3zp2z3A
Blog: wagnergaspar.com/
CURSOS GRATUITOS
Curso de Programação C: ua-cam.com/play/PLqJK4Oyr5WSjjEQCKkX6oXFORZX7ro3DA.html
Curso de Algoritmos e Lógica de Programação: ua-cam.com/play/PLqJK4Oyr5WSglLpxRZM5cAnmMdgsio-Zy.html
Finalmente encontrei um professor que explica as coisas de forma simples e direta!
melhor vídeo, explica melhor do que meu professor da faculdade.
Não conta pra ele Nadiana 😅😅😅😅😅
Obrigado pelo feedback.
Salvando o semestre da faculdade de ADS! Didática, direta, bem explicada e simples. Ganhou +1 inscrito :)
Moro em Portugal. Estudo Engenharia da Informática. Você explica melhor que meu professor. Obrigado
Explicação super clara! Parabéns e obrigado pela aula.
Por nada Luiz. Obrigado pelo feedback :)
Que explicação maravilhosa! eu tava desistindo ja!! muito obrigada, continue com os videos!!!!
😀 😀 😀
Obrigado pelo feedback Isabela, fico feliz em saber que ajudou.
Vou continuar com os vídeos sim 😀
Abraços e bons estudos.
Pô, sei que já faz um ano, mas eu tenho que dizer : meus parabéns. Você é extremamente competente, de verdade.
Quem é de ADS da UNIP EaD dá um curtir! Me ajudou muito na matéria de Linguagem! Obrigado Professor!
Por nada Prezado Pedro 👍
Fico feliz em saber que ajudou. Compartilha com seus colegas de curso rsrs
@@programeseufuturo Eu fiz uma playlist das suas aulas e compartilhei! haha Abraço
Meu Deus, Parabéns professor,curso SI e estou a uma semana lutando pra conseguir fazer uma atividade de listas duplamente encadeada, e não conseguia, vi vários vídeos, prof explicava mas não entrava, você conseguiu me salvar. Muito Obgdo, desejo mto sucesso. Melhor explicação, vou retribuir, curtindo comentando e me inscrevendo no seu canal, além de divulgar TB.
Olá Jociel, seja bem vindo ao canal.
Obrigado pelo feedback, fico muito feliz em saber que está ajudando.
Abraços e bons estudos.
Didática é pra quem tem. Eu também estava derrapando com essa tal lista encadeada, agora entendi de vez. Parabéns e muito sucesso para você.
Que bom que ajudou Ricardo. Obrigado e bons estudos.
ta maluco tu é muito didático, um dos poucos que de fato me ensinou essa loucura que é o C, uso node e preciso fazer um projeto em C pra faculdade, só você de fato me deu uma luz nessa matéria de listas encadeadas pprt, muito obrigado
Por nada Thiago 👍.
Fico feliz em saber que ajudou. Obrigado pelo feedback e bons estudos.
EXPLICOU MUITO BEM ...
Vídeo extremamente bom e informativo, parabéns!
Obrigado 😉
Cara meus parabéns, tem me ajudado muito, vendo e revendo fica muito mais fácil de aprender, obrigado de coração.
Por nada Vitor. Fico feliz que esteja ajudando.
Obrigado pelo feedback.
@@programeseufuturo acho que poderia postar seu pix na descrição, vejo que tem muito conteúdo, pode ser que te ajude. Mas Obrigado
Aula Excelente... Muito Obrigado.
Parabéns pelo vídeo! Você possui uma ótima didática e graças a isso eu aprendi a implementar esse conceito. Obrigado!
Fico muito feliz em saber que ajudou Marcel, obrigado pelo feedback 😉.
Abraços.
nossa essa aula foi mto boa, professor bom faz toda a diferença!!!!
Gratidão sua didática é incrível 🙏🏻
muito bom o vídeo, parabéns!
Muito bom! parabéns pelo conteúdo.
Obrigado Robert :)
excelente aula! o assunto que é complicado kkkkkkk
Aula TOP!!!
Excelente aula e didática!!
Obrigado Dario 😃
Muito obrigado!! Tô pré-matriculado em Eng. de Computação e estou adiantando matérias enquanto minhas aulas não começam. Essa aula foi muito tranquila de entender e acompanhar, parabéns e muito obrigado (mais uma vez haha)
Por nada :)
Fico feliz que esteja ajudando. Obrigado pelo feedback e bons estudos.
rapazz, se vai lista encadeada no 3 semestre
@@vitoriacardoso5723 onde eu estudo é no 2, mas tá tranquilo ksdjksdj já estudei um monte de estrutura de dados desde que vi esse vídeo
@@ViniciusTeixeira1 olha só, que legal, eu to vendo agr no 3 semestre, estudo na UTFPR , que bom que deu certo hehe
@@ViniciusTeixeira1 eu to começando agr a estudar isso, esse video é bom então ? hehe tenho um pouco de dificuldade
muito boa sua aula professor!
Obrigado José 👍
Parabéns pela aula, muito didático sua explicação, me ajudou muito! Obrigado.
Obrigado 👍
Que bom que ajudou. obrigado pelo feedback.
Abraços e bons estudos.
Parabéns prof Wagner, aula incrível, como sempre, estou aprendendo bastante com as suas aulas, obrigado por fornecer o seu conhecimento de forma gratuita ✍️👏. Se não for pedir muito, queria uns conselhos seus em relação ao mestrado em Ciência da Computação, estou chegando na metade da minha graduação em engenharia de software, porém já estou pensando no mestrado, em Ciência da Computação. Quero saber o que eu preciso tanto, informações sobre....
Obrigado Matheus, fico feliz em saber que o curso está te ajudando.
Quanto ao mestrado, não entendi, "Quero saber o que eu preciso tanto, informações sobre..." Quais suas dúvidas exatamente?
@@programeseufuturo Pq professor eu sei bem como é o caminho pra chegar o final do curso, preparar o TCC e tudo, porém eu quero fazer o meu TCC focado tb pro Mestrado, queria saber se preciso apenas saber qual a linha de pesquisa que eu quero e tb se a instituição que eu tenho como foco tb estar no mesmo seguimento, entendeu? rsrs
Eu quero fazer mestrado em Ciência da Computação, tô pesquisando bastante sobre modelagem de sistema computacionais e inteligência computacional, tenho uma instituição em vista que é a UTFPR. Acredito que o senhor tem experiência nesse assunto por ter titulação Mestre
@@matheuscavalcanti8607 Olá Matheus. Se você pensa em fazer mestrado na mesma instituição onde está fazendo a graduação se torna mais fácil. Seu orientador de TCC pode ser seu orientador de mestrado (se ele aceitar claro rsrs) e nesses casos normalmente o trabalho de mestrado é um aprofundamento do TCC.
Mas você também pode optar por fazer o mestrado em outra universidade, nesse caso você precisa ficar atento à publicação dos editais de abertura dos processos para se candidatar. Cada universidade tem seu processo e sempre têm suas particularidades. Em algumas universidades você faz o processo e após aprovado procura o orientador (se ainda não tiver um), em outras, você já precisa da carta de aceite do seu futuro orientador no momento da inscrição. Neste caso, se você for fazer em outra universidade, seria interessante seu orientador de TCC já te colocar em contato com algum professor da sua área de pesquisa, talvez até convida-lo para sua defesa de TCC. Não esqueça que isso é o "trabalho" deles, eles querem artigos com o nome deles, então é mais difícil de um professor te aceitar quando ele nunca te viu, não sabe quem você é ou o que já fez. Se você já tem algum professor em mente, procure ler os trabalhos mais recentes publicados pelos orientados dele pra se informar a respeito do que pesquisam. Um outro ponto importante (mas só sei disso hoje rsrsrs) é que muitas linhas de pesquisa te levam apenas para a academia, não tem atrativo para o mercado de trabalho. Então , pense nisso ao escolher, onde você deseja estar daqui uns 10 anos, na academia ou no mercado de trabalho?
Não sei se ajudei rsrsrs. Qualquer dúvida diga aí. Abraços.
@@programeseufuturo Professor Wagner, boa tarde, antes de tudo quero agradecer pelas informações, tens me ajudado demais, e sim, o meu foco é prestar o mestrado em Ciência da Computação, meu sonho e quero muito isso, obrigado pelas informações e como eu falei no início desta msg, vc me ajudou bastante com essas informações.
Abraços!!
muito obg professor o senhor me deu uma boa ideia de como faz
Por nada Douglas, que bom que ajudou.
Boa aula professor você me ajudou muito na busca de entender a programar em C. Só queria tirar uma dúvida, se tem como permitir que o usuário digite só números. Muito obrigado pela aula.
Olá Emerson.
Respondi sua dúvida aqui: ua-cam.com/video/uElSdxKRunM/v-deo.html
top mds
brabo
Nada, sou bonzinho rsrsrs
Obrigado, me salvou ☺️
Que bom 😊
Obrigado pelo feedback e seja bem vindo ao canal.
top dms, faltou so disponibilizar o codigo para nois
Muito bem explicado! Mas acha que consegue partilhar o código do programa para testar aqui?
Olá Pedro.
Sempre que possível posto todos os códigos aqui: wagnergaspar.com/curso-gratuito-de-programacao-c/
1) 15:28 faz diferença se eu criar a struct da lista (linhas 9-12) e depois criar a struct do nó (linhas 4-7) ou ao contrário, como você fez?
2) 20:44 por que, na linha 15, você escreveu No* e não *No? Isso faz diferença?
3) 22:09 Para acessar as variáveis da struct da Lista (linhas 23-24), você usou ponto. Para acessar as variáveis da struct do No (linhas 16-17), você usou setinha ->. Por quê?
Olá Roberto. Vamos às respostas:
1) Sim, faz diferença. Se vc criar primeiro a struct da lista e depois criar a struct do nó vc terá uma mensagem de erro ao tentar compilar. A lista possui um tipo nó dentro dela, por isso o tipo nó deve ser criado primeiro. Você até pode criar a lista e depois o nó, mas neste caso vc precisa colocar a assinatura de seu tipo nó antes da criação do tipo lista.
2) O asterisco (*) indica que é um ponteiro, agora, quanto à posição, esquerda ou direita, eu aprendi dessa forma e confesso que nunca testei coloca-lo à direita. Só testando rsrs.
3) Perceba que a variável manipulada nas linhas 16 e 17, que foi criada na linha 15, é um PONTEIRO para um tipo nó. Sempre que você for acessar os atributos de uma struct por meio de um ponteiro, você utiliza a seta (no->valor por exemplo). Em contrapartida, perceba que a variável lista acessada nas linhas 23 e 24, criada na linha 21, NÃO é um ponteiro para uma lista, é a própria lista, então você acessa seus atributos por meio do ponto (lista.tam por exemplo).
Espero ter ajudado. Abraços e bons estudos.
@@programeseufuturo se essa playlist existisse no tempo da faculdade
eu te amo
eu também :D
Duas declarações no mesmo dia? kkkk
Tudo bem, estou solteiro mesmo hahaha.
Olá gostaria muito de ajuda em um problema que não consegui resolver:
* Dada uma lista simplesmente encadeada, contendo apenas um ponteiro para o primeiro
elemento, escreva uma função em C que a divida em duas listas simplesmente encadeadas, de forma
que os elementos em posições pares fiquem em uma lista e os elementos em posições ímpares fiquem
em outra.
Como seria essa função?
Adorei o video, o canal está ajudando bastante a estudar pra prova
Obrigado pelo feedback Thalita. Farei o possível para ajudar com este problema.
Se, ao invés de apenas um valor int, a minha estrutura "No" tenha 2 valores do tipo string, eu teria que passar uma estrutura (No *dados, por exemplo) como parâmetro no procedimento "InserirInicio" e setar os 2 campos (novo->nome = dados->nome e novo->apelido= dados->apelido)?
Há várias formas de fazer isso Bard mas um detalhe importante é que você não consegue atribuir uma string a outra (uma string é um vetor). Você precisa copiar caracter por caracter ou ler a string diretamente para o campo de destino na struct.
Acredito que estas aulas irão te ajudar:
256: fila de pessoas: ua-cam.com/video/PebO6xIw3oc/v-deo.html
277: árvore de pessoas: ua-cam.com/video/nBuvdMXD7xc/v-deo.html
@@programeseufuturo Nossa, muito obrigado!
O meu dá o seguinte erro:
main.c: In function ‘inserir_no_inicio’:
main.c:19:19: warning: assignment to ‘struct No *’ from incompatible pointer type ‘No *’ [-Wincompatible-pointer-types]
19 | novo->proximo = lista.inicio;
| ^
main.c: In function ‘imprimir’:
main.c:30:16: warning: assignment to ‘No *’ from incompatible pointer type ‘struct No *’ [-Wincompatible-pointer-types]
30 | inicio = inicio->proximo;
A inserção de dados do tipo char, é o mesmo metodo do tipo int?
Olá Cstro. Sim, mas você precisa ficar atento ao buffer do teclado. Ao ler um caracter duas teclas são pressionadas no teclado, o caracter digitado e o ENTER, que também é um caracter. O caracter vai para a variável e o ENTER permanece no buffer do teclado e isso pode gerar problemas. Eu mostro isso aqui: ua-cam.com/video/0DPofLRkhy0/v-deo.html
Ufa! Obrigado pela aula!
Depois de muita luta consegui entender.
Mas gostaria de saber como eu faria para inserir mais dados na lista, por exemplo: Nome (char), classe (char )e nota (int ou float)?
Tentei incluir como elementos da struct no, mas não consigo atribuí-los às variáveis e chamá-los depois.
Olá Alexandre.
Não é difícil incluir novos campos. Isso pode ser feito diretamente dentro do nó da lista ou outra estrutura pode ser colocada dentro do nó da lista, mas para isso você precisa entender bem como funciona struct em C. Recomendo dar uma olhada nesta playlist do meu curso C: ua-cam.com/play/PLqJK4Oyr5WShSqejWzL5oMuujnHFeHhSC.html
É um nó entender ponteiro. Já tou frustado na facul
Ola professor tem o codigo?
Olá André.
Está aqui: wagnergaspar.com/lista-encadeada-com-a-linguagem-c/
meu senhor amado kkkk e de pensar que lista em python é uma coisa tao diferente.
struct no {
int chave ;
struct no prox ;
} ;
Suponha que o tamanho de cada nó do exercício código acima seja 8 bytes. Qual o tamanho
total de uma lista ligada composta por 100 nós? E se fosse armazenado todas as chaves
em um vetor de 100 posições, qual seria o tamanho total em bytes?
Por fim, existe alguma forma de implementar algum algoritmo usando sizeof que consiga me mostrar isso? nesse caso, em linguagem c.
Matemática básica Bruno.
Suponha que o tamanho de cada nó do exercício código acima seja 8 bytes. Qual o tamanho total de uma lista ligada composta por 100 nós?
Resposta: 100 * 8
E se fosse armazenado todas as chaves em um vetor de 100 posições, qual seria o tamanho total em bytes?
Resposta: 100 * 4
Por fim, existe alguma forma de implementar algum algoritmo usando sizeof que consiga me mostrar isso?
sizeof te mostra isso. Se você tem um vetor de inteiros de tamanho 100 basta descobrir o tamanho de um inteiro com sizeof e multiplicar por 100.
Eu mostro como descobrir o tamanho de cada tipo na aula 16: ua-cam.com/video/lw9UYSUryYM/v-deo.html
E como descobrir a quantidade de memória necessária para uma struct na aula 170: ua-cam.com/video/EJbIsx3iplU/v-deo.html
Não é por nada, mais que linguagem difícil de entender viu.
Com meu professor já entendi que é impossível por que parece que até ele mesmo não sabe, e com suas aulas ainda esta difícil o quê me resta agora ?
Olá Guilherme. Seja bem vindo ao canal.
Primeiro, é importante você entender que você não está sozinho. A lógica envolvida na programação é algo muito diferente da decoreba que aprendemos na escola e isso torna esse aprendizado, especialmente no início, muito difícil para muitos estudantes.
Por fim, gosto da comparação de que aprender programação é como ir a academia:
- se você chega lá e fica sentado, assistindo os outros, não terá nenhum efeito em você, é preciso por a mão na massa e praticar.
- se você vai apenas umas duas vezes na semana você perceberá pouco resultado (aprenderá o básico).
- se você vai com frequência, o resultado será mais rápido e duradouro. Você aprenderá o exercícios e como usar cada aparelho.
Programação é como aprender outro idioma (cheio de detalhes). A prática frequente leva a um bom aprendizado. E não esqueça, é muito mais eficaz você praticar 30 minutos por dia do que praticar duas horas seguidas no final de semana.
Professor, boa tarde, estou enganada ou o Sr está sem camisa ou roupas neste vídeo, nada legal para um homem, mas cada um com seu cada um.
E o que você tem a ver com isso?? Não teve lógica. É proíbido ficar sem camisa?
O cara ta em casa fazendo aulas de graça simplismente pq ele quer, e vc cobrando ele estar de roupa? Vai arrumar oq fazer em