void ListaEnc<T>::adicionaNoInicio(const T& dado) { Elemento<T>* novo = new Elemento<T>(dado, 0); if (novo == 0) { throw ExcecaoListaCheia(); } novo->setProximo(cabeca); cabeca = novo; tamanho++; }
void ListaCirc<T>::adicionaNoInicio(const T& dado) { Elemento<T>* novo = new Elemento<T>(dado, 0); if (novo == 0) { throw ExcecaoListaCheia(); } novo->setProximo(this->cabeca->getProximo()); this->cabeca->setProximo(novo); this->tamanho++; }
void Lista<T>::adicionaEmOrdem(T dado) { if (listaCheia()) { throw ExcecaoListaCheia(); } int posicao = 0; while((posicao <= ultimo) && (maior(dado, lista[posicao]))) { posicao++; } adicionaNaPosicao(dado, posicao); }
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; }
void ListaDupla<T>::adicionaNoInicioDuplo(const T& dado) { ElementoDuplo<T>* novo = new ElementoDuplo<T>(dado, 0, 0); if (novo == 0) { throw ExcecaoListaCheia(); } novo->setProximo(cabeca); novo->setAnterior(0); cabeca = novo; if (novo->getProximo() != 0) { novo->getProximo()->setAnterior(novo); } tamanho++; }
void FilaEnc<T>::inclui(const T& dado) { Elemento<T>* novo = new Elemento<T>(dado, 0); if(novo == 0) { throw ExcecaoListaCheia(); } if(filaVazia()) { this->cabeca = novo; } else { fim->setProximo(novo); } novo->setProximo(0); fim = novo; this->tamanho++; }
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++; }
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++; }