Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
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;
}
Example #6
0
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;
}
Example #7
0
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++;
}
Example #8
0
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++;
}
Example #9
0
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;
}
Example #10
0
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++;
}