Você está aqui: C# ::: Estruturas de Dados ::: Pilhas

Como criar uma pilha em C# usando um vetor de ints - Estruturas de Dados em C#

Quantidade de visualizações: 1436 vezes
A Pilha é uma estrutura de dados do tipo LIFO - Last-In, First-Out (Último a entrar, primeiro a sair). Neste tipo de estrutura, o último elemento a ser inserido é o primeiro a ser removido. Veja a imagem a seguir:



Embora seja mais comum a criação de uma estrutura de dados do tipo Pilha de forma dinâmica (usando ponteiros e referências), nesta dica eu mostrarei como podemos criá-la em C# usando um array, ou seja, um vetor. No exemplo eu usei inteiros, mas você pode modificar para o tipo de dados que você achar mais adequado.

Veja o código completo para uma classe Pilha usando um vetor de ints. Veja que o tamanho do vetor é informado no construtor da classe. Note também a lógica empregada na construção dos métodos empilhar(), desempilhar() e imprimirPilha():

Código para Pilha.cs:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

using System;

namespace Estudos {
  // Esta classe representa uma pilha usando array (vetor)
  class Pilha {
    private int[] elementos; // elementos na pilha
    private int topo; // o elemento no topo da pilha
    private int maximo; // a quantidade máxima de elementos na pilha

    // construtor da classe Pilha
    public Pilha(int tamanho) {
      // constrói o vetor
      elementos = new int[tamanho];
      // define o topo como -1
      topo = -1;
      // ajusta o tamanho da pilha para o valor recebido
      maximo = tamanho;
    }

    // método usado para empilhar um novo elemento na pilha
    public void empilhar(int item) {
      // a pilha já está cheia?
      if (topo == (maximo - 1)) {
        Console.WriteLine("\nA pilha está cheia\n");
        return;
      }
      else {
        // vamos inserir este elemento no topo da pilha
        elementos[++topo] = item;
      }
    }

    // méodo usado para desempilhar um elemento da pilha
    public int desempilhar() {
      // a pilha está vazia
      if (topo == -1) {
        Console.WriteLine("\nA pilha está vazia\n");
        return -1;
      }
      else {
        Console.WriteLine("Elemento desempilhado: " + elementos[topo]);
        return elementos[topo--];
      }
    }

    // método que permite imprimir o conteúdo da pilha
    public void imprimirPilha() {
      // pilha vazia
      if (topo == -1) {
        Console.WriteLine("\nA pilha está vazia\n");
        return;
      }
      else {
        // vamos percorrer todos os elementos da pilha
        for (int i = 0; i <= topo; i++) {
          Console.WriteLine("Item[" + (i + 1) + "]: " + elementos[i]);
        }
      }
    }
  }
}

Veja agora o código para a classe principal, ou seja, a classe Main usada para testar a funcionalidade da nossa pilha:

Código para Principal.cs:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

using System;

namespace Estudos {
  class Principal {
    static void Main(string[] args) {
      // vamos criar uma nova pilha com capacidade para 5 elementos
      Pilha p = new Pilha(5);

      // vamos empilhar 3 elementos
      p.empilhar(34);
      p.empilhar(52);
      p.empilhar(18);

      // vamos mostrar os elementos na pilha
      Console.WriteLine("Itens presentes na Pilha\n");
      p.imprimirPilha();

      // agora vamos remover e retornar dois elementos da pilha
      Console.WriteLine();
      p.desempilhar();
      p.desempilhar();

      // vamos mostrar os elementos na pilha novamente
      Console.WriteLine("\nItens presentes na Pilha\n");
      p.imprimirPilha();

      Console.WriteLine("Pressione uma tecla para sair...");
      Console.ReadKey();
    }
  }
}

Ao executar este código C# nós teremos o seguinte resultado:

Itens presentes na Pilha

Item[1]: 34
Item[2]: 52
Item[3]: 18

Elemento desempilhado: 18
Elemento desempilhado: 52

Itens presentes na Pilha

Item[1]: 34

Link para compartilhar na Internet ou com seus amigos:

C# ::: Coleções (Collections) ::: ArrayList

Como percorrer os elementos de uma ArrayList do C# usando um objeto da interface IEnumerator

Quantidade de visualizações: 8499 vezes
Um objeto da interface IEnumerator (no namespace System.Collections) pode ser usado para percorrer os elementos de uma coleção não-genérica, como é o caso da classe ArrayList. Podemos usar um enumerador para acessar os itens da lista individualmente, mas estes não poderão sofrer modificações por meio do enumerador.

Um enumerador para uma ArrayList é obtido por meio do método GetEnumerator(). Veja:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

// vamos obter um enumerador para a lista
IEnumerator enumerador = lista.GetEnumerator();

Observe agora um trecho de código no qual temos uma lista contendo 5 inteiros. Note o uso de um IEnumerator para percorrer os elementos e exibir o valor contido no elemento atual:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

static void Main(string[] args){
  // não se esqueça
  // using System.Collections;

  // Cria o ArrayList
  ArrayList lista = new ArrayList();

  // Adiciona 5 inteiros
  lista.Add(65);
  lista.Add(2);
  lista.Add(13);
  lista.Add(97);
  lista.Add(4);

  // vamos obter um enumerador para a lista
  IEnumerator enumerador = lista.GetEnumerator();

  // vamos percorrer a lista usando o enumerador
  while(enumerador.MoveNext()){
    Console.WriteLine(enumerador.Current); 
  }

  Console.Write("\n\nPressione uma tecla para sair...");
  Console.ReadKey();
}

Para saber mais sobre os enumeradores, consulte minhas dicas sobre a interface IEnumerator.


C# ::: Namespace System.Drawing ::: Graphics

Computação gráfica C# Windows Forms - Como desenhar em C# - A classe Graphics

Quantidade de visualizações: 7712 vezes
Qualquer um que queira iniciar os estudos e desenhos de gráficos em C# usando Windows Forms deve obrigatoriamente entender um pouco de GDI e GDI+. GDI é o acrônimo de Graphics Device Interface e GDI+ é o seu sucessor em versões mais recentes do Microsoft Windows. Com a indepedência do GDI+ podemos desenhar em um formulário, na tela ou impressora sem qualquer modificação no código. O próprio GDI+ se encarrega dos detalhes da implementação de cada um destes diferentes dispositivos.

O GDI+ é uma interface de programação de aplicações (API) que forma o sub-sistema do sistema operacional Microsoft Windows XP. Esta API é a responsável pela exibição de informações na tela e impressoras. O GDI+ é uma DLL Win32 chamada de gdiplus.dll que é distribuída com o Windows XP e versões mais recentes do Windows. Esta DLL está também disponível para uso em versões do Windows anteriores ao XP.

A plataforma .NET encapsula as funcionalidades do GDI+ nos seguintes namespaces: System.Drawing, System.Drawing.Drawing2D, System.Drawing.Imaging, System.Drawing.Text e System.Drawing.Printing.

Antes de iniciar seus desenhos em C# e Windows Forms, é importante entender o sistema de coordenadas do GDI+. Este sistema usa a medida de pixels ("picture elements"), que é a menor unidade de resolução no display de um monitor. Assim, o canto superior esquerdo de um controle GUI (um formulário, um painel, botão, etc) tem as coordenadas (0, 0), ou seja, x = 0 e y = 0. Lembre-se de que x é o eixo horizontal e y é o eixo vertical.

A classe Graphics, do pacote System.Drawing, é quem fornece boa parte dos métodos que usamos para desenhar em C# e Windows Forms. Veja sua posição na hierarquia de classes da plataforma .NET:

System.Object 
  System.MarshalByRefObject 
    System.Drawing.Graphics
Um objeto desta classe pode ser obtido com uma chamada ao método CreateGraphics() a partir de um objeto que herda de System.Windows.Forms.Control ou gerenciando o evento Paint do controle e acessando a propriedade Graphics da classe System.Windows.Forms.PaintEventArgs.

Veja um trecho de código no qual desenhamos uma linha horizontal no formulário a partir do clique de um botão:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

private void button1_Click(object sender, EventArgs e){
  // vamos obter o Graphics do formulário
  Graphics g = this.CreateGraphics();

  // vamos desenhar uma linha horizontal de 300 pixels na
  // cor preta e espessura de 1 pixel
  g.DrawLine(new Pen(Color.Black, 1), new Point(20, 80), 
    new Point(320, 80));

  // vamos liberar o objeto Graphics
  g.Dispose();
}



C# ::: Dicas & Truques ::: Sistema

Como retornar a capacidade do HD em MB ou GB em C# usando um objeto ManagementObject

Quantidade de visualizações: 8898 vezes
Nesta dica mostrarei como podemos usar um objeto ManagementObject para retornar o tamanho de um HD em MB ou GB usando a linguagem C#. No exemplo eu acessei o drive C, mas você pode usar qualquer um que esteja disponível na sua máquina.

Veja o código C# completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

private void button2_Click(object sender, EventArgs e) {
  // não esqueça de importar
  // using System.Management;

  // vamos criar um novo objeto ManagementObject
  ManagementObject dispositivo =
    new ManagementObject("win32_logicaldisk.deviceid=\"C:\"");
  // vamos retornar o dispositivo
  dispositivo.Get();

  // agora vamos retornar o tamanho do HD
  double tam = Convert.ToDouble(dispositivo["Size"]);
      
  // convertemos para GB
  tam = tam / 1024 / 1024 / 1024;
  // e mostramos o resultado
  textBox1.Text = "O HD tem capacidade de " + tam + " GB";
}

Ao executar este código C# nós teremos o seguinte resultado:

O HD tem capacidade de 251,767574310303 GB

Se você quiser o tamanho do HD em MB, basta usar:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

tam = tam / 1024 / 1024;

Nos testes que fiz no Visual Studio 2019, não foi possível acessar o HD a partir de uma aplicação C# console, somente por meio de uma aplicação Windows Desktop. Veja a mensagem retornada:

System.PlatformNotSupportedException: 'System.Management currently is only supported for Windows desktop applications.'


Desafios, Exercícios e Algoritmos Resolvidos de C#

Veja mais Dicas e truques de C#

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 39 usuários muito felizes estudando em nosso site.