Created
December 2, 2015 18:59
-
-
Save werbet/4085b3f8b56802d6a5ae to your computer and use it in GitHub Desktop.
Implementação da classe Lista em C++
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// main.cpp | |
// Lista | |
// | |
// Created by Eriko Werbet on 12/2/15. | |
// Copyright © 2015 Eriko Werbet. All rights reserved. | |
// | |
#include <stdio.h> | |
class No | |
{ | |
private: | |
int valor; | |
No* proximo; | |
public: | |
No() | |
{ | |
this->valor = -1; | |
this->proximo = NULL; | |
} | |
No(int valor) | |
{ | |
this->valor = valor; | |
this->proximo = NULL; | |
} | |
void setValor(int valor) | |
{ | |
this->valor = valor; | |
} | |
int getValor() | |
{ | |
return this->valor; | |
} | |
void setProximo(No* proximo) | |
{ | |
this->proximo = proximo; | |
} | |
No* getProximo() | |
{ | |
return this->proximo; | |
} | |
void imprimir() | |
{ | |
printf("%d, ", this->valor); | |
} | |
}; | |
class Lista | |
{ | |
private: | |
int tamanho; | |
No* primeiro; | |
No* ultimo; | |
public: | |
Lista() | |
{ | |
this->tamanho = 0; | |
this->primeiro = NULL; | |
this->ultimo = NULL; | |
} | |
void inserirFim(int valor) | |
{ | |
if (this->tamanho == 0) | |
{ | |
this->primeiro = new No(valor); | |
this->ultimo = primeiro; | |
this->tamanho++; | |
} | |
else | |
{ | |
this->ultimo->setProximo(new No(valor)); | |
this->ultimo = this->ultimo->getProximo(); | |
this->tamanho++; | |
} | |
} | |
void inserirComeco(int valor) | |
{ | |
if (this->tamanho == 0) | |
{ | |
this->primeiro = new No(valor); | |
this->ultimo = primeiro; | |
this->tamanho++; | |
} | |
else | |
{ | |
No* aux = primeiro; | |
primeiro = new No(valor); | |
primeiro->setProximo(aux); | |
this->tamanho++; | |
} | |
} | |
void remover(int valor) | |
{ | |
No* atual = this->primeiro; | |
No* anterior = NULL; | |
while(atual != NULL) | |
{ | |
if(anterior == NULL) | |
{ | |
if(atual->getValor() == valor) | |
{ | |
this->primeiro = atual->getProximo(); | |
delete atual; | |
break; | |
} | |
} | |
else | |
{ | |
if(atual->getValor() == valor) | |
{ | |
anterior->setProximo(atual->getProximo()); | |
delete atual; | |
atual = anterior->getProximo(); | |
break; | |
} | |
} | |
anterior = atual; | |
atual = atual->getProximo(); | |
} | |
} | |
void imprimir() | |
{ | |
No* atual = this->primeiro; | |
while (atual != NULL) | |
{ | |
atual->imprimir(); | |
atual = atual->getProximo(); | |
} | |
} | |
~Lista() | |
{ | |
No* atual = this->primeiro; | |
while (atual != NULL) | |
{ | |
No* aux = atual->getProximo(); | |
delete atual; | |
atual = aux; | |
} | |
printf("Lista apagada com sucesso!\n"); | |
} | |
}; | |
int main(int argc, const char * argv[]) { | |
Lista* teste = new Lista(); | |
teste->inserirFim(0); | |
teste->inserirFim(1); | |
teste->inserirFim(2); | |
teste->inserirFim(3); | |
teste->inserirFim(4); | |
teste->inserirComeco(-1); | |
teste->inserirComeco(-2); | |
teste->imprimir(); | |
teste->remover(4); | |
teste->imprimir(); | |
delete teste; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment