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);
        }
Example #3
0
        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();
            }
        }
Example #4
0
        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
        }
Example #6
0
        //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();
            }
        }
Example #7
0
        //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
            }
        }
Example #8
0
        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;
 }
Example #11
0
 public Elemento()                   // Construtor da Classe
 {
     Num  = 0;
     Prox = null;
     Ant  = null;
 }
Example #12
0
        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;
            }
        }