Back home

Estrutura de dados 3 – Suporte ao idioma

Estruturas de dados — Suporte ao idioma (Parte 3)

Estruturas de Dados - Suporte ao Idioma (Parte 3) Estruturas de Dados 3 - Suporte ao Idioma

matrizes matrizes

O suporte para matrizes de enésima dimensão geralmente é integrado diretamente na própria linguagem principal. Eles existem na maioria dos idiomas, senão em todos eles. O suporte para matrizes n-dimensionais geralmente é integrado diretamente na própria linguagem principal. Eles existem na maioria, senão em todos os idiomas.

Alguns idiomas indexam de zero enquanto outros indexam de um. Alguns idiomas indexam a partir de 0, enquanto outros indexam a partir de 1.

Matrizes dinâmicas matriz dinâmica

###java

Java oferece algumas classes, sendo a mais conhecida a classe ArrayList. Java fornece duas classes, a mais famosa delas é a classe ArrayList.

###python

Em Python, lista é um tipo de dados, assim como strings e números. É uma implementação de arrays dinâmicos. Em Python, uma lista é um tipo de dados, assim como strings e números. É uma implementação de array dinâmico.

###C++

O std::vector do C++ é uma implementação de arrays dinâmicos. O std::vector do C++ é uma implementação de um array dinâmico.

C# também oferece a classe ArrayList como em Java. C# também fornece classe ArrayList como Java.

lista vinculada lista vinculada

###java

Em Java, List é uma interface, onde a classe LinkedList implementa a interface List. É implementado como uma lista duplamente vinculada. Em Java, Listis é uma interface na qual a classe LinkedList implementa Listinterface. É implementado como uma lista duplamente vinculada.

###python

Python não possui uma implementação de lista vinculada integrada. As listas Python não são listas vinculadas, são matrizes dinâmicas. Python não possui uma implementação integrada de listas vinculadas. As listas Python não são listas vinculadas, são matrizes dinâmicas.

###C++ O contêiner de lista na biblioteca padrão do templo é uma implementação de lista duplamente vinculada. O contêiner de lista na biblioteca padrão do templo é uma implementação de lista duplamente vinculada.

###C# Em C#, existe uma classe LinkedList como em Java. Também é implementado como uma lista duplamente vinculada. Em c#, existe uma classe LinkedList, assim como em Java. Também é implementado como uma lista duplamente vinculada.

pilha de pilhas

###java Em Java, possui uma classe Stack. Em Java possui uma classe de pilha.

###python

Python não possui uma classe de pilha explícita, mas há uma seção na documentação do Python sobre o uso de listas como pilhas. Python não possui uma classe de pilha explícita, mas a documentação do Python possui uma seção sobre o uso de listas como pilhas.

###C++ Em C++, stack faz parte da biblioteca de modelos padrão. Em C++, stack faz parte da biblioteca de modelos padrão.

###C# C# também oferece a classe Stack como em Java. C# também fornece classes de pilha em Java.

filas filas

###java Queue é uma interface assim como List era. Existem várias classes concretas que suportam o comportamento da fila. A classe LinkedList na verdade suporta um comportamento de fila simples. Queueis é uma interface idêntica a List. Existem várias classes concretas que suportam o comportamento da fila. Na verdade, a classe LinkedList suporta um comportamento de fila simples.

###python

O módulo queue oferece uma classe de fila. É especialmente útil ao trabalhar com threading, que é muito comum em filas. Também é possível utilizar listas como filas, porém as listas não são eficientes para esse fim. O módulo queue fornece uma classe de fila. É particularmente útil ao lidar com threads, que são muito comuns em filas. Também é possível utilizar uma lista como fila, porém as listas não são eficientes para esse fim.

Collections.deque é uma implementação alternativa de filas ilimitadas com operações rápidas de anexação atômica () e popleft () que não requerem bloqueio. deque é uma implementação alternativa de filas ilimitadas com operações atômicas rápidas de apêndice() e popleft() que não requerem bloqueio.

###C++

Em C++, existe um queuecontainer na biblioteca de modelos padrão. Em C++, existe um queuecontainer na biblioteca de modelos padrão.

###C#

Em C#, existe uma Queueclass. Em c#, existe uma Queueclass.

##Deque ###java

Java também possui uma interface Deque, assim como Queue. A classe LinkedList também implementa essa interface Deque. Java também possui interfaces suficientes como Queue. A classe LinkedList também implementa essa interface Deque.

Observe que LinkedList está se tornando uma classe muito flexível em Java. Ela pode se comportar como uma lista encadeada e como uma fila, e pode se comportar como uma fila dupla; deque. Pode ser como uma lista encadeada, pode ser como uma fila, pode ser como uma fila dupla; fila dupla.

###python

Python também possui uma classe deque para isso. Mesmo que você possa usar uma lista Python, o deque é otimizado para esse tipo de uso; anexa e aparece em cada extremidade. Python também possui uma classe deque para isso. Mesmo que você possa usar uma lista Python, o deque é otimizado para esse uso; anexando e aparecendo em qualquer extremidade.

###C++

Em C++, existe um dequecontainer. Em c++, existe um dequecontainer.

###C# Ele não possui um deque explícito integrado, mas podemos fornecer um comportamento equivalente com uma lista vinculada ou até mesmo um array dinâmico. Esteja ciente de que mudar elementos na matriz não é uma tarefa eficiente. Não possui um deque explícito integrado, no entanto, podemos usar listas vinculadas ou até mesmo matrizes dinâmicas para fornecer comportamento equivalente. Apenas mantenha o controle, porque mover elementos em uma matriz não é uma tarefa eficiente.

Filas prioritárias fila prioritária

Assim como uma lista pode ser implementada com uma lista vinculada ou um array, uma fila de prioridade pode ser implementada com um heap ou uma variedade de outros métodos. Assim como as listas podem ser implementadas usando listas vinculadas ou matrizes, as filas de prioridade também podem ser implementadas usando heaps ou vários outros métodos.

###Java Java possui uma classe PriorityQueue, que é baseada em um heap de prioridade. Java tem uma classe PriorityQueue baseada no heap de prioridade.###Python O módulo de fila oferece uma classe PriorityQueue, que usa o módulo heapq nos bastidores para priorizar as entradas da fila. O módulo heapq usa a estrutura de dados heap.

Queue.PriorityQueue é uma classe thread-safe, enquanto o módulo heapq não oferece garantias de thread-safe. fila. PriorityQueue é uma classe thread-safe e o módulo heapq não fornece garantias de thread-safe.

###C++

C++ possui prioridade_queuecontainer, que também é implementado como uma estrutura de dados heap. c++ possui prioridade_queuecontainer, que também é implementado como uma estrutura de dados heap.

###C# C# não contém uma classe de fila prioritária. Porém, existem diversas implementações para filas prioritárias disponíveis na internet. C# não contém uma classe de fila de prioridade. No entanto, existem diversas implementações de filas prioritárias na internet.

Matrizes Associativas Matriz associativa

A maioria das matrizes associadas, sejam elas chamadas de dicionários, mapas ou hash, são implementadas usando algo chamado tabela hash, e a própria tabela hash é uma estrutura de dados muito importante e útil. A maioria das matrizes associativas, sejam elas chamadas de dicionários, mapas ou hashes, são implementadas usando algo chamado tabela hash, que por si só é uma estrutura de dados muito importante e útil.

Outras linguagens usam árvore de pesquisa binária (provavelmente uma árvore vermelha e preta; um tipo de árvore de pesquisa binária com equilíbrio automático) onde cada nó possui uma chave e um valor associado. Então, se você quiser manter suas chaves em uma ordem de classificação, as tabelas hash não são muito boas nisso, mas as árvores de pesquisa binária são. Outras linguagens usam uma árvore de busca binária (talvez uma árvore vermelha e preta; um tipo de árvore de busca binária com autoequilíbrio) onde cada nó possui uma chave e um valor associado. Portanto, se você quiser manter suas chaves ordenadas, as tabelas hash não são boas para isso, mas as árvores de pesquisa binária são.

###java Em Java, possui interface Map assim como List. Ele define as operações para matrizes associativas, enquanto as classes HashMap e HashTable são implementações dessas operações baseadas na estrutura de dados da tabela hash. Em Java, possui a mesma interface de mapeamento que List. Ele define operações em arrays associativos, e as classes HashMap e HashTable são implementações dessas operações baseadas na estrutura de dados da tabela hash.

HashTable é melhor ao trabalhar com aplicativos multithread, onde você tem diferentes threads acessando e alterando essa tabela hash, mas isso adicionará um custo de desempenho.

ConcurrentHashMapclass é um substituto para o antigo HashTable. ConcurrentHashMapclass é um substituto para o antigo HashTable.

Existe também o LinkedHashMap, que usa lista vinculada para iterar sobre os itens da mesma forma que foram inseridos.

Embora a classe TreeMap também implemente a interface Map, na verdade é uma RedBlackTree, que é uma árvore de pesquisa binária com autoequilíbrio.

##Python Em Python, eles são chamados de dicionários. Eles são implementados como um tipo de dados chamado dict, assim como strings e números. Eles são implementados como um tipo de dados chamado dict, assim como strings e números.

##C++

C++ oferece std::unordered_mapcontainer na biblioteca de modelos padrão, enquanto std::mapcontainer é a versão classificada que normalmente é implementada como árvore de pesquisa binária. C++ fornece std::unordered_mapcontainer na biblioteca de modelos padrão e std::mapcontainer é a versão classificada, geralmente implementada como uma árvore de pesquisa binária.

###C#

Em C#, eles estão disponíveis nas classes Dictionary<TKey,TValue>, Hashtable e StringDictionary, enquanto a classeSortedDictionary classifica os pares chave-valor que são implementados como uma árvore de pesquisa binária. Em C#, eles estão disponíveis nas classes Dictionary<TKey, TValue>, Hashtable e StringDictionary, enquanto a classe LessoredDictionary classifica pares chave-valor implementados como árvores de pesquisa binária.

conjuntos conjuntos

A ideia de um conjunto; ter um grande contêiner onde você pode colocar vários itens nele geralmente é implementado usando tabelas hash ou árvores de pesquisa binárias. O conceito de conjunto; geralmente uma tabela hash ou árvore de pesquisa binária é usada para implementar um grande contêiner no qual muitos itens podem ser colocados.

###java

Em Java, possui interface Set assim como List e Queue, enquanto as classesHashSet e TreeSet implementam a interface Set. Em Java ele possui interface Set assim como List e Queue e as classes lehashset e TreeSet implementam Setinterface.

HashSet é implementado internamente usando um HashMap, enquanto TreeSet é implementado internamente usando TreeMap. HashSet é implementado internamente usando HashMap, enquanto TreeSet é implementado internamente usando TreeMap.

###python

Python oferece suporte aos tipos set e frozensetdata. frozenset é uma maneira de tornar o conjunto imutável depois de criado. Python oferece suporte aos tipos set e frozensetdata. frozenset é uma maneira de tornar uma coleção imutável após criá-la.

###C++

Tal como acontece com os mapas, C++ também oferece std::unordered_setcontainer na biblioteca de modelos padrão, enquanto std::setcontainer é a versão classificada que normalmente é implementada como árvore de pesquisa binária. Assim como o mapeamento, C++ também fornece std::unordered_setcontainer na biblioteca de modelos padrão, e std::setcontainer é a versão classificada, geralmente implementada como uma árvore de pesquisa binária.

###C#C# também oferece a classe HashSet que usa a tabela hash como em Java, enquanto SortedSet é a versão classificada. C# também fornece a classe HashSet, que usa tabelas hash como em Java, e SortedSet é a versão classificada.

gráficos gráficos

Não há suporte direto para estrutura de dados gráficos em linguagens (igual às árvores). Porque a implementação de qualquer gráfico sempre será mais específica. Estruturas de dados gráficos (iguais às árvores) não são suportadas diretamente na linguagem. Porque a implementação de qualquer gráfico é mais concreta.

Por exemplo, uma lista vinculada é um tipo de gráfico, uma árvore é um tipo de gráfico, uma pilha é um tipo de gráfico. Uma única lista vinculada seria considerada um gráfico direcionado, enquanto uma lista duplamente vinculada é um tipo de gráfico não direcionado. Todos são gráficos com restrições intencionais. Por exemplo, uma lista vinculada é um gráfico, uma árvore é um gráfico e um heap é um gráfico. Uma lista vinculada individualmente é considerada um gráfico direcionado, enquanto uma lista duplamente vinculada é um gráfico não direcionado. Ambos são gráficos com restrição de intenção.

Resumo do suporte à linguagem de estruturas de dados Suporte resumido de linguagem para estruturas de dados

Fonte: https://medium.com/omarelgabrys-blog/data-structures-language-support-5f70f8312e84