Exemplo n.º 1
0
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++;
}
Exemplo n.º 2
0
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++;
}
Exemplo n.º 3
0
void Lista<T>::adicionaEmOrdem(T dado) {
	if (listaCheia()) {
		throw ExcecaoListaCheia();
	}
	int posicao = 0;
	while((posicao <= ultimo) && (maior(dado, lista[posicao]))) {
		posicao++;
	}
	adicionaNaPosicao(dado, posicao);
}
Exemplo n.º 4
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;
}
Exemplo n.º 5
0
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++;
}
Exemplo n.º 6
0
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++;
}
Exemplo n.º 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++;
}
Exemplo n.º 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++;
}
Exemplo n.º 9
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++;
}