salve salve turma sejam bem-vindos a mais um vídeo aqui do Xavier Cold nesse curso de dominando estruturas de dados 1 Eu sou Professor Doutor Samuel bater Martins Professor Samuka Seja bem vindo ao prazer estar novamente aqui com vocês a partir desse vídeo nesse nos próximos nós continuaremos estudando tópico de listas encadeadas porém agora nós iremos uma variante uma variação do das listas simples né que nós vemos nos vídeos passados e se trata das listas duplamente encadeadas ou seremos que a mudança é Sutil porém muito poderosa é que vai facilitar muito a nossa vida em alguns
dos algoritmos Tá bom então eu já peço para já surgiram na verdade que você pega o seu café já tô com meu café aqui pega uma água também deixa seu like nesse vídeo se inscreva no canal se você é novo ainda não se inscreveu tá bom E compartilhe esse vídeo com seus amigos pessoal tem dado bastante trabalho é produzir esse curso eh acredito que o Estado está sendo bem favorável né Mas e o curso é totalmente gratuito Então passe esse vídeo para seus colegas interessados aí porque me dá Vou tentar dar um curso numa perspectiva
um pouquinho mais aprofundada do que tem nos livros né com a visão um pouquinho fora do clássico cantavam mais operacional mesmo lembrando para você que novo que chegou aqui nesse vídeo nesse nesse no canal né Por conta desse vídeo aqui na descrição você encontra o link da playlist completa aqui do Xaveco hoje né do desse curso na verdade dominante estruturas de dados uma tô até com o link aqui aberto até a publicação desse vídeo atual nós já temos 65 vídeo então tem bastante coisa aqui também para vocês darem uma olhada e também tem um link
do repositório no Git Hub onde vocês encontram todos os códigos feitos nos vídeos separados aqui por link bem bonitinho bem organizado para facilitar os estudos de você se por fim se você está gostando do conteúdo aqui desse curso o dominando estrutura de dados 1 Eu sugiro que você entre no nosso canal aqui no chave code na aba de playlists onde você tem o superar é playlist de outros cursos minicursos que eu tenho produzido aqui no canal então nós temos desde já fala sobre alguns pênaltis Java para desenvolvimento web tem alguns mini curso de redes de
computadores algumas outras coisas e tô começando a gravar uma série de cursos da trilha de deitar as ações que a área que eu tenho trabalhado há muito tempo então nós já temos até a gravação desse vídeo um curso sobre Pai então para deitar Science manipulação de dados usando o pandas ainda tem muita coisa programada para os próximos meses então dá uma olhada lá e compartilhe esse vídeo com seus amigos né para faz pra galera se inscrever porque ainda temos muito poucos inscritos 1150 que eles temos que crescer muito escada não ainda muito bem depois dessa
Bela introdução vamos começar então a estudar esse tópico de listas duplamente encadeadas vamos lá pessoal uma lista duplamente encadeada ela é uma lista encadeada como nós vimos com a única mudança que nós temos é o seguinte agora todo nó além de apontar para o próximo nodo da lista ele também aponta para o nó anterior pornô antecessor essa basicamente é a única mudança que nós e do para mentir encalhada por uma lista encadeada Simples então note aqui nesse nesse deseinho cada nora e continua tendo o valor uma série de valores né que ele pode ter na
estrutura de nós tem aqui o nosso ponteiro para o próximo ao da lista e agora esse ponteirinho vermelho que é para o anterior para o nó antecessor e nós que deu uma observação muito importante que o anterior ao primeiro nome da lista não existe né então ele é setado como nulo assim como o próximo nó no final da lista né que a gente tinha visto nos vídeos passados ele não existe ele é nulo também então a gente usa a mesma estratégia aqui então esse é o desenho base de uma lista duplamente encadeada se você comparar
com uma lista encadeada simples A única diferença é o que tá de colorido aqui de vermelho e de azul basicamente é isso tá bom que que ela vai ser útil para nós o fato da gente conseguir ter acesso ao elemento anterior do Nossa lista faz com que a gente consiga navegar nas duas direções Então como a lista encadeada simples a gente eu só conseguia Navegar indo para frente né não conseguia voltar o que era muito ruim que por exemplo lembra quando a gente tentava remover um dado elemento no meio da lista por exemplo removi o
elemento 4 o que que acontecia que a gente tinha um ponteiro para chamei de pós né que tinha que apontava para esse que era que a gente ia remover e a gente quer caminhar com um ponteiro auxiliar para o interior que no nosso prev aqui né então isso é uma limitação que nós temos porque não só conseguimos navegar na lista no sentido é para para frente né não conseguimos voltar na nossa lista agora não agora a partir de qualquer nota Nossa lista a gente consegue tanto ir para frente compre para trás gente consegue fazer essa
essa navegação da lista o que Vai facilitar muito vários algoritmos justamente por essa navegação nos dois sentidos Se você pegar aqui a definição é a definição lá praticamente não muda da definição do de uma lista encadeada simples basicamente que nós vamos colocar aqui é esse ponteiro o antecessor na estrutura de nós então aqui eu tenho uma estrutura que eu chamei de Dublin node que seria o nosso duplamente esse na hora continuar tendo o único valor inteiro que é esse o exemplo que a gente tá dando Então tá aqui o nosso valor inteiro agora ele tem
esse nome anterior vamos fazer aqui de verde ou senão anterior aqui né sendo que o anterior do primeiro nome ele é vazio e a lista continua tendo o nó perdão continuar tendo um nó paro próximo elemento da lista na continuar tendo esses camaradas aqui então eu chamei aqui o deu o apelido né a definição de dessa estrutura chamei de Dublin node ou simplesmente de noite tá bom e o motivo para isso pessoal que geralmente a uma a implementação de uma lista encadeada nos pacotes ou na linguagem de programação e tudo mais geralmente por padrão eles
utilizam lista duplamente encadeada então ao invés de usar esse nome grandão que eu vou deixar aqui também para ficar claro que é um nó duplo né com podendo ir para frente ou para trás eu vou chamar simplesmente de nó tá bom de noite e quando eu falo noite eu o padrão que a gente vai utilizar a partir de então que é o nó duplamente encadeada da mesma forma a gente tá nós estamos partindo da estratégia de dividir em estruturas diferentes uma e outra pra lista né então nós temos a nossa lista duplamente encadeada que vai
ter um ponteiro para o começo da lista um ponteiro para o final nós também estamos colocando aqui o tamanho da lista né que nós temos os vídeos passados que só que nos facilita em algumas operações em alguns algoritmos então eu já estou adicionando isso aqui também e aqui eu coloco esse nome grandão blynk deles e simplesmente lista que vai vai ser a mesma coisa então são dois apelidos para mesma estrutura então basicamente é isso que nós temos Tá bom então vamos agora para a implementação e da nesse vídeo vamos ver então a criação do tipo
abstrato de dados e da implementação dessa dessas definições aqui e a partir do próximo vídeo nós Voltaremos com aquela série de funções que nós fizemos em inglês um simples mas no caso nos veremos apenas essas quatro primeiros mais isso eu mostro nos próximos vídeos Vamos então ao nosso código então deixa eu aqui no terminal eu já Adiantei um pouquinho umas coisas aqui para o vídeo ficar mais curto o que que eu fiz aqui foi seguinte pessoal aqui dentro da pasta principal do nosso repositório né de códigos aqui é o domínio de estrutura de dados 1
eu queria Então essa pasta aqui ó listas duplamente encadeadas então aqui dentro de listas duplamente encadeadas nós temos bem teremos a tem os slides e tem a pasta Colts e dentro da pasta Todos nós temos aqui várias subpastas que são eu tem hora que eu chamo de vídeo um a hora que eu chamo de Parte 1 Parte 2 e assim por diante que são os códigos específicos para cada vídeos sobre esse tópico Tá bom então tô chamando aqui de parte 1 por conta de ser o os códigos dessa primeira parte dos vídeos ou desse primeiro
vídeo desse tópico Tá bom então vem aqui em parte 1 bom e o que eu fiz foi o seguinte ó eu copiei o código né cadê listas encadeadas simples eu copiei a última versão da nossa biblioteca que nós fizemos nos vídeos no até o vídeo anterior que tá aqui ó parte 16 então eu copiei a nossa Líbia dica Nossa biblioteca de código de estrutura de dados feitos no último vídeo para cá então eu simplesmente fiz isso eu vou abrir então aqui alivia dele deixou até dar um jeito que a linha aqui para limpar qualquer coisa
que esteja já compilada e eu vou abrir aqui o vs Code em cima dessa dessa biblioteca de código Está bom eu já tenho aqui e o que eu já Adiantei para deixar o vídeo mais curto foi seguinte eu já queria o nosso tipo abstrato de dados aqui então aqui no iCloud eu criei a o arquivo list.hr Poderia chamar de Dublin que delícia mas como nós estamos assumindo que quando eu falo lista simplesmente já viu por padrão vai vai ser remeter a uma lista duplamente encadeada eu sempre fiquei as coisas aqui coloquei list.hr então dando uma
olhada aqui ó no lixo para pagar o que que nós temos a e nós temos é o nosso inclusive guards né para evitar múltiplos imports múltiplo múltiplos inclusive desse arquivo se você não tem ideia do que isso do que isso significa eu acho que é o vídeo 30 e pouco aqui do Xavier Coutinho se você vir aqui acho que o vídeo 36 talvez dá um 38 do vídeo 38 acreditando múltiplos incluindo centro de Guarulhos eu falo sobre o que que é esse camarada aqui e aqui como nós estamos partindo né do pressuposto que nós estamos
Escondendo a implementação das nossas estruturas e funções num arquivo de implementação pontos e aqui nossa definição eu tô simplesmente colocando apenas o seguinte ó existe um uma estrutura chamada Anderlaine da Anderlaine emoji que tem os apelidos né tem os tipos de dados w Hinode Hinode e a mesma coisa aqui para nossa lista duplamente encadeada que a implementação delas estão em algum lugar e aonde que está essa implementação está justamente aqui na nossa prestações em list pontos e então o que eu fiz aqui neste e eu inclui então nosso disso pode pagar que eu nosso arquivo
aqui de definições Eu já coloquei alguns inclui diz é alguma importei aqui algumas bibliotecas padrão aqui que nós utilizaremos e a quinta exatamente a deixa até colocar na tela do lado da exatamente essa definição aqui da nossa lista né exatamente que nos vemos nos slides estão aqui tá bom então estou chamando dessa dessa forma tem um dele noite poderia que ser né na nossa lista simplesmente node se você quiser para facilitar Então a gente tem um nó aqui porque vai ser a mesma coisa então vou deixar dessa maneira aqui e para terminar o vídeo vamos
compilar esse camarada para compilar nós temos aqui o meio que fácil que nós também construímos aqui no nesse curso Então também na playlist do curso tem toda a parte de compilação como é que faz que eu não vou entrar em detalhes aqui mas pro compilar um arquivo novo eu venho aqui na minha tarde te ligo e de último arquivo compilado é esse que não tem a \então eu vou colocar uma barra invertida do público a linha Vou apagar a/invertida e vou colocar aqui ó list. Ó tá e dessa forma aqui por fim vamos compilar esse
camarada aqui ó vamos dar um make Ah então está compilando toda a biblioteca deixa eu aumentar aqui para vocês vamos colocar aqui desse lado grande então deixa dar uma e Clean e compilar tudo de novo então onde que está aqui ó e compilou Então a nossa biblioteca na sem erro de compilação ela tá funcionando bonitão aqui bonitona aqui para nós então a partir do próximo vídeo no próximo vídeo nosso corpo e ficaremos os construtores de instrutor dessas dessas estruturas e depois a gente vem de fato com a implementação das funções para listas duplamente cadeado Então
é isso aí pessoal Nos vemos no próximo vídeo até mais