Java ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Listas Ligadas |
Exercícios Resolvidos de Java - Como inserir no início de uma lista ligada em Java - Escreva um programa Java que pede para o usuário informar váriosQuantidade de visualizações: 868 vezes |
|
Pergunta/Tarefa: Este exercício Java demonstra como inserir um nó no início de uma lista ligada. Escreva um programa Java que cria uma lista ligada, ou seja, uma lista dinamicamente encadeada, e pede para o usuário informar vários valores inteiros, colocando os valores sempre no início da lista. Seu código deverá interromper a leitura dos valores quando o usuário informar o valor -1. Quando isso acontecer, mostre todos os valores contidos na lista ligada, na mesma ordem que foram inseridos (o último valor lido será o primeiro da lista). Sua saída deve ser parecida com: Inserindo valores no início da lista Informe o valor (-1 para sair): 8 Informe o valor (-1 para sair): 2 Informe o valor (-1 para sair): 5 Informe o valor (-1 para sair): 7 Informe o valor (-1 para sair): -1 Valores na lista: 7 -> 5 -> 2 -> 8 -> null Veja a resolução comentada deste exercício usando Java:
package estudos;
import java.util.Scanner;
// classe interna usada para representar um
// nó na lista ligada
class No {
int valor; // valor do nó
No proximo; // aponta para o novo nó
// construtor da classe No
No(int valor, No proximo) {
this.valor = valor;
this.proximo = proximo;
}
}
public class Estudos {
public static void main(String args[]){
// para ler a entrada do usuário
Scanner entrada = new Scanner(System.in);
// vamos criar uma referência para o início da lista
No inicio = null;
// agora vamos pedir para o usuário informar
// valores inteiros. O valor -1 sai do laço
int valor;
System.out.println("Inserindo valores no início da lista\n");
do {
System.out.print("Informe o valor (-1 para sair): ");
valor = Integer.parseInt(entrada.nextLine());
if (valor != -1) {
inicio = inserirInicio(inicio, valor);
}
} while(valor != -1);
// vamos exibir os valores na lista ligada
System.out.print("\nValores na lista: ");
exibirLista(inicio);
}
// função que permite adicionar um nó no início da
// lista ligada
public static No inserirInicio(No inicio, int valor) {
// vamos apontar para o nó inicial
No atual = inicio;
// criamos um novo nó
No novo = criarNo(valor);
// a lista ligada ainda está vazia?
if (atual == null){
// inicio recebe o novo nó
inicio = novo;
}
else { // temos um ou mais nós na lista ligada
// vamos inserir este nó antes do nó que
// representa o início da lista
novo.proximo = inicio;
inicio = novo;
}
// e retornamos o início da lista
return inicio;
}
// função usada para construir e retornar um novo nó
public static No criarNo(int valor) {
// cria o novo nó
No no = new No(valor, null);
// retorna o nó criado
return no;
}
// função usada para percorrer a lista ligada e
// exibir os valores contidos em seus nós
public static void exibirLista(No inicio) {
// vamos apontar para o início da lista
No temp = inicio;
// a lista está vazia?
if (temp == null) {
System.out.println("A lista está vazia.");
}
else {
// esse laço se repete enquanto tempo for
// diferente de null
while (temp != null) {
// vamos mostrar o valor desse nó
System.out.print(temp.valor + " -> ");
// avança para o próximo nó
temp = temp.proximo;
}
// mostra o final da lista
System.out.println("null");
}
}
}
|
C ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como passar um vetor para uma função CQuantidade de visualizações: 12539 vezes |
|
Muitas vezes precisamos passar um vetor, ou seja, um array unidimensional para uma função na linguagem C. O trecho de código abaixo mostra como isso é feito. Observe que a passagem de um vetor para uma função é feita por referência, ou seja, qualquer alteração nos valores do array dentro da função será refletida no vetor original:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
// protótipo da função que recebe o array e exibe os seus elementos
void exibir_vetor(int vetor[], int tamanho);
// função principal do programa
int main(int argc, char *argv[]){
// cria um vetor com 5 inteiros
int valores[] = {54, 3, 89, 6, 1};
setlocale(LC_ALL,""); // para acentos do português
// passa o vetor para a função exibir_vetor()
// veja que temos que enviar também a quantidade
// de elementos
exibir_vetor(valores, 5);
printf("\n\n");
system("PAUSE");
return 0;
}
// função que recebe o array e exibe os seus elementos
void exibir_vetor(int vetor[], int tamanho){
int i;
printf("Os elementos do vetor são:\n\n");
for(i = 0; i < tamanho; i++){
printf("%d ", vetor[i]);
}
}
Ao executar este código C nós teremos o seguinte resultado: Os elementos do vetor são: 54 3 89 6 1 |
Java ::: Coleções (Collections) ::: ArrayList |
Como remover um elemento de uma determinada posição do ArrayList do Java usando o método remove()Quantidade de visualizações: 17505 vezes |
Nesta dica mostrarei como é possível remover elementos em uma determinada posição de um objeto ArrayList usando o seu método remove(). Esta função possui duas assinaturas, uma que recebe uma referência ao elemento a ser excluído e outra que recebe o índice do elemento que queremos excluir. No exemplo a seguir abordarei a segunda assinatura:Object remove(int index) throws IndexOutOfBoundsException Note que só precisamos fornecer o índice do elemento a ser excluído. O retorno será um objeto Object contendo a referência ao elemento que acabamos de excluir. Se o elemento não for encontrado, um erro IndexOutOfBoundsException será exibido e, a menos que seja tratado, a aplicação Java será fechada. Veja o código completo a seguir:
import java.util.ArrayList;
public class Estudos{
public static void main(String[] args){
// cria uma ArrayList que conterá strings
ArrayList<String> nomes = new ArrayList<String>();
// adiciona itens na lista
nomes.add("Carlos");
nomes.add("Maria");
nomes.add("Fernanda");
nomes.add("Osmar");
nomes.add("Maria");
// Vamos remover o segundo elemento
String elem = nomes.remove(1);
System.out.println("O elemento removido foi: "
+ elem);
System.exit(0);
}
}
Ao executarmos este código Java nós teremos o seguinte resultado: O elemento removido foi: Maria |
C# ::: Coleções (Collections) ::: List<T> |
Como pesquisar um elemento em uma lista do C# usando a função Find() e um PredicateQuantidade de visualizações: 15288 vezes |
|
Em algumas situações gostaríamos de pesquisar e retornar o primeiro elemento de uma List<T> que obedece a algum critério de busca. Assim, poderíamos, por exemplo, pesquisar um nome que começa com uma determinada palavra ou um preço de produto maior ou igual a um determinado valor. Para tais situações podemos usar o método Find(). Este método possui a seguinte assinatura: public T Find( Predicate<T> match ) Veja que o método pede um delegate do tipo Predicate<T> que define as condições para a pesquisa do elemento. Se o elemento for encontrado, este é retornado. Caso contrário, o valor padrão para T é retornado (null para referências). Veja um trecho de código no qual eu mostro como usar o método Find() em combinação com um método personalizado que permite usar um delegate anônimo. Desta forma conseguimos fornecer, em tempo de execução, o argumento para o parâmetro match do Predicate:
static void Main(string[] args){
// vamos criar um objeto da classe List<T>
List<string> nomes = new List<string>();
// vamos inserir quatro valores na lista
nomes.Add("Osmar J. Silva");
nomes.Add("Salvador Miranda de Andrade");
nomes.Add("Dyego Fernandes de Souza");
nomes.Add("Marcos de Paula Rocha");
// vamos pesquisar um valor na lista usando um método personalizado
// Neste exemplo vamos retornar o primeiro nome que contenha a palavra
// "Dyego"
string nome = encontrar(nomes, "Dyego");
// vamos verificar se o nome foi encontrado
if(nome != null){
// foi encontrado....vamos retornar o resultado
Console.WriteLine(nome);
}
else{
Console.WriteLine("Nenhum nome encontrado.");
}
// vamos pausar a execução
Console.Write("\n\nPressione qualquer tecla para continuar...");
Console.ReadKey();
}
// método auxiliar que permite encontrar um valor na lista usando
// o método Find() da classe List<T> e um Predicate
static string encontrar(List<string> lista, string texto){
string encontrado = null;
// vamos pesquisar o valor na lista usando seu método Find()
// Aqui o primeiro nome que passar no critério de busca será retornado
encontrado = lista.Find(delegate(string valor){
return valor.Contains(texto);
});
return encontrado;
}
O método Find() executa uma busca linear. Assim, este método é uma operação O(n), onde n é a quantidade de elementos na lista. |
Nossas 20 dicas & truques de programação mais populares |
|
Java - Como construir uma data em Java usando o método set() da classe Calendar - Apostila Java Básico Java - Como retornar a representação numérica de um caractere em Java fazendo um cast de char para int C++ Builder - Como habilitar ou desabilitar um TEdit usando a função EnableWindow() da API do Windows usando C++ Builder |
Você também poderá gostar das dicas e truques de programação abaixo |
|
MySQL - Como usar joins no MySQL Python - Exercícios Resolvidos de Python - Como testar se um número é potência de dois usando Python JavaScript - Como inverter a ordem dos elementos de um array em JavaScript - Vetores e matrizes em JavaScript |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
|
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





