Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: DynCall no Protheus: Uma Nova Era na Integração com C/C++

_Créditos das imagens: ChatGPT 🚀 **DynCall no Protheus: Uma Nova Era na Integração com C/C++** Do meu ponto de vista, um dos recursos mais interessantes na nova versão do Protheus "Onça Preta" é a possibilidade de uso do **DynCall**. A linguagem AdvPL/TLPP, utilizada no Protheus, pode ser considerada um "superconjunto" de Clipper com FiveWin, mas com características e funcionalidades específicas voltadas para o ecossistema TOTVS. Um dos recursos marcantes do Clipper e de linguagens padrão xBase, como Harbour, é a possibilidade de incorporar código C/C++ diretamente no código-fonte. Até então, o Protheus não suportava isso nativamente. No entanto, com a introdução do **DynCall**, é possível simular essa integração ao carregar e executar funções de bibliotecas dinâmicas (DLLs) escritas em C ou C++. A seguir, comparamos os recursos das linguagens xBase padrão (exemplificadas pelo Harbour) com a implementação no Protheus via DynCall e apresentamos exemplos dos nov...

BlackTDN :: LeetCode :: Solução para o Desafio 24 do Leetcode: Swap Nodes in Pairs em xBase

_Créditos das imagens: ChatGPT 

# Solução para o Desafio 24 do Leetcode: Swap Nodes in Pairs em xBase

O desafio [Swap Nodes in Pairs](https://leetcode.com/problems/swap-nodes-in-pairs/) propõe a inversão de pares adjacentes em uma lista encadeada, sem alterar os valores dos nós, apenas reorganizando as referências entre eles. Embora seja comum encontrar soluções em linguagens como Python ou Java, este artigo apresenta uma abordagem utilizando xBase, uma linguagem derivada do Clipper, conhecida por sua eficiência em aplicações comerciais e manipulação de dados.

## Implementação em xBase

A solução desenvolvida em xBase está disponível nos seguintes links:

- [README.md](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/024/README.md)
- [swap_nodes_in_pairs.24.1.prg](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/024/swap_nodes_in_pairs.24.1.prg)

O código define uma classe `TListNode` para representar os nós da lista encadeada, com atributos `value` (valor do nó) e `next` (referência ao próximo nó). A função `SwapPairs` é responsável por realizar a troca dos nós em pares.

### Estrutura da Classe TListNode


```xBase
function TListNode()
    static s_oTListNodeClass as object
    if (s_oTListNodeClass == NIL)
        s_oTListNodeClass := HBClass():New("TListNode")
        s_oTListNodeClass:AddData("value")
        s_oTListNodeClass:AddData("next", 10)
        s_oTListNodeClass:AddMethod("New", @TListNodeNew())
        s_oTListNodeClass:Create()
    endif
    return (s_oTListNodeClass:Instance()) as object
```


Este trecho define a estrutura básica de um nó da lista encadeada.

### Função SwapPairs


```xBase
static function SwapPairs(oHead as object)
    local oDummy as object
    local oFirst as object
    local oSecond as object
    local oCurrent as object

    oDummy := TListNode():New(0, NIL)
    oDummy:next := oHead
    oCurrent := oDummy

    while ((oCurrent:next != NIL) .and. (oCurrent:next:next != NIL))
        oFirst := oCurrent:next
        oSecond := oCurrent:next:next

        oFirst:next := oSecond:next
        oSecond:next := oFirst
        oCurrent:next := oSecond

        oCurrent := oFirst
    end while

    return (oDummy:next) as object
```


A função `SwapPairs` utiliza um nó fictício (`oDummy`) para facilitar a manipulação das referências durante a troca dos pares. Ela percorre a lista encadeada, identificando pares de nós adjacentes e ajustando as referências para inverter a ordem desses pares.

## Considerações Finais

Esta implementação demonstra a flexibilidade e capacidade do xBase em lidar com estruturas de dados complexas, como listas encadeadas, e algoritmos de manipulação de nós. A solução é eficiente e mantém a integridade dos dados, atendendo aos requisitos do desafio proposto pelo Leetcode.

## Hashtags

#xBase, #Harbour, #Programação, #ListaEncadeada, #Algoritmos, #DesenvolvimentoDeSoftware, #Leetcode, #SoluçãoDeProblemas, #LinguagemDeProgramação, #EstruturasDeDados, #SwapNodesInPairs 

Comentários

Postagens mais visitadas