o olá vamos aprender hoje como trabalhar com listas encadeadas em c isso mesmo eu apresentei essa semana no canal dois vídeos iniciando uma breve introdução à ponteiros se você não viu esses vídeos eu vou deixar aqui na descrição desse vídeo corre lá e a fita vamos então hoje criar aprender a criar uma lista encadeada e aí antes de iniciar propriamente os nossos códigos o que que a gente precisa fazer primeiro a gente precisa entender o que que é uma lista encadeada então eu tô aqui com o libreoffice calc aberto vamos entender para que que serve
o como funciona uma lista encadeada para depois então a gente implementar a nossa lista bom vamos primeiro entender qual a diferença entre uma lista eo vetor imagine que a gente criou então vetor de 5 bom então eu vou colocar aqui uma margem para a gente entender a diferença vou centralizar esses elementos quando a gente cria um retorno então a gente separa regiões de memória para guardar valores por exemplo vetor de números inteiros eu poderia então aqui em inserir elementos nessa cinco posições e aí qual a principal característica de um vetor uma vez que eu criei
um vetor como este de cinco elementos ele possui espaço ou ele possui tamanho 5 a tem como aumentar o tamanho tem eu posso usar alocação dinâmica de memória com realoque para então ao invés de ter um retorno de cinco tem um vetor com o dobro do tamanho 10 só que isso é muito custoso o ideal é quando você utiliza vetor você tem ali um tamanho finito e esse vetor não vai aumentar nem diminuir isso é muito gostoso utiliza a dinâmica de memória e aí como eu mostrei no último vídeo que eu postei sobre acessar vetor
com ponteiros ou por meio de aritmética de ponteiros imagina que esse motor aqui se chama vet normalmente quando a gente quer acessar uma posição dura toda a gente faz vet numa determinada posição por exemplo se for vet na posição eu vou então tá acessando essa posição aqui onde tá o elemento 85 no último vídeo nós vimos que a gente pode utilizar então o marit médica de ponteiro vet já é o endereço inicial do nosso corretor mais um isso aqui então eu estaria acessando a mesma pois está onde tem o número 85 vert é o endereço
onde nosso victor começa essa primeira posição quando eu somo um ah tá bom entendi que isso aqui é o endereço de memória e ele vai para o endereço de memória seguinte por quê que isso funciona injetor porque o vetor ela está de forma sequencial na memória uma posição depois da outra isso aqui em vetor agora isso eu preciso então utilizar uma estrutura de dados que vai crescendo eu posso ir inserindo elementos então no início tamanho dela é zero eu inserir um elemento tamanho é um eu inseri cinco elementos o tamanho é sim com uma estrutura
que vai crescendo como vetor a gente não consegue fazer isso como eu mencionei vetor em tamanho estático ele não fica crescendo e diminuindo de tamanho então nesse caso nós podemos utilizar outras estruturas como filas pilhas listas árvores e aí nós vamos ver aqui então hoje lista e aí eu já deixei pronta a caixinha com o nosso objeto lista imagine então que eu criei uma strut e você não se recorda como criar uma struct' nós vamos ver hoje como fazer isso o que que é uma struct' e aí vamos então entender como funciona a lista primeiro
toda a lista vai ter o que a gente chama de um nó é esse cara aqui e aí o que que tem esse nó nova basicamente é o nome da nossa estrutura então nós estamos criando o tipo no esse novo vai ser de um tipo bem simples eu vou ter que um valor que pode ser um inteiro e eu vou ter um ponteiro para um próximo elemento eu vou colocar até um asterisco aqui pronto então esse próximo é um ponteiro para um elemento desse tipo aqui então se eu fosse preencher um elemento desse tipo poderia
ser por exemplo o valor dele 15 e qual o ponteiro para o próximo elemento lulu então eu acabei de preencher um elemento do tipo nó só que esse cara aqui é um elemento do tipo não eu preciso ir em adiando uma sequência de nós e aí eu tenho dá uma segunda estrutura que eu estou representando ela aqui eu chamei as estrutura de lista e aí o que que essa lista vai possuir um ponteiro e para um tipo nó percebeu tem um nó aqui embaixo então essa minha lista vai possui um ponteiro para um tipo nó
e vai possuir tamanho e aí quando eu crio uma lista lembrando quando a gente cria nossa estrutura que a gente cria uma variável daquele tipo que que tem naqueles campos a gente não sabe pode ter lixo de memória ali então quando eu creio a minha estrutura eu preciso fazer a primeira coisa que eu preciso fazer dizer que o pão teve início ele é nulo ele não aponta para nenhuma região porque a minha lista tá vasilha e qual o tamanho da minha lista quando eu acabei de criar zé não tem nenhum elemento eu vou utilizar e
ficar aqui para ele fazer cópias então eu vou copiar ele oi e a imagine que eu criei o meu primeiro nós eu vou colocar esse ó aqui então esse nós vai estar numa região de memória por exemplo imagine que a zero é a região de memória aonde está esse nó que eu acabei de criar cria esse norden um valor para ele por exemplo 50 e quem é o próximo de sinnott ele aponta para quem para ninguém eu tô criando ele agora ele possui o valor 50 e não aponta para ninguém eu quero inserir esse nó
na nossa lista então eu vou aqui na minha lista e vou olhar o início anulo é nulo então eu vou fazer esse cara apontar para cá para esse não é que eu acabei de criar como que eu faço isso esse início da do tipo ponteiro significa que ele vai guardar um endereço de memória de sinnott qual o endereço de memória de sinnott a zero então o campo início não vai ser no mais vai ser a cela é feito isso eu preciso então dizer que o inserir mais alguém a lista a minha lista tem tamanho 00
mais 11 essa aqui é uma operação de incremento vai sempre aumentando um feito isso é porque aqui fica mais complicado para eu desenhar uma seta mas basicamente é como se eu tivesse uma seta apontando daqui para cá então o início da nossa lista é esse noc é o nosso primeiro nome a vamos inserir um segundo norma vou copiar o nosso nós de exemplo aqui vou colocar ele aqui pronto tem um segundo nós então imagina que esse nós está na posição de memória b3 é tão no endereço de memória b3 nós temos um nó qual que
é o valor desse nó 74 qual que é o próximo lulu eu acabei de criar ele agora então não tem ninguém nesse nosso nó então aí eu quero inserir esse nosso nó na nossa lista como que eu faço isso e aí tem um detalhe eu posso inserir esse nó no início ou no final porque que eu não informei isso aqui porque a nossa lista estava vazia então inserir no início ou no final não fazia a menor diferença agora imagine que eu vou inserir esse nó no início da nossa lista então o início tá apontando para
cá eu não posso simplesmente alterar esse início para b3 porque senão eu perco esse cara se eu ou inserir esse nome o início a primeira coisa que eu tenho que fazer é o próximo vai oi para o meu início tem a início a zero então o meu próximo aponta para 0 é como se eu tivesse feito uma seta daqui para cá não é esse noque tá na posição a zero então o próximo do meu 93 está apontando para o a zero quem é a zero esse cara aqui então é como se eu tivesse feito uma
seta de sinoc para cá agora que o meu nó de três está apontando para o nó zero eu posso vir aqui no meu início e dizer que agora o meu início é um nó b3 então lista início quem é início b3 quem é o 93 esse cara aqui quem é o próximo a zero onde está as ela tá aqui e quem é o próximo nulo não tem ninguém então isso era um esse é uma infecção no início da minha lista vamos inserir mais um e aí nós vamos lá para o código não sei eu vou
copiar vou colocar aqui o que nós vamos agora eu não copiei aí vamos copiar esse cara aqui vou colocar ele aqui imagine então que esse nosso nota na posição a dois de memória o valor desse nosso nó é 11 e o próximo dele é no mínimo vamos agora inserir-se nossa dois no final perceba que tem uma grande diferença e recordando se eu fosse inserido no início quem é o início da nossa lista b3 então esse nó no próximo e apontar para b3 que é esse cara aqui feito isso então o nosso início e apontar para
a dois que a esse cara aqui só que agora eu quero inserir no final bom então eu preciso percorrer a minha lista até o final então lista início quem é o início b3 vou lá para o b3 quem é o próximo a zero vou lá para o a zero quem é o próximo não tem ninguém então o meu próximo aqui agora é o a dois então perceba aqui por isso que ela se chama lista encadeada eu vou encad ando as minhas estruturas eu criei uma lista que inicialmente estava no lá não tinha ninguém aqui no
início aí eu inseri um nó b3 quem era o próximo não tinha ninguém insere um próximo elemento a quinta um próximo de b3 foi para zero o próximo de a 0 a 2 e dessa forma eu vou encadeando esses nós perceba que agora que eu não tenho ninguém e eu esqueci de incrementar então toda vez que eu vou em ser linda eu tenho que incrementar o tamanho se eu quiser isso aqui não é obrigatório e se eu quiser saber o tamanho da minha lista então tem um dois três nós então o tamanho da nossa lista
três esse incremento tem que ser feito em toda inserção então eu mostrei aqui como a gente faz uma exceção no início da lista e uma exceção no final da lista eu vou salvar vamos agora lá para o code blocks para a gente criar a nossa estrutura nó e a nossa estrutura lista em c eu estou aqui com o projetinho criado um projetinho zerado vamos então criar primeiro a nossa estrutura nó então para quem não se recorda typedef o strukt vou chamar esse cara de nó aí eu precisaria colocar esse apelido aqui não não é obrigatório
mas nesse caso eu vou precisar porque vamos voltar lá no libreoffice calc perceba que o meu nome ele possui um ponteiro para um cara desse tipo aqui olha então quando eu tenho meu nome no endereço de três o próximo a ponta por 1 a 0 o a 0 também é do tipo nó então quando chega aqui dentro eu vou ter um 20 chamado valor e eu vou ter um ponteiro para e o meu strut nó que eu vou chamar aqui de próximo só que esse cara que é um ponteiro então por isso que eu dou
um apelido aqui para ele conseguir identificar quem é esse estudo jerryscript nó e aqui é o apelido é o nome da minha estrutura que eu vou vá no meio poderia ser igual poderia ser igual não tem nenhum problema inclusive eu vou colocar igual aqui para evitar qualquer confusão então o que que eu fiz aqui das linhas 4 até a linha 7 eu criei o meu tipo de dado que eu tô chamando de nó e o que que esse notem é um campo inteiro chamado valor oi e um ponteiro para um elemento de si mesmo tipo
nó então esse aqui é o nosso nó eu vou criar agora nossa lista então typedef type death is truth e aqui eu nem preciso colocar esse apelido porque aqui dentro eu não vou ter um ponteiro para uma lista então aqui eu vou dar um nome de lista e aqui dentro que que essa minha lista vai ter essa minha lista vai ter um ponteiro para um cara do tipo ó então qual que é o nosso tipo nó e eu vou chamar ele de início só que ele é um ponteiro porque no início quando a nossa lista
estiver vazia esse cara vai ser nulo e um campo opcional eu posso ter aqui no tamanho da nossa lista o que no início vai ser zero então eu queria e aquelas duas caixinhas que nós tínhamos lá no libreoffice calc o nosso um nó e a nossa lista como que a gente utiliza isso no nosso programa agora vamos para o nosso man bom então a primeira coisa que eu preciso fazer o preciso criar minha lista tão lista perceba que é o nosso tipo de dado vou chamar ela de lista a posso chamar de lista posso perceba
que o hélio está minúsculo eu não posso fazer isso aqui porque fazer isso aqui é a mesma coisa que criar um tipo inteiro e querer chamar esse tipo inteiro de inte então eu tô criando um tipo inteiro chamando ele do próprio nome dele isso não pode ir aí é o que eu fiz aqui eu criei um tipo listen chamei com o mesmo nome não pode mais como e 1l minúsculo eu posso então eu tenho uma lista chamada lista com l minúsculo lembrando no início qual que é o estado da nossa lista vazio não tem ninguém
então eu preciso setar ou inicializar esses parâmetros como que eu o nome da minha lista ponto início quem que é o ponteiro quem que é o nome inicial dessa lista no início é nulo oi e o segundo parâmetro lista ponto tam recebe qual que é o tamanho inicial dessa nossa lista zero algumas pessoas se vocês forem procurar tutoriais na internet algumas pessoas preferem fazer uma pequena função só para fazer isso aqui eu prefiro fazer aqui dentro então fica a critério de cada um feito isso agora nós temos que fazer funções e procedimentos para manusear essa
nossa lista nós vamos fazer aqui um procedimento void inserir no início que foi lá primeiro operação que nós fizemos no exemplo que eu apresentei lá no libre office então o que que nós vamos receber aqui lembrando nós vamos trabalhar com ponteiros essa nossa lista tem que crescendo então eu vou receber um objeto do tipo lista que eu vou chamar de lista só que eu não vou receber o meu objeto lista porque eu mando a minha lista que qualquer alteração que eu fiz a nela quando terminar o meu procedimento de seria é essa essas alterações serão
perdidas eu não quero perder então eu vou receber um ponteiro para minha lista e eu vou receber um valor que será inserido nessa nossa lista ok agora vamos pensar o seguinte lembro o que que nós fazíamos lá no libreoffice calc vou voltar lá olha o que que nós fazemos para cada novo elemento nosso criar a vamos uma caixinha do tipo nó colocar vamos o valor ali você tá vamos o parâmetro próximo para nulo e aí então nós estamos fazendo esse encadeamento então a primeira coisa que a gente tem que fazer a criar um nó então
vamos criar que o nosso novo nó só que esse novo no lembrando tem que ser um ponteiro eu crio o nó desse tipo aqui assim que é que procedimento terminar esse nó ele vai sumir da memória porque ele é uma variável local e eu quero que ele continue existindo depois que esse procedimento terminar então vai ser do tipo ponteiro e aí nós vamos fazer uma locação de namica de memória é minha loki eu quero alocar memória suficiente para um tipo nó então eu tenho que passar para o enem loki o tamanho quanto de memória eu
preciso para um objeto do tipo nó ah mas eu não sei quanto de memória eu preciso para um nó como que eu faço isso e a própria linguagem seja tenha que já nos fornece uma função chamada size off e aqui dentro eu passo o que que eu quero saber o tamanho eu quero tamanho de um ó se nós fossemos traduzir esses ali ó que ele poderia ser traduzido como tamanho dele eu quero saber o tamanho de um nó na memória e eu vou alocar memória para um cara desse tipo aqui só que olha só eu
preciso dizer para esse cara quê que o retorno dele tem que ser do tipo ponteiro o nosso novo nós que ele é um ponteiro como que eu faço isso como que eu digo que é do tipo ponteiro eu venho aqui na frente à esquerda de a minha ló que abre e fecha o parênteses eu digo para ele olha você está locando espaço de memória para um tipo nó só que esse é um ponteiro tão feito isso ele vai separar uma região de memória por um tipo nó e vai retornar para a gente o ponteiro o
endereço de memória desse cara feito isso eu tenho então uma região de memória um ponteiro para um tipo nó criado então eu posso alterar e guardar esse nosso o valor lá dentro então novo certa lembrando como que o acesso uma região de memória eu poderia fazer isso aqui asterisco novo o ponto valor nossa mas isso é complicado é estranho essa forma abreviada faz a mesma coisa o nome da nossa variável certa e aí você escolhe qual campo você quer alterar eu quero alterar o campo o valor então eu tô dizendo que a região de memória
apontada por novo na posição valor vai receber quem esse valor aqui que é o valor que a gente quer inserir na nossa lista agora eu preciso dizer que o próximo dele é nulo porque eu tô criando esse esse novo não agora então ele não aponta para ninguém então novo certa próximo quem que é esse cara esse cara é nulo ele não aponta para ninguém bom então de novo eu vou até colocar como comentário aqui na frente essa linha é equivalente a fazer isso aqui é a mesma coisa e não perceba nós estamos trabalhando com ponteiros
então nós podemos fazer essas operações de duas formas a região apontada por esse ponteiro no campo valor recebe esse conteúdo aqui ou uma forma abreviada a região apontada por esse ponteiro no campo valor recebe esse conteúdo essas duas formas fazem a mesma coisa então se você encontrar em algum tutorial na internet algo parecido com isso aqui pode ser alterado para isso que ou vice-versa se você prefere dessa forma que aonde tá dessa forma você pode alterar para isso aqui feito isso nós temos então o nosso novo no criado nos já salvamos o valor no nosso
novo no ponto o valor e nós já dissemos que o próximo é nulo agora então eu posso inserir o nosso novo logo no início mas lembrando se eu vou inseri no início o ponteiro vai vai ser o primeiro nó da lista então ele tem que apontar para o restante da lista certo então eu posso alterar esse cara aqui olha ele vai apontar para quem ele vai apontar para lista seta início e eu não posso perder o que eu já tenho na lista então o meu próximo vai apontar para início da lista e aí o nosso
lista certa início vai receber o nosso novo perceba novo é do tipo ponteiro então lista pão que início início não é um ponteiro para um nó então ele está recebendo um novo que é um ponteiro para unlock nossa locamos aqui feito isso falta apenas uma coisa pra gente finalizar o nosso início aqui a nossa inserção aqui no início da lista eu preciso fazer aquele incremento então lista certa tam mais mais eu acabei de inserir um elemento na nossa lista então eu vou em implementar em uma unidade será que isso funciona bom para descobrir se isso
funciona deixa eu colocar um comentário aqui a inserção no início da lista porque eu vou criar um procedimento aqui agora para imprimir a nossa lista imprimir anitta é tão procedimento para imprimir void vou chamar só de imprimir porque a gente não vai ter mais de uma impressão vou receber aqui eu vou receber aqui um objeto do tipo lista só que eu não vou receber a minha lista propriamente eu vou receber um ponteiro para minha lista só que a minha lista ela tem uma sequência de nós certo então eu vou criar aqui um tipo nó que
eu vou chamar de início perceba que é um ponteiro esse ponteiro vai receber o início da nossa lista lista certa início e é esse cara agora que eu vou percorrer percebeu não sei qual é o tamanho da nossa lista ou na verdade eu sei porque a gente tem esse parâmetro só que qual a forma mais intuitiva de percorrer essa nossa lista início recebeu o início da nossa lista certo eu faço aqui um willy enquanto porque eu não sei qual é quantos elementos eu tenho nessa lista e imagine que eu não tivesse desse tamanho então enquanto
o nosso início for diferente o jilo uma grande maioria das vezes essas listas não terão o tamanho você não vai saber o tamanho da lista então você teria que percorrer a lista inteira se você quiser saber o tamanho então aqui dentro nós não vamos utilizar esse tamanho apesar de ele estar presente nós vamos manusear a lista como se nós não soubéssemos o tamanho dela é a forma como vai ser feito na grande maioria das vezes que você for trabalhar com lista então o nosso início que é do tipo nó um ponteiro para um nó está
apontando para lista ponto início a nossa lista por vasilha esse início vai ser nulo e não vai ser feito nada se ele não se a nossa lista não estiver vasilha esse nosso início vai ter aqui uma região de memória o endereço de memória então esse teste vai ser diferente de nulo e aí o que é que nós vamos fazer aqui dentro porém thief eu vou imprimir o valor que é e eu vou saltar um espaço de onde virá esse número inteiro do nosso início seta valor lembrando poderia ser parênteses asterisco início fecha parênteses ponto valor
poderia ser isso eu prefiro essa tinha então nós vamos imprimir aqui um número inteiro de onde virá se número inteiro do nosso ló início ponto valor ou certa valor é feito isso vou colocar chaves aqui porque a gente vai ter mais de uma linha aqui dentro abre fechei as chaves feito isso olha o que que vai acontecer trabalhar com ponteiros é necessário muita atenção o meu início o meu nome nisso está apontando para o início da lista se eu não fizer mais nada aqui esse laço vai ficar rodando infinitamente porque eu vou estar parado no
início da lista eu preciso percorrer eu preciso ir para o próximo nô como que eu faço isso o meu nome nisso agora vai receber início seta próxima eu vou para o próximo nó então em algum momento agora ele vai chegar no fim quando ele chegar no fim esse nicho vai ser nulo e aí ele vai finalizar e para ficar uma impressão mais bonitinho aqui no final eu vou saltar duas linhas contra barraine contra barra ainda só isso é feito isso agora vamos testar a nossa inserção no início e a nossa impressão eu vou vir aqui
no meio eu vou criar aqui agora uma duas variáveis inteiras uma opção e um valor e aqui agora eu vou fazer um menu por usuário poder ficar escolhendo o que que ele quer fazer então eu vou utilizar aqui eu vou pedir para o usuário escolher uma opção print efe então opção um será inserir lo início eu vou saltar uma linha opção 2 qual será a opção dois imprimir vou saltar uma linha e vou colocar aí opção cinco sair a começar aqui com as iniciais maiúsculas então opção um vai ser para inserir no início opção 2
para imprimir e opção 3 sair do nosso programa usuário vai digitar uma opção eu preciso então capturar essa opção ficando f é um número inteiro e eu vou salvar esse número inteiro em e comercial opção a nossa variável opção feito isso agora eu vou colocar aqui um switch case a suíte o que que a gente vai testar nossa variável opção e aí eu voltei aqui vários cases qual que vai ser o primeiro no caso 1 e no caso eu vou chamar então imprimir só que a gente vai ter que passar alguns parâmetros ver que ainda
eu vou só finalizar o break e depois eu volto o break monkeize feito isso nós precisamos no-break para a senão ele vai seguir direto nosso queijo e dois que que é o nosso queijo e dois e imprimir a que eu só preciso passar o endereço da nossa lista então eu já vou colocar ele aqui nós também precisamos do break e qual que é a opção sair opção sair é cinco então vou ter aqui um case 5 eu vou colocar aqui finalizando só falta uma linha no break para ele parar que também porque aqui no final
eu sempre coloco o de fogo o que que é o the fool episódio digital uma opção válida uma opção diferente do mundo dois dos cinco tão print f opção é válida então ovário vai saber que ele digitou algo que não é válido e como é o último eu não preciso aqui do é duro e perceba que essa chave aqui tá fechando a chave do baile nós precisamos na verdade eu criei o case 5 e o deixou fora da chave vamos colocar os dentro da chave e aqui eu vou ir dental nosso código para quem não
se recorda source code formatter faz isto automaticamente para a gente então eu tenho duas ele tá faltando o alho aqui com um sweet cases que isso opção 1 opção 2 opção cinco vamos colocar aqui o nosso uai e agora bom então o que é que eu vou testar aqui eu quero que foi que funcione enquanto a opção foi diferente de cinco então eu vou colocar aqui enquanto o opção foi diferente de cinco então enquanto a opção foi diferente de cinco usuário vai poder e não é imprimir aqui usuário vai poder inserir a inserir início isso
aí para poderem ser início vai poder imprimir a lista e vai poder ficar a testando isso aqui agora o nosso inserir vamos lá eu vou pedir aqui para o usuário o qual o valor que ele tem série a e digite um valor a ser inserido eu vou ler o que o usuário vai digitar e salvar vai ser um número inteiro e aonde que eu vou salvar esse número inteiro na nossa variável valor por isso que eu já tinha criado essa variável em cima agora então aqui dentro de inserir neste o que que eu preciso mandar
para lá o endereço da nossa lista e o valor que será inserido é feito isso se eu não cometi nenhum erro vamos testar o nosso código então vou ler opção se a opção for um rolê um valor vou chamar inserir início passando o endereço da lista e o número que eu quero inserir se for dois eu vou imprimir vou mandar o endereço da lista então aqui eu tenho a impressão da lista enquanto o início por diferente de nulo eu vou imprimir e vou para o próximo ea inserção e lembrando que nós estamos inserindo no início
então eu creio dinamicamente um novo nó salvo esse valor digo que o próximo como eu vou inserir no início digo que o próximo aponta para a lista ponto início mista início então vai ser o nosso novo nokia a gente acabou de criar e eu altere o tamanho da nossa lista aqui ah ah legal nós temos o tamanho vamos colocar desse tamanho aqui o print f o tamanho da lista dos pontos vou imprimir aqui e vou saltar uma linha tão de onde virá esse tamanho da nossa lista aqui da nossa lista seta a mãe um ok
eu vou aqui exibir a nossa barrinha de log para quem não se recorda me mande é aquele gerenciador que fica aqui do lado e blogs é pra gente visualizar aqui se ocorreu algum problema vou compilar o nosso código e vamos ver aqui na cara dura se vai funcionar ou se vai dar algum probleminha e aí o computador quase de uma travadinho aqui cadinho tá velhinho tá precisando de um novo já tu tá demorando para compilar mais às vezes demora mesmo de aprende dor da máquina e essa minha tadinha já tem uns bons anos e depois
de algumas horas então temos aqui vamos verificar eu vou pedir para imprimir a nossa lista 2 e o perceba que já deu algum problema aqui tamanho da lista 105 tem algo errado e perceba que o nosso menu não apareceu novamente então em algum momento eu fiz algo errado aqui vamos tentar descobrir o que foi que eu fiz de errado aqui a nossa olha só olha o que que eu cometi de erro aqui eu criei a nossa lista vim para o menu e pedir para imprimir a nossa lista só que olha aonde que eu deixei a
inicialização dos parâmetros da nossa lista tá vendo aqui em tempo real isso aqui tem que estar logo após a criação da lista porque quando chegou no imprimir o que que aconteceu aqui ele verificou o início da lista é nulo não porque eu não disse que era nulo então vamos colocar logo aqui aquelas linhas pronto antes de fazer qualquer operação eu preciso dizer que a minha lista começa com lulu e o tamanho da minha lista de zelo como eu alterei o código vamos compilar novamente espero que agora seja um pouco mais rápido o ok foi um
pouquinho mais rápido agora então vamos lá talvez é porque eu estou gravando vídeo também lá então estou gravando a tela do meu computador então esse tá exigindo bastante dele vamos imprimir a nossa lista ok perfeito tamanho zero vamos inserir um elemento vou inserir o elemento 55 vamos imprimir agora tão só tem um elemento 55 lembrando a gente está inserido no início eu vou inserir novamente agora então o inserir um eu vou inserir um elemento 10 vou imprimir novamente então agora tem que aparecer 10 depois do 55 então dois para imprimir 1055 eu vou inserir mais
um elemento sem inserir vou imprimir novamente então agora tem que ser sem 1055 e sem 1055 então perceba que nós estamos fazendo a infecção no início vamos voltar lá para o libreoffice calc então o que nós estamos fazendo ali a gente está criando um nó salvando o valor colocando o próximo dele para o início da nossa lista e o início da nossa lista está apontando para o nokia a gente criou então é o processo de inserção no início o novo nokia eu tô criando vai o próximo dele vai sempre a contar para o início e
depois o lista ponto início aponta para esse novo moto eu acabei de criar bom então foi isso que a gente acabou de fazer aqui eu vou dar uns aí vamos agora fazer uma inserção no final nós temos aqui a inserção no início da nossa lista e se eu quiser inserir no final será que tem muita alteração vamos fazer aqui então e inserir no final da lista então é um procedimento eu não tô retornando nada inserir fim que que eu vou receber lista um ponteiro com a minha lista lembrando olha só e valor então lembrando esse
cara aqui tem que ser o nome do seu tipo lá da sua estrutura de lista esse aqui pode ser qualquer nome você pode vir aqui colocar por exemplo minha variável desde que você saiba que é um ponteiro para um objeto do tipo nista você o que você quiser eu tô dando o nome de vista porque interessante você olhar o nome da sua variável e já tem uma ideia do que é que ela variável para que que ela serve e esse cara aqui então é o valor que nós iremos inserir feito isso então primeira coisa eu
vou criar um novo nossa a gente tem que ser um valor eu preciso de um nó nó novo novamente eu tô chamando de novo você pode dar um nome que você quiser precisamos alocar memória para esse cara é minha loki sign-off eu quero quanto de memória eu quero memória suficiente para um nó só que eu quero o endereço dessa região de memória então nó um asterisco eu quero quantidade de memória suficiente para um nó só que eu quero o endereço de memória então eu recebo aqui esse endereço de memória agora eu a fazer um novo
ponto valor vai receber o nosso valor aqui em cima perceba que apesar do mesmo nome são elementos diferentes esse valor aqui vai vir um lado média o valor que eu quero inserir esse valor aqui tá dentro do nosso nop seba no nosso nós temos o próximo e o valor então esse campo valor vai receber a minha variável valor como eu vou inserir no final quem vai ser o próximo desse cara aqui eu não vou ter próximo ele vai ser nulo então eu vou vir aqui ao invés de fazer ele receber o início ele vai receber
lulu porque depois dele não tem ninguém que que eu vou fazer aqui perceba que não é exceção no final eu tenho duas situações que a minha lista tiver vasilha é algo semelhante ao que a gente fez na anterior vai ser o primeiro nó da nossa lista então vamos a verificação aqui nossa lista seta início é igual anulo cinza que for verdadeiro significa que a nossa lista está vazia então o que a gente vai fazer uma infecção bem simples lista certa início recebe e nisso é um ponteiro qual o ponteiro que a gente foi aqui o
nosso novo que é o ponteiro para o novo nosso a gente acabou de criar feito isso lista seta tam mais mais eu acabei de inserir alguém nessa nossa lista mas isso é a nossa lista não estiver vazia isso lista aponta início já tiver alguém então eu preciso percorrer essa lista até o final então eu vou criar aqui um outro ponteiro que eu vou chamar de vó e não perceba que eu tenho duas variáveis do tipo ponteiro para um nó esse aqui que eu vou usar agora e esse aqui é um novo que a gente já
criou e já não seria o elemento aqui agora que que eu vou fazer sinnott que eu acabei de criar vai receber o início da minha lista lista ponto início agora eu vou fazer aqui uma repetição enquanto o meu nó só que ele quem que eu vou verificar eu não quero em seria ficará no final esse cara que a gente acabou de chegar eu não quero inserir ele no final da minha lista então quê que eu vou verificar aqui dentro enquanto o nó o próximo por diferente de nulo eu simplesmente vou ir para a próxima posição
só recebe nó ponto próximo vamos lá de novo imagina que a minha lista já tem dois nós então lista compromisso é igual a no não vem para cá como esse nova e receber o início da minha lista ele tá contando para o primeiro não então próximo dele é diferente de lula sim é porque eu tenho outro eu tenho dois nós então ele vai apontar para o próximo aí voltou tô no segundo nós o próximo do segundo não é diferente de nulo não porque eu só tenho dois ele é nulo então quando enquanto terminar eu vou
estar parado exatamente no meu último nó da lista então eu vou dizer que esse nó ponto próximo que é nulo e vai receber o novo ano bom então nesse novo nosso olho que a gente criou aqui em cima se o início da lista tá nulo eu ensino ele aqui senão eu vou encher ele aqui feito isso então o que que falta fazer a nossa lista por isso que eu preciso de uma cópia eu preciso acessar minha lista aqui embaixo se eu vou percorrendo aqui a minha lista lista recebe lista ponto próximo então eu perco esse
cara que eu não posso perder ele então lista ponto tam mais mais e a gente pode fazer uma melhoria aqui perceba que eu tenho lista certa tem mais mais aqui quando a lista está vazia e eu também tenho ele aqui quando a lista não está vazia ou seja é a mesma coisa que eu preciso nas duas situações então eu vou copiar essa linha vou retirar ela daqui eu também vou retirar ela daqui ó e vou colocar ela abaixo do infiel se porque ela sempre porque ela sempre será feita então independente da inserção ser no início
ou no final eu vou fazer esse incremento feito isso então finalizou o nosso processo de inserção no final da lista vamos lá no nosso meio e agora chamar o nosso inserir sim bom então eu vou colocar aqui uma nova opção 3 o iniciar com maiúsculo inserir no fim vou saltar uma linha vou inserir aqui agora o nosso case 3 dois pontos vou chamar o inserir fim passando o endereço da nossa lista e passando um valor que eu ainda não tenho eu vou pedir aqui vou colocar o nosso break e não posso esquecer do break e
aqui agora eu vou copiar esse trecho onde eu tô pedindo para o usuário qual o valor eu quero inserir e vou colocar aqui ó o filme cometi nenhum erro vamos compilar o nosso código e vamos testá-lo e aí o ok compilou aqui duas horas depois vamos então verificar hoje nós temos vencer início que já estava funcionando então vou inserir no início o elemento 10 vou imprimir e opção 2 lista tamanho um tenho 10 vou inserir no início novamente agora o 20 vou imprimir nós temos então agora o 2110 eu vou inserir no final agora opção
3 inserir no final vou digitar aqui o número um então nós teremos a sequência 2010 eun e vamos imprimir para ver se funcionou então perceba que nós temos agora a lista três tamanho 3 2010 eun vou inserir no final novamente o sem vou imprimir temos o 21 10 11 e o sem vou inserir uns 50 no início 50 vou imprimir nós temos os 50 no início vou inserir o 3 no final inserir no final três vou imprimir novamente temos o 3 no final e perceba que tamanho da nossa lista tá sempre atualizado então hoje perceba
que a nossa aula foi um pouquinho mais extensa mas foi aí muito interessante nós mostramos como criar uma lista a lista o que que é uma lista é uma estrutura muito semelhante ao vetor um conjunto de elementos porém o vetor ele é fixo você criou e atua com tamanho 10 ó e vai ter tamanho 110 e aqui nós temos então uma lista com infecção no início e inserção no final e impressão da nossa lista nós temos agora uma estrutura de dado dinâmica ela vai crescendo conforme a necessidade se ficou qualquer duvida postem nos comentários que
eu farei o possível para estar respondendo todas as dúvidas se você não curtiu o nosso canal tá marcando bobeira curta o nosso canal aperta o sininho aí para ser notificado do mais grande abraço e até a próxima dica