public bool VerificaFim() { Aux = Fim; int cont = 1; if (Aux.Ant != null) { if (Fim.Ant == null) { return(false); } while (Aux.Ant != null && Aux.Cor == Aux.Ant.Cor) //Verifica se 3 ou mais elementos anteriores ao Fim são iguais. { cont++; Aux = Aux.Ant; } if (cont >= 3) //O contador indica se tem 3 ou mais. { for (int i = 0; i < cont; i++) //Percorre a quantidade de elementos, fazendo com que Fim retroceda uma posicão { //Removendo o antigo Fim Fim = Fim.Ant; if (Fim != null) { Fim.Prox = null; } Tamanho--; //Diminui o tamanho da lista } if (cont == 3) //Soma a pontuação { Pontuacao += 2; } else if (cont > 3) { Pontuacao += 3; } Aux = null; return(true); //Retorna-se true, para não verificar os outros casos. } } Aux = null; return(false); }
public bool VerificaInicio() { int cont = 1; Aux = Inicio; if (Aux.Prox != null) { if (Inicio.Prox == null) { return(false); } while (Aux.Prox != null && Aux.Cor == Aux.Prox.Cor) //Verifica se 3 ou mais elementos a partir do Início são iguais. { cont++; Aux = Aux.Prox; } if (cont >= 3) //O contador indica se tem 3 ou mais. { for (int i = 0; i < cont; i++) //Percorre a quantidade de elementos, fazendo com que Início avance uma posicão { //Removendo o antigo Início Inicio = Inicio.Prox; if (Inicio != null) { Inicio.Ant = null; } Tamanho--; //Diminui o tamanho da lista. } if (cont == 3) //Soma a pontuação { Pontuacao += 2; } else if (cont > 3) { Pontuacao += 3; } Aux = null; return(true); //Retorna-se true, para não verificar os outros casos. } } Aux = null; return(false); }
public void MostraLista() { Console.Clear(); // Limpa a tela if (Inicio == null) // Se não tem elemento na lista... { Console.WriteLine("A lista não possui nenhum elemento!!! \n\n"); Console.ReadKey(); } else // Se a lista tem pelo menos um elemento { Console.WriteLine("Elementos da Lista: {0}\n", Tamanho); Aux = Inicio; // Pega o primeiro elemento while (Aux != null) // Enquanto a lista tiver elementos que apontam para outro elemento da lista { Console.WriteLine("{0,5}", Aux.Num); // Mostra o elemento, Aux = Aux.Prox; // aponta para o próximo elemento } // e volta Console.ReadKey(); } }
public void InserirFinal(int Valor) { Elemento Novo = new Elemento(); // Alocação Dinâmica - Novo Elemento para a Lista Novo.Num = Valor; // Insere o valor do elemento na lista if (Inicio == null) // A lista está vazia? Primeiro elemento... { Inicio = Novo; // O elemento inserido é o primeiro e o último. Guarda o endereço dele. Fim = Novo; Novo.Prox = null; // O ponteiro para o próximo elemento passa a ser nulo Novo.Ant = null; // O ponteior para o elemento anterior para a ser nulo } else // A lista já possui elementos? { Fim.Prox = Novo; // O elemento que era o último da lista aponta para o elemento inserido Novo.Ant = Fim; // O ponteiro anterior do novo elemento aponta para o que já existia Novo.Prox = null; // O ponteiro próximo do novo elemento aponta para nada, já que ele é o último Fim = Novo; // Atualiza o último: o elemento final passa a ser o novo elemento inserido } Tamanho++; // O elemento entrou na lista }
// Função para inserir um elemento no Inicio da lista public void InserirInicio(string Valor) { Elemento Novo = new Elemento(); // Alocação Dinâmica - Novo Elemento para a Lista Novo.Cor = Valor; // Insere o valor do elemento na lista if (Inicio == null) // A lista está vazia? Primeiro elemento... { Inicio = Novo; // O elemento inserido é o primeiro e o último. Guarda o endereço dele. Fim = Novo; Novo.Prox = null; // O ponteiro para o próximo elemento passa a ser nulo Novo.Ant = null; // O ponteiro para o elemento anterior passa a ser nulo } else // A lista já possui elementos? { Novo.Prox = Inicio; // O elemento Novo aponta para o elemento que já havia sido inserido anteriormente Inicio.Ant = Novo; // O ponteiro anterior do elemento já existente aponta para o novo elemento Novo.Ant = null; // Já que é o primeiro, o ponteiro anterior aponta para null Inicio = Novo; // e o Inicio passa a ter o endereço do elemento Novo que acabou de ser inserido } Tamanho++; // O elemento entrou na lista }
//Função para mostrar todos os elementos da lista do Fim ao Início public void MostraListaFIMINI() { Console.Clear(); // Limpa a tela if (Início == null) // Se não tem elemento na lista... { Console.WriteLine("A lista não possui nenhum elemento!!! \n\n"); Console.ReadKey(); } else // Se a lista tem pelo menos um elemento { Console.WriteLine("Elementos da Lista: {0}\n", Tamanho); Aux = Fim; // Pega o último elemento while (Aux != null) // Enquanto a lista tiver elementos que apontam para algum elemento anterior da lista { Console.WriteLine("{0,5}", Aux.Num); // Mostra o elemento, Aux = Aux.Ant; // aponta para o elemento anterior } // e volta Console.ReadKey(); } }
//Função para retirar um elemento da lista public void RetiraElemento(int Valor) { Console.WriteLine(Valor); if (Inicio == null) // Se não tem elemento na lista... { Console.WriteLine("A lista não possui nenhum elemento!!! \n\n"); // Mostra } else // A lista não está vazia { Aux = Inicio; // Pega o endereço do primeiro elemento int Achou = 0; // Variável para contar quantas vezes o elemento é encontrado na lista while (Aux != null) // Enquanto a lista tiver elementos que apontam para outro elemento da lista { if (Aux.Num == Valor) // O número digitado foi encontrado na lista { Achou++; // Conta ocorrência if (Aux == Inicio) // O número a ser removido é o primeiro da lista? { Inicio = Aux.Prox; // O primeiro elemento foi removido e ele ganha o endereço do da frente if (Inicio != null) // Se o elemento existe { Inicio.Ant = null; // O ponteiro anterior dele não aponta para nada, já que ele é o primeiro } Aux = Inicio; // Armazena o endereço dele para o próximo uso Tamanho--; // Diminui o tamanho da lista } else if (Aux == Fim) // O número a ser removido é o último da lista? { Fim = Fim.Ant; // Ele ganha o endereço do último Fim.Prox = null; // e o ponteiro próximo aponta para nada, já que ele é o último Aux = null; // O Aux agora também aponta para nada Tamanho--; // Diminui o tamanho da lista } else // O número a ser removido está no meio da lista? { // O endereço próximo do elemento anterior ao elemento atual (que será removido) // terá o endereço do elemento posterior ao elemento atual Aux.Ant.Prox = Aux.Prox; // O endereço anterior do elemento posterior ao elemento atual // terá o endereço do elemento anterior ao elemento atual Aux.Prox.Ant = Aux.Ant; Aux = Aux.Prox; // Próximo elemento Tamanho--; // Diminui o tamanho da lista } } else // reposiciona para o próximo elemento da lista { Aux = Aux.Prox; } } // e volta para nova pesquisa } }
public int Tamanho; // Número de Elementos da Lista public Lista() // Construtor da Classe { Inicio = null; Fim = null; Tamanho = 0; }
public bool VerificaIntermedios() { Lista ListaAux = new Lista(); //Lista auxiliar para receber apenas o elementos desejados. int cont = 1, cont2 = 1; int PosiInicial = 1; bool primeiraEntrada = false; Aux = Inicio; if (Aux.Prox == null) { return(false); } while (Aux != null) { if (Aux.Prox != null) { if (Aux.Cor != Aux.Prox.Cor && cont >= 3) //Verifica se o próximo elemento é diferente do atual, caso seja true, verifica se o contador { // de elementos é maior ou igual a 3, caso seja temos o tamanho da sequencia e podemos sair do loop break; } if (Aux.Cor == Aux.Prox.Cor) //Caso o proximo elemento tenha a mesma cor do atual. { if (primeiraEntrada == false) //Caso seja a primeira vez que isso ocorre, salva a posição inicial da sequência de elementos. { PosiInicial = cont2; primeiraEntrada = true; //Torna a variável bool em true, para não altera a posicao inicial da sequência. } cont++; //Incrementa a quantidade de elementos da mesma cor em sequência. } else { primeiraEntrada = false; //Torna a variável bool em false, para caso encontre-se uma sequencia de elementos de cor igual cont = 1; //salve a posição do primeiro elemento } } Aux = Aux.Prox; cont2++; //contador para contar cada posição da lista. } if (cont >= 3) //Caso haja 3 ou mais elementos em sequência. { cont2 = Tamanho; Aux = Fim; while (Aux != null) { if (cont2 < PosiInicial || cont2 > PosiInicial + (cont - 1)) //Verifica se a posicão atual é diferente dos elementos em sequência. { ListaAux.InserirInicio(Aux.Cor); //Caso seja insere o elemento na lista auxiliar. } Aux = Aux.Ant; cont2--; } this.EsvaziarLista(); //Esvazia a lista original. ListaAux.Aux = ListaAux.Fim; while (ListaAux.Aux != null) //Passa todos os elementos da lista auxiliar para a lista original. { this.InserirInicio(ListaAux.Aux.Cor); ListaAux.Aux = ListaAux.Aux.Ant; } if (cont == 3) //Calcula a pontuação { Pontuacao += 2; } else if (cont > 3) { Pontuacao += 3; } Aux = null; return(true); //Retorna true, para não se realizar as outras verificações. } Aux = null; return(false); }
public Elemento() // Construtor da Classe { Cor = ""; Prox = null; Ant = null; }
public Elemento() // Construtor da Classe { Num = 0; Prox = null; Ant = null; }
public void TrocarElementos(int m, int n) { Elemento primeiro, segundo, aux2, aux3; Boolean fim = false; primeiro = new Elemento(); segundo = new Elemento(); aux2 = new Elemento(); aux3 = new Elemento(); if (Início == null) // Se não tem elemento na lista... { Console.WriteLine("A lista não possui nenhum elemento!!! \n\n"); // Mostra Console.ReadKey(); } else // A lista não está vazia { Aux = Início; // Pega o endereço do primeiro elemento while (Aux != null) // Enquanto a lista tiver elementos que apontam para outro elemento da lista { if (Aux.Num == m) // O número digitado foi encontrado na lista { primeiro.Ant = Aux.Ant; primeiro.Prox = Aux.Prox; primeiro.Num = Aux.Num; } if (Aux.Num == n) // O número digitado foi encontrado na lista { segundo.Ant = Aux.Ant; segundo.Prox = Aux.Prox; segundo.Num = Aux.Num; } Aux = Aux.Prox; } // e volta para nova pesquisa Aux = Início; } if (primeiro == aux2 || segundo == aux2) { Console.WriteLine("Não foi possível encontrar os elementos com os valores passados!"); return; } //Guardando meus apontadores aux2 = primeiro.Prox; if (segundo.Prox != null) { aux3 = segundo.Prox; } else { //como não tenho o próximo, (se por acaso for trocado o ultimo da lista), salvo o anterior para passar depois para o M fim = true; aux3 = segundo.Ant; } //Adicionadas algumas verificações para evitar problemas caso meu elemento seja o primero da lista if (primeiro.Ant != null) { primeiro.Ant.Prox = segundo; } else { Início = segundo; } if (segundo.Ant != null) { segundo.Ant = primeiro.Ant; } segundo.Prox = primeiro.Prox; if (primeiro.Prox != null) { primeiro.Prox.Ant = segundo; } if (primeiro != Início) { primeiro.Ant = aux2; } if (!fim) { primeiro.Prox = aux3; } else { primeiro.Prox = null; } //verificação para evitar erro caso um dos elementos da troca seja o PRIMERO elemento if (aux3.Ant != null) { aux3.Ant = primeiro; } //verificação para evitar erro caso um dos elementos da troca seja o ULTIMO elemento if (aux2.Prox != null) { aux2.Prox = primeiro; } }