T ListaCirc<T>::retiraDoInicio() { Elemento<T>* saiu; T volta; if (ListaEnc<T>::listaVazia()) { throw ExcecaoPosicao(); } saiu = this->cabeca->getProximo(); volta = saiu->getInfo(); this->cabeca->setProximo(saiu->getProximo()); this->tamanho--; delete saiu; return volta; }
void Lista<T>::adicionaNaPosicao(T dado, int posicao) { if (listaCheia()) { throw ExcecaoListaCheia(); } if (posicaoInvalida(posicao)) { throw ExcecaoPosicao(); } ultimo++; for (int i = ultimo; i > posicao; i--) { lista[i] = lista[i - 1]; } lista[posicao] = dado; }
T Lista<T>::retiraDaPosicao(int posicao) { if (listaVazia()) { throw ExcecaoListaVazia(); } if (posicaoInvalida(posicao)) { throw ExcecaoPosicao(); } ultimo--; T dado = lista[posicao]; for (int i = posicao; i <= ultimo; i++) { lista[posicao] = lista[posicao + 1]; } return dado; }
T ListaDupla<T>::retiraDoInicioDuplo() { ElementoDuplo<T>* saiu; T volta; if (listaVazia()) { throw ExcecaoPosicao(); } saiu = cabeca; volta = saiu->getInfo(); cabeca = saiu->getProximo(); if (cabeca != 0) { cabeca->setAnterior(0); } tamanho--; delete saiu; return volta; }
T ListaCirc<T>::retiraDaPosicao(int pos) { if (ListaEnc<T>::posicaoInvalida(pos)) { throw ExcecaoPosicao(); } if (pos == 0) { return retiraDoInicio(); } Elemento<T>* anterior = this->cabeca->getProximo(); for (int i = 1; i < pos - 1; i++) { anterior = anterior->getProximo(); } Elemento<T>* eliminar = anterior->getProximo(); T volta = eliminar->getInfo(); anterior->setProximo(eliminar->getProximo()); this->tamanho--; delete eliminar; return volta; }
T ListaEnc<T>::retiraDaPosicao(int posicao) { if (posicaoInvalida(posicao)) { throw ExcecaoPosicao(); } if (posicao == 0) { return retiraDoInicio(); } Elemento<T>* anterior = cabeca; for (int i = 0; i < posicao - 2; i++) { anterior = anterior->getProximo(); } Elemento<T>* eliminar = anterior->getProximo(); T volta = eliminar->getInfo(); anterior->setProximo(eliminar->getProximo()); tamanho--; delete eliminar; return volta; }
void ListaEnc<T>::adicionaNaPosicao(const T& dado, int posicao) { if (posicaoInvalida(posicao)) { throw ExcecaoPosicao(); } if (posicao == 0) { return adicionaNoInicio(dado); } Elemento<T>* novo = new Elemento<T>(dado, 0); if (novo == 0) { throw ExcecaoListaCheia(); } Elemento<T>* anterior = cabeca; for (int i = 0; i < posicao - 1; i++) { anterior = anterior->getProximo(); } novo->setProximo(anterior->getProximo()); anterior->setProximo(novo); tamanho++; }
void ListaCirc<T>::adicionaNaPosicao(const T& dado, int pos) { if (ListaEnc<T>::posicaoInvalida(pos)) { throw ExcecaoPosicao(); } if (pos == 0) { adicionaNoInicio(dado); return; } Elemento<T>* anterior = this->cabeca->getProximo(); Elemento<T>* novo = new Elemento<T>(dado, 0); if (novo == 0) { throw ExcecaoListaCheia(); } for (int i = 1; i < pos; i++) { anterior = anterior->getProximo(); } novo->setProximo(anterior->getProximo()); anterior->setProximo(novo); this->tamanho++; }
T ListaDupla<T>::retiraDaPosicaoDuplo(int pos) { if (posicaoInvalida(pos)) { throw ExcecaoPosicao(); } if (pos == 0) { return retiraDoInicioDuplo(); } ElementoDuplo<T>* anterior = cabeca; for (int i = 0; i < pos - 2; i++) { anterior = anterior->getProximo(); } ElementoDuplo<T>* eliminar = anterior->getProximo(); T volta = eliminar->getInfo(); anterior->setProximo(eliminar->getProximo()); if (eliminar->getProximo() != 0) { eliminar->getProximo()->setAnterior(anterior); } tamanho--; delete eliminar; return volta; }
void ListaDupla<T>::adicionaNaPosicaoDuplo(const T& dado, int pos) { if (posicaoInvalida(pos)) { throw ExcecaoPosicao(); } if (pos == 0) { adicionaNoInicioDuplo(dado); return; } ElementoDuplo<T>* anterior = cabeca; ElementoDuplo<T>* novo = new ElementoDuplo<T>(dado, 0, 0); if (novo == 0) { throw ExcecaoListaCheia(); } for (int i = 0; i < pos - 1; i++) { anterior = anterior->getProximo(); } novo->setProximo(anterior->getProximo()); if(novo->getProximo() != 0) { novo->getProximo()->setAnterior(novo); } anterior->setProximo(novo); anterior->getProximo()->setAnterior(anterior); tamanho++; }