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

Como criar uma pilha em C usando um vetor (array) - Estruturas de Dados em C

Quantidade de visualizações: 840 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 o programa C que cria uma pilha usando um vetor de ints. Veja que o tamanho do vetor é informado com um #define. Note também a lógica empregada na construção das funções empilhar(), desempilhar() e imprimir_pilha():

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

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

// tamanho máximo da pilha
#define TAM_MAX 5

// função usada para empilhar um novo valor na pilha
void empilhar(int valor, int *topo, int pilha[]){
  // a pilha já está cheia?
  if(*topo == (TAM_MAX - 1)){
    printf("\nA pilha está cheia.\n");
  }
  else{
    *topo = *topo + 1;
    pilha[*topo] = valor;
  }
}

// função usada para desempilhar o elemento no topo da pilha
int desempilhar(int *topo, int pilha[]){
  int valor;

  // a pilha está vazia? 
  if(*topo == -1){
    printf("\nPilha vazia\n");
    exit(1);
  }
  else{
    valor = pilha[*topo];
    *topo = *topo - 1;
  }
  
  return valor;
}

// função usada para imprimir a pilha
void imprimir_pilha(int *topo, int pilha[]){
  int i;
	
  if(*topo == -1){
    printf("\nPilha vazia\n");
    exit(1);
  } 
  else {
    // vamos percorrer todos os elementos da pilha
    for (i = 0; i <= *topo; i++) {
      printf("Item[%d]: %d\n", (i + 1), pilha[i]);
    }
  }
}

int main(int argc, char *argv[]){
  setlocale(LC_ALL,""); // para acentos do português

  // vamos criar uma nova pilha 
  int pilha[TAM_MAX];
  // topo da pilha
  int topo = -1;
  int temp;
  
  // vamos empilhar 3 elementos
  empilhar(34, &topo, pilha);
  empilhar(52, &topo, pilha);
  empilhar(18, &topo, pilha);
  
  // vamos mostrar os elementos na pilha
  printf("Itens presentes na Pilha\n");
  imprimir_pilha(&topo, pilha);
  
  // agora vamos remover e retornar dois elementos da pilha
  printf("\n");
  temp = desempilhar(&topo, pilha);
  printf("O elemento desempilhado foi: %d\n", temp);
  temp = desempilhar(&topo, pilha);
  printf("O elemento desempilhado foi: %d\n", temp);
  
  // vamos mostrar os elementos na pilha novamente
  printf("\nItens presentes na Pilha\n");
  imprimir_pilha(&topo, pilha);
  
  printf("\n\n");
  system("PAUSE");	
  return 0;
}

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

O elemento desempilhado foi: 18
O elemento desempilhado foi: 52

Itens presentes na Pilha
Item[1]: 34

Link para compartilhar na Internet ou com seus amigos:

C ::: Dicas & Truques ::: Arquivos e Diretórios

Como excluir arquivos em C usando a função remove()

Quantidade de visualizações: 19140 vezes
A função remove(), disponível no header stdio.h, pode ser usada para excluir arquivos. Veja sua assinatura:

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

int remove(const char *filename);

Veja que esta função recebe o caminho e nome do arquivo a ser excluído e retorna um valor inteiro. Se o arquivo for excluído com sucesso, o valor 0 será retornado. Veja um exemplo:

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

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  // nome do arquivo a ser excluído
  char *arquivo = "c:\\testes.txt";

  // vamos excluir
  if(remove(arquivo) == 0)
    printf("Arquivo foi excluido com sucesso.");
  else
    printf("Nao foi possivel excluir o arquivo.");

  printf("\n\n");
  system("PAUSE");
  return 0;
}



C ::: C para Engenharia ::: Física - Mecânica

Como calcular a energia cinética de um corpo dado sua massa e sua velocidade usando a linguagem C

Quantidade de visualizações: 1369 vezes
Energia Cinética é a forma de energia relacionada aos corpos em movimento e é diretamente proporcional ao quadrado da velocidade do corpo. Sendo uma grandeza física escalar, a energia cinética possui como unidade de medida, de acordo com as unidades do SI (Sistema Internacional de Medidas), o joule.

A energia cinética é a capacidade de algum corpo em movimento realizar trabalho, modificando o estado de movimento dos corpos ao seu redor ou deformando-os. Quanto maior é a velocidade e a massa do corpo, maior é a sua capacidade de realizar trabalho quando estiver em movimento. De forma análoga, podemos pensar que um corpo que apresenta uma grande energia cinética necessita de uma grande quantidade de energia para cessar o seu movimento.

A fórmula para obtenção da Energia Cinética de um corpo, quando temos a sua massa e a sua velocidade é:

\[ E_c = \frac{\text{m} \cdot v^2}{\text{2}} \]

Onde:

Ec ? energia cinética (em joule, J).

m ? massa do corpo (em kg).

v ? velocidade do corpo (em m/s).

É comum, também, encontrarmos essa fórmula escrita da seguinte forma:

\[ E_c = \frac{1}{2} \text{m} \cdot v^2 \]

É importante observarmos que, caso um corpo se encontre em repouso, a energia cinética a ele associada é nula, ou seja, zero. Além disso, a energia cinética depende da velocidade desse corpo ao quadrado. Sendo assim, ao duplicarmos a velocidade de um corpo, sua energia cinética aumenta quatro vezes e, ao triplicá-la, a energia cinética desse corpo fica nove vezes maior.

Vamos ver um exemplo agora? Observe o seguinte enunciado:

1) Um ciclista e sua bicicleta possuem uma massa total de 100kg, e uma velocidade de 54km/h. Calcule sua energia cinética.

O exercício já nos dá a massa total em kg, mas precisamos converter km/h em m/s antes de realizar o cálculo da energia cinética. Fique atento(a). Veja o código C completo que efetua este cálculo e exibe a energia cinética resultante:

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

#include <stdio.h>
#include <stdlib.h>
#include <math.h> 
     
int main(int argc, char *argv[]){
  // a massa total
  float massa = 100; // em kg
  // velocidade (em m/s)
  float velocidade = 54 / 3.6; // converti de km/h para m/s
  
  // agora calculamos a energia cinética
  float energia_cinetica = (massa * pow(velocidade, 2)) / 2;
  
  // mostramos o resultado
  printf("A energia cinética é: %fJ",
    energia_cinetica);
			  
  printf("\n\n");
  system("PAUSE");
  return 0;
}

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

A energia cinética é: 11250.000000J


C ::: Dicas & Truques ::: Matemática e Estatística

Como usar a função modf() da linguagem C para separar um valor de ponto flutuante em suas partes inteira e fracionária

Quantidade de visualizações: 7754 vezes
Em algumas situações precisamos obter as partes inteira e fracionária de um valor de ponto flutuante. Para isso podemos usar a função modf(). Veja sua assinatura:

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

double modf(double x, double * intpart);

O parâmetro x é o valor de ponto flutuante cujas partes queremos separar e intpart é uma variável do tipo double que receberá a parte inteira do valor. O retorno da função é o valor fracionário.

Vamos ver um exemplo? Veja como podemos quebrar o valor 34,27 em suas partes inteira e fracionária:

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

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  double valor = 34.27;
  
  // vamos separar o valor em suas partes inteira e fracionária
  double inteira = 0.0, fracionaria = 0.0;
  fracionaria = modf(valor, &inteira);
  
  // vamos exibir o resultado
  printf("Parte inteira: %f\n", inteira);
  printf("Parte fracionaria: %f\n", fracionaria);
  
  printf("\n\n");
  system("pause");
  return 0;
}

Ao executarmos este código teremos o seguinte resultado:

Parte inteira: 34.000000
Parte fracionária: 0.270000


Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais

Dimensionamento de Redes de Distribuição de Água

Qual a vazão em marcha e específica para uma cidade com 250.000 habitantes, área de 1.250 ha e consumo per capta de 275 L/hab.dia? Considere que existem 12 km de rede instalados.

A) qm = 0,12 L/s.ha e qd = 1,15 L/s.m.

B) qm = 1,15 L/s.ha e qd = 0,12 L/s.m.

C) Q = 1,43 m3/s.

D) qm = 1,15 L/s.m e qd = 0,12 L/s.ha.

E) qm = 0,12 L/s.m e qd = 1,15 L/s.ha.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais

O projeto de instalação hidrossanitária

Um projeto de instalações hidrossanitárias é composto por redes hidráulicas (constituído de água fria e água quente), bem como redes sanitárias (esgoto), ventilação e rede pluvial. Para obras de grande porte, o projeto de proteção contra incêndio também está englobado no projeto de instalação hidrossanitária.

Sobre as instalações hidrossanitárias em uma obra de pequeno porte, assinale a afirmativa correta:

A) No projeto de esgotamento, a fossa séptica é aplicada para que as águas servidas convertam totalmente a matéria orgânica em gases.

B) Alterações de percurso e de extensão não afetam o dimensionamento dos tubos de abastecimento de água, desde que não exista alteração de diâmetro.

C) O shaft normalmente é acessível por painéis removíveis ou aberturas que permitem a verificação horizontal do abastecimento de todos os pavimentos do edifício em um só local.

D) Um dos papéis do fecho hídrico do sifão sanitário é barrar a passagem de gases (odores) para o ambiente.

E) É recomendável que se utilize o diâmetro mínimo de 100mm em toda a tubulação para evitar entupimentos.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Estruturas de Aço e Madeira

Perfil em aço

Alguns materiais fazem parte do processo de produção do aço ou até são resultantes de suas variações. Eles apresentam características que diferem entre si. Um desses materiais contém de 3 a 4% de carbono em sua composição.

Assinale a alternativa que indica corretamente qual é esse material.

A) Aço.

B) Aço macio.

C) Ferro fundido.

D) Ferro forjado.

E) Aço de médio carbono.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Ética e Legislação Profissional

O código de ética profissional: Concorrência

Ao longo da história, os mercados foram se estruturando de diversas formas. Nesse contexto, em cada estrutura, a relação oferta e demanda assume comportamentos distintos em função das suas particularidades. Assim, podemos afirmar que, classicamente, o mercado, hoje, está estruturado de uma forma bem definida. Indique a alternativa que contém as possibilidades de estrutura de mercado.

A) Oligopólio, concorrência monopolista, empresa concorrencial, concorrência perfeita.

B) Monopólio, oligopólio, concorrência monopolista e concorrência interna.

C) Monopsônio, concorrência monopolista, oligopólio e concorrência perfeita.

D) Monopólio, oligopsônio, concorrência monopolista e concorrência perfeita.

E) Monopólio, oligopólio, concorrência monopolista, concorrência perfeita.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Hidrologia

Qual dos rios, entre os listados abaixo, não está localizado no território brasileiro?

A) Rio São Francisco.

B) Rio Tocantins.

C) Rio Orinoco.

D) Rio Araguaia.

E) Rio Paraíba do Sul.
Verificar Resposta Estudar Cards Todas as Questões

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: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



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