Escolar Documentos
Profissional Documentos
Cultura Documentos
Estruturas De Dados e
Algoritmos
C#
YANG HU
Aprenda fácil, rápido e bem.
http://br.verejava.com
Copyright © 2020 Yang Hu
All rights reserved.
ISBN: 9798575723653
CONTEÚDO
1. Definição de tabela linear
2. Anexar tabela linear
3. Inserção de mesa linear
4. Tabela linear Excluir
5. Algoritmo de Ordenar de bolhas
6. Selecione o algoritmo de Ordenar
7. Inserir algoritmo de Ordenar
8. Pesquisa de tabela linear
9. Algoritmo de pesquisa de dicotomia
10. Lista vinculada única
10.1 Criar e Inicialização
10.2 Adicionar nó
10.3 Inserir nó
10.4 Excluir nó
11. Lista duplamente vinculada
11.1 Criar e Inicialização
11.2 Adicionar nó
11.3 Inserir nó
11.4 Excluir nó
12. Lista vinculada circular unidirecional
12.1 Criar e Inicialização
12.2 Inserir nó
12.3 Excluir nó
13. Lista vinculada circular de duas vias
13.1 Criar e Inicialização
13.2 Inserir nó
13.3 Excluir nó
14. Fila
15. Pilha
16. Algoritmo Recursivo
17. Algoritmo de Ordenar rápida
18. Algoritmo de mesclagem bidirecional
19. Árvore de pesquisa binária
19.1 Construir uma árvore de pesquisa binária
19.2 Árvore de pesquisa binária In-order traversal
19.3 Árvore de pesquisa binária Pre-order
traversal
19.4 Árvore de pesquisa binária Post-order
traversal
19.5 Árvore de pesquisa binária Máximo e mínimo
19.6 Árvore de pesquisa binária Excluir nó
20. Ordenar da pilha
21. Tabela de hash
22. Gráfico
22.1 Gráfico direcionado e pesquisa em
profundidade
22.2 Gráfico dirigido e Primeira pesquisa de
largura
22.3 Ordenar topológica
Definição de tabela linear
Tabela Linear (Linear Table): Uma sequência de zero ou mais
elementos de dados. Além do primeiro elemento, cada elemento
possui apenas um elemento precursor direto e cada elemento
possui apenas um elemento sucessor direto, exceto o último. A
relação entre os elementos de dados é de um para um. As tabelas
lineares podem ser representadas por matrizes unidimensionais.
TestOneArray.cs
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestOneArray
{
static void Main(string[] args)
{
int[] array = { 90, 70, 50, 80, 60, 85 };
Resultado:
90,70,50,80,60,85,
Anexar tabela linear
1. Adicione 75 ao final da matriz unidimensional.
Análise:
1. Primeiro, crie uma matriz temporária (tempArray) maior que o
comprimento da matriz original
2. Copie cada valor da matriz para tempArray
3. Atribua 75 ao último índice de tempArray
4. Finalmente, atribua a referência do ponteiro tempArray à matriz
original;
TestOneArrayAppend.cs
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestOneArrayAppend
{
public static int[] Add(int[] array, int value)
{
int[] tempArray = new int[array.Length + 1]; // Crie um
tempArray maior que array
90,70,50,80,60,85,75,
Inserção de mesa linear
1. Inserir 75 na matriz unidimensional.
Análise:
1. Primeiro, crie uma matriz temporária tempArray maior que o
comprimento original da matriz
2. Do início à posição de inserção Copie cada valor do valor anterior
da matriz para tempArray
3. Mova a matriz da posição de inserção para cada valor do último
elemento e mova-o de volta para tempArray
4. insira 75 no tempArray.
5. Finalmente, atribua a referência do ponteiro tempArray à matriz
original;
TestOneArrayInsert.cs
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestOneArrayInsert
{
public static int[] Insert(int[] array, int value, int insertIndex)
{
int[] tempArray = new int[array.Length + 1];
Resultado:
90,70,75,50,80,60,85,
Tabela linear Excluir
1. Exclua o valor do índice = 2 da matriz
Análise:
1. Crie uma matriz temporária tempArray com tamanho menor
que a matriz original.
2. Copie os dados na frente de i = 2 para a frente do tempArray
3. Copie a matriz após i = 2 para tempArray
4. Atribua a referência do ponteiro tempArray à matriz original
TestOneArrayDelete.cs
class TestOneArrayDelete
{
public static int[] Remove(int[] array, int index)
{
int[] tempArray = new int[array.Length - 1];
for (int i = 0; i < array.Length; i++)
{
if (i < index) // Copie os dados anteriores a i = index para
tempArray.
tempArray[i] = array[i];
if (i > index) // Copie a matriz após i = index para o final
de tempArray
tempArray[i - 1] = array[i];
}
return tempArray;
}
Resultado:
90,70,80,60,85,
Algoritmo de Ordenar de bolhas
Algoritmo de Ordenar de bolhas (Bubble Sorting Algorithm):
se arrays [j]> arrays [j + 1] forem trocados. Os elementos restantes
repetem esse processo até a Ordenar ser concluída.
Sem Ordenar,
Comparando,
Já Ordenar
1. Primeira Ordenar:
2. Segunda Ordenar:
3. Terceira Ordenar:
sort(scores);
for (int i = 0; i < scores.Length; i++)
{
Debug.Write(scores[i] + ",");
}
}
Sem Ordenar,
Comparando,
Já Ordenar
1. Primeira Ordenar:
2. Segunda Ordenar:
3. Terceira Ordenar:
4. Quarta Ordenar:
if (i != minIndex)
{
int temp = arrays[i];
arrays[i] = arrays[minIndex];
arrays[minIndex] = temp;
}
}
}
}
}
Resultado:
50,60,70,80,85,90,
Inserir algoritmo de Ordenar
Inserir algoritmo de Ordenar (Insert Sorting Algorithm):
Pegue um novo elemento não classificado na matriz, compare-o
com o elemento já classificado antes, se o elemento for menor que o
elemento classificado, insira um novo elemento na posição correta.
Explicação:
Sem Ordenar,
Comparando,
Já Ordenar
1. Primeira Ordenar:
2. Segunda Ordenar:
3. Terceira Ordenar:
4 Quarta Ordenar:
TestInsertSort.cs
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestInsertSort
{
public static void Main(string[] args)
{
arrays[insertPosition] = insertElement;
}
}
}
}
Resultado:
50,60,70,80,85,90,
Pesquisa de tabela linear
1. Digite 70 que deseja pesquisar e depois retorne o índice.
TestOneArraySearch.cs
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms{
class TestOneArraySearch
{
public static void Main(string[] args)
{
int[] scores = { 90, 70, 50, 80, 60, 85 };
Debug.Write("Please enter the value you want to search :");
int value = Convert.ToInt32(Console.ReadLine());
if (!isSearch)
{
Debug.Write("The value was not found : " + value);
}
}
}
}
Resultado:
Please enter the value you want to search :
70
Found value: 70 the index is: 1
Algoritmo de pesquisa de
dicotomia
Algoritmo de pesquisa de dicotomia (Dichotomy Search
Algorithm):
O algoritmo de pesquisa binária, também conhecido como algoritmo
de pesquisa binária e algoritmo de pesquisa logarítmica, é um
algoritmo de pesquisa para encontrar um elemento específico em
uma matriz ordenada. O processo de pesquisa inicia no elemento do
meio da matriz. Se o elemento do meio for o elemento a ser
encontrado, o processo de pesquisa será encerrado; se um
elemento em particular for maior que ou menor que o elemento do
meio, ele será encontrado na metade da matriz que é maior ou
menor que o elemento do meio, e Comece com o elemento do meio
como antes..
class TestBinarySearch
{
public static void Main(string[] args)
{
int[] scores = { 30, 40, 50, 70, 85, 90, 100 };
Debug.Write("\n-----------------------------\n");
searchValue = 90;
position = BinarySearch(scores, searchValue);
Debug.Write(searchValue + " position:" + position + "\n");
}
Result:
40 position:1
-----------------------------
90 position:5
Lista vinculada única
Lista vinculada única (Single Linked List):
É uma estrutura de armazenamento encadeado de uma tabela
linear, que é conectada por um nó. Cada nó consiste em dados e
ponteiro para o próximo nó.
UML Diagrama
Node.cs
namespace CSharpDatastructuresAlgorithms
{
public class Node
{
public String data;
public Node next;
class TestSingleLinkList
{
private static Node head;
private static Node tail;
return head;
}
}
2. Saída de lista vinculada única .
TestSingleLinkList.cs
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestSingleLinkList
{
private static Node head;
private static Node tail;
return head;
}
public static void Print(Node node)
{
Node p = node;
while (p != null) // Imprimir do início ao fim
{
Debug.Write(p.data + " -> ");
p = p.next;
}
Debug.Write("End\n\n");
}
Resultado:
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestSingleLinkList
{
private static Node head;
private static Node tail;
return head;
}
Print(head);
}
}
}
Resultado:
A -> B -> C -> D -> E -> End
3. Insira um nó E na posição 2.
TestSingleLinkList.cs
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestSingleLinkList
{
private static Node head;
private static Node tail;
return head;
}
newNode.next = p.next;
p.next = newNode;
}
Print(head);
}
}
}
Resultado:
A -> B -> E -> C -> D -> End
4. Exclua o índice = 2 nós.
TestSingleLinkList.cs
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestSingleLinkList
{
private static Node head;
private static Node tail;
return head;
}
UML Diagrama
Node.cs
namespace CSharpDatastructuresAlgorithms
{
public class Node
{
public String data;
public Node prev;
public Node next;
class TestDoubleLink
{
private static Node head;
private static Node tail;
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestDoubleLink
{
private static Node head;
private static Node tail;
p = end;
while (p != null) //Imprimir do final ao início
{
Debug.Write(p.data + " -> ");
p = p.prev;
}
Debug.Write("Start\n\n");
}
Print(head);
}
}
}
Resultado:
A -> B -> C -> D -> End
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestDoubleLink
{
private static Node head;
private static Node tail;
p = end;
while (p != null) //Imprimir do final ao início
{
Debug.Write(p.data + " -> ");
p = p.prev;
}
Debug.Write("Start\n\n");
}
Print(head);
}
}
}
Resultado:
A -> B -> C -> D -> E -> End
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestDoubleLink
{
private static Node head;
private static Node tail;
p = end;
while (p != null) { //Imprimir do final ao início
Debug.Write(p.data + " -> ");
p = p.prev;
}
Debug.Write("Start\n\n");
}
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestDoubleLink
{
private static Node head;
private static Node tail;
Print(head);
}
}
}
Resultado:
A -> B -> D -> End
D -> B -> A -> Start
Lista vinculada circular
unidirecional
Lista vinculada circular unidirecional (One-way Circular List):
É uma estrutura de armazenamento em cadeia de uma tabela linear,
que é conectada para formar um anel, e cada nó é composto de
dados e um ponteiro para o próximo.
UML Diagrama
Node.cs
namespace CSharpDatastructuresAlgorithms
{
public class Node
{
public String data;
public Node next;
class TestSingleCircleLink
{
private static Node head;
private static Node tail;
Debug.Write(p.data + "\n\n");
}
TestSingleCircleLink.cs
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestSingleCircleLink
{
private static Node head;
private static Node tail;
Debug.Write(p.data + "\n\n");
}
Print();
}
}
}
Resultado:
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestSingleCircleLink
{
private static Node head;
private static Node tail;
Debug.Write(p.data + "\n\n");
}
Print();
}
}
}
Resultado:
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestSingleCircleLink
{
private static Node head;
private static Node tail;
Debug.Write(p.data + "\n\n");
}
Remove(2);
Print();
}
}
}
Resultado:
UML Diagrama
Node.cs
namespace CSharpDatastructuresAlgorithms
{
public class Node
{
public String data;
public Node prev;
public Node next;
class TestDoubleCircleLink
{
private static Node head;
private static Node tail;
public static void Init()
{
head = new Node("A"); // o primeiro nó chamado cabe?a
nó
head.next = null;
head.prev = null;
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestDoubleCircleLink
{
private static Node head;
private static Node tail;
Debug.Write(p.data + "\n\n");
p = tail;
do //Imprimir do final ao início
{
Debug.Write(p.data + " -> ");
p = p.prev;
} while (p != tail);
Debug.Write(p.data + "\n\n");
}
Print();
}
}
}
Resultado:
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestDoubleCircleLink
{
private static Node head;
private static Node tail;
Debug.Write(p.data + "\n\n");
p = tail;
do// Imprimir do final ao início
{
Debug.Write(p.data + " -> ");
p = p.prev;
} while (p != tail);
Debug.Write(p.data + "\n\n");
}
Print();
}
}
}
Resultado:
A -> B -> E -> C -> D -> A
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestDoubleCircleLink
{
private static Node head;
private static Node tail;
Debug.Write(p.data + "\n\n");
p = tail;
do//Imprimir do final ao início
{
Debug.Write(p.data + " -> ");
p = p.prev;
} while (p != tail);
Debug.Write(p.data + "\n\n");
}
Remove(2);
Print();
}
}
}
Resultado:
UML Diagrama
Node.cs
namespace CSharpDatastructuresAlgorithms
{
public class Node
{
public String data;
public Node prev;
public Node next;
Inserir A
Inserir B
Inserir C
Inserir D
TestQueue.cs
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class Queue
{
private Node head;
private Node tail;
private int size; // o tamanho da fila
class TestQueue
{
public static void Main(String[] args)
{
Queue queue = new Queue();
queue.Offer("A");
queue.Offer("B");
queue.Offer("C");
queue.Offer("D");
print(queue);
}
Resultado:
UML Diagrama
Node.cs
namespace CSharpDatastructuresAlgorithms
{
public class Node
{
public String data;
public Node next;
1. Inicialização de pilha .
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class Stack
{
private Node top;
private int size; // O tamanho da pilha
class TestStack
{
public static void Main(String[] args)
{
Stack stack = new Stack();
stack.Push("A");
stack.Push("B");
stack.Push("C");
stack.Push("D");
print(stack);
}
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestFactorial
{
public static void Main(String[] args)
{
int n = 5;
long fac = factorial(n);
Debug.WriteLine("The factorial of 5 is :" + fac);
}
Resultado:
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestQuickSort
{
private static void QuickSort(int[] array, int low, int high)
{
if (low > high)
{
return;
}
int i = low;
int j = high;
int threshold = array[low];
QuickSort(scores);
Resultado:
50,60,70,80,90,100,
Algoritmo de mesclagem
bidirecional
Algoritmo de mesclagem bidirecional (Two-way Merge
Algorithm):
Os dados da primeira metade e da segunda metade são
classificados e as duas sub-listas ordenadas são mescladas em
uma lista ordenada, que continua recursiva até o final.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
class TestMergeSort
{
// Combine duas listas ordenadas em uma lista ordenada
private static void Merge(int[] array, int[] temp, int left, int right,
int rightEndIndex) {
private static void MergeSort(int[] array, int[] temp, int left, int
right) {
if (left < right) {
int center = (left + right) / 2;
MergeSort(array, temp, left, center); // Classificar
mesclagem à esquerda
MergeSort(array, temp, center + 1, right); // Classificar
mesclagem à direita
Merge(array, temp, left, center + 1, right); // Mesclar duas
matrizes ordenadas
}
}
MergeSort(scores);
Resultado:
50,63,65,74,76,87,92,99,100,
Árvore de pesquisa binária
Árvore de pesquisa binária (Binary Search Tree):
1. Se a subárvore esquerda de qualquer nó não estiver vazia, o
valor de todos os nós na subárvore esquerda será menor que o
valor do nó raiz;
2. Se a subárvore direita de qualquer nó não estiver vazia, o valor
de todos os nós na subárvore direita será maior que o valor do nó
raiz;
3. A subárvore esquerda e a subárvore direita de qualquer nó
também são árvores de pesquisa binária.
UML Diagrama
Node.cs
namespace CSharpDatastructuresAlgorithms
{
public class Node
{
public int data;
public Node left;
public Node right;
Inserir 60
Inserir 40
Inserir 20
Inserir 10
Inserir 30
Inserir 50
Inserir 80
Inserir 70
Inserir 90
2. á rvore de pesquisa binária In-order traversal
In-order traversal : left subtree -> root node -> right subtree
Resultado:
BinaryTree.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
class BinaryTree
{
private Node root;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
class TestBinaryTree
{
public static void Main(String[] args)
{
BinaryTree binaryTree = new BinaryTree();
Resultado:
Resultado:
BinaryTree.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
class BinaryTree
{
private Node root;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
class TestBinaryTree
{
public static void Main(String[] args)
{
BinaryTree binaryTree = new BinaryTree();
Resultado:
Resultado:
BinaryTree.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
class BinaryTree
{
private Node root;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
class TestBinaryTree
{
public static void Main(String[] args)
{
BinaryTree binaryTree = new BinaryTree();
Resultado:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
class BinaryTree
{
private Node root;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
class TestBinaryTree
{
public static void Main(String[] args)
{
BinaryTree binaryTree = new BinaryTree();
// Construindo uma árvore de pesquisa binária
binaryTree.Insert(binaryTree.GetRoot(), 60);
binaryTree.Insert(binaryTree.GetRoot(), 40);
binaryTree.Insert(binaryTree.GetRoot(), 20);
binaryTree.Insert(binaryTree.GetRoot(), 10);
binaryTree.Insert(binaryTree.GetRoot(), 30);
binaryTree.Insert(binaryTree.GetRoot(), 50);
binaryTree.Insert(binaryTree.GetRoot(), 80);
binaryTree.Insert(binaryTree.GetRoot(), 70);
binaryTree.Insert(binaryTree.GetRoot(), 90);
Debug.WriteLine("\nMinimum Value");
Node
minNode=binaryTree.SearchMinValue(binaryTree.GetRoot());
Debug.WriteLine(minNode.data);
Debug.WriteLine("\nMaximum Value");
Node
maxNode=binaryTree.SearchMaxValue(binaryTree.GetRoot());
Debug.WriteLine(maxNode.data);
}
}
}
Resultado:
Minimum Value
10
Maximum Value
90
6. árvore de pesquisa binária Delete Node
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class BinaryTree
{
private Node root;
public Node GetRoot()
{
return root;
}
Debug.WriteLine("\n--------------------------------------------");
Debug.WriteLine("\ndelete node is: 20");
binaryTree.Remove(binaryTree.GetRoot(), 20);
Debug.WriteLine("\nIn-order traversal binary tree");
binaryTree.InOrder(binaryTree.GetRoot());
Debug.WriteLine("\n--------------------------------------------");
Debug.WriteLine("\ndelete node is: 40");
binaryTree.Remove(binaryTree.GetRoot(), 40);
Resultado:
Ordenar da pilha:
1. Construa uma pilha
2. Após a saída do elemento superior do heap, ajuste de cima para
baixo, compare o elemento superior com o nó raiz de suas
subárvores esquerda e direita e troque o menor elemento pela parte
superior do heap; depois ajuste continuamente até os nós das folhas
para obter novo heap.
1. {10, 90, 20, 80, 30, 70, 40, 60, 50} construir heap e, em
seguida, heap classificar saída.
// Inicialize o heap
public void CreateHeap(int[] array)
{
this.array = array;
// Ajustar pilha
public void AdjustHeap(int currentIndex, int maxLength)
{
int noLeafValue = array[currentIndex];
TestHeapSort.cs
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class TestHeapSort
{
public static void Main(String[] args)
{
HeapSort heapSort = new HeapSort();
int[] scores = { 10, 90, 20, 80, 30, 70, 40, 60, 50 };
Debug.WriteLine("Before building a heap : ");
for (int i = 0; i < scores.Length; i++)
{
Debug.Write(scores[i] + ", ");
}
Debug.Write("\n\n");
////////////////////////////////////////////////////////////
Debug.WriteLine("After building a heap : ");
heapSort.CreateHeap(scores);
for (int i = 0; i < scores.Length; i++)
{
Debug.Write(scores[i] + ", ");
}
Debug.Write("\n\n");
////////////////////////////////////////////////////////////
Resultado:
Node.cs
namespace CSharpDatastructuresAlgorithms
{
public class Node
{
public Object key;
public Object value;
public int hash;
public Node next;
using System;
using System.Diagnostics;
namespace CSharpDatastructuresAlgorithms
{
class Hashtable
{
private Node[] table;
private int capacity = 16;
private int size;
public Hashtable()
{
table = new Node[capacity];
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
class TestHashtable
{
public static void Main(String[] args)
{
Hashtable table = new Hashtable();
Resultado:
1. matriz de adjacência:
O número total de vértices é um tamanho de matriz bidimensional,
se houver aresta de valor 1, caso contrário, aresta é 0.
2. Primeira pesquisa de profundidade:
Procure o nó de borda vizinho B de A e, em seguida, encontre o nó
vizinho C de B e assim por diante até que todos os nós sejam
encontrados A -> B -> C -> D -> E.
Vertex.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
public class Vertex
{
public String data;
public bool visited; // Você visitou
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
public class Graph
{
private int maxVertexSize; // Tamanho bidimensional da
matriz
private int size; // tamanho do vértice
private Vertex[] vertexs;
private int[,] adjacencyMatrix;
private Stack<Int32> stack;// salva vértices atuais
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
public class TestGraph
{
public static void PrintGraph(Graph graph)
{
Debug.Write("Two-dimensional array traversal vertex edge
and adjacent array : \n ");
for (int i = 0; i < graph.GetVertexs().Length; i++)
{
Debug.Write(graph.GetVertexs()[i].data + " ");
}
Debug.Write("\n");
graph.AddVertex("A");
graph.AddVertex("B");
graph.AddVertex("C");
graph.AddVertex("D");
graph.AddVertex("E");
graph.AddEdge(0, 1);
graph.AddEdge(0, 2);
graph.AddEdge(0, 3);
graph.AddEdge(1, 2);
graph.AddEdge(1, 3);
graph.AddEdge(2, 3);
graph.AddEdge(3, 4);
PrintGraph(graph);
A B C D E
A 0 1 1 1 0
B 0 0 1 1 0
C 0 0 0 1 0
D 0 0 0 0 1
E 0 0 0 0 0
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
public class Vertex
{
public String data;
public bool visited; // Você visitou
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
public class Graph
{
private int maxVertexSize; // Tamanho bidimensional da
matriz
private int size; // tamanho do vértice
private Vertex[] vertexs;
private int[,] adjacencyMatrix;
private Queue<Int32> queue;// salva vértices atuais
int col;
while (queue.Count > 0)
{
int head = queue.Dequeue();
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
public class TestGraph
{
graph.AddVertex("A");
graph.AddVertex("B");
graph.AddVertex("C");
graph.AddVertex("D");
graph.AddVertex("E");
graph.AddEdge(0, 1);
graph.AddEdge(0, 2);
graph.AddEdge(0, 3);
graph.AddEdge(1, 2);
graph.AddEdge(1, 3);
graph.AddEdge(2, 3);
graph.AddEdge(3, 4);
PrintGraph(graph);
A B C D E
A 0 1 1 1 0
B 0 0 1 1 0
C 0 0 0 1 0
D 0 0 0 0 1
E 0 0 0 0 0
1. matriz de adjacência:
O número total de vértices é um tamanho de matriz bidimensional,
se houver aresta de valor 1, caso contrário, aresta é 0.
Ordenar topológica a partir do vértice A : A -> B -> C -> D -> E
Vertex.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
public class Vertex
{
public String data;
public bool visited; // Você visitou
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
public class Graph
{
private int maxVertexSize; // Tamanho bidimensional da
matriz
private int size; // tamanho do vértice
private Vertex[] vertexs;
private int[,] adjacencyMatrix;
private Vertex[] topologys; // Uma matriz de resultados de
classificação topológica, registrando o número de sequência
classificado de cada nó.
for (int row = vertex; row < size - 1; row++)// Mover uma
linha para cima
{
for (int col = 0; col < size - 1; col++)
{
adjacencyMatrix[row, col] = adjacencyMatrix[row +
1, col];
}
}
for (int col = vertex; col < size - 1; col++)// Mova uma
linha para a esquerda
{
for (int row = 0; row < size - 1; row++)
{
adjacencyMatrix[row, col] = adjacencyMatrix[row,
col + 1];
}
}
}
size--;// Diminuir o número de vértices
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharpDatastructuresAlgorithms
{
public class TestGraph
{
graph.AddVertex("A");
graph.AddVertex("B");
graph.AddVertex("C");
graph.AddVertex("D");
graph.AddVertex("E");
graph.AddEdge(0, 1);
graph.AddEdge(0, 2);
graph.AddEdge(0, 3);
graph.AddEdge(1, 2);
graph.AddEdge(1, 3);
graph.AddEdge(2, 3);
graph.AddEdge(3, 4);
PrintGraph(graph);
Resultado:
Two-dimensional array traversal output vertex edge and adjacent
array :
A B C D E
A 0 1 1 1 0
B 0 0 1 1 0
C 0 0 0 1 0
D 0 0 0 0 1
E 0 0 0 0 0