Created
November 14, 2019 00:03
-
-
Save Pharaoh00/4d4b17bc70ec60d24c316f307bca2c15 to your computer and use it in GitHub Desktop.
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
void inserirPassageiro(pListaPassageiro lista, pPassageiro item) { | |
//printf("TEST - func call\n"); | |
pCelulaPassageiro q = lista->primeiro->proximo; | |
//printf("TEST - alloc q\n"); | |
pCelulaPassageiro anterior = lista->primeiro; | |
//printf("TEST - alloc anterior\n"); | |
pCelulaPassageiro novaCelula = criaCelulaPassageiro(item); | |
//printf("TEST - alloc nova celula\n"); | |
if (!listaVaziaPassageiro(*lista)) { | |
//printf("TEST - lista cheia\n"); | |
while (q != NULL) { | |
// OPÇÃO CASO FOR O ULTIMO | |
// HÁ À NECESSIDADE DESSA OPÇÃO SER A PRIMEIRA. | |
// TERÁ QUE VERIFICAR SE O q->proximo É NULL ou lista->ultimo == q | |
// SABE-SE QUE O q EM QUESTÃO É O ULTIMO ITEM DA LISTA E SE FOR NECESSARIO A INSERCÃO DEPOIS DO q, | |
// A LISTA TEM QUE SER ATUALIZA. | |
if (q->proximo == NULL && strcmp(novaCelula->item->nome, q->item->nome) == 1) { | |
printf("ultimo\n"); | |
// TODO: | |
// QUER DIZER QUE O item SERA INSERIDO NO ULTIMO aka lista->ultimo | |
// lista->ultimo TEM QUE SER ATUALIZADO COM O item | |
novaCelula->proximo = q->proximo; // == NULL | |
q->proximo = novaCelula; | |
lista->ultimo = novaCelula; // ultimo atualizado. | |
break; // pare de procurar. | |
} | |
// OPÇÃO PARA INSERIR ANTES DO q E DEPOIS DO anterior. | |
// | |
// NÃO TEM QUE CHECAR SE REALMENTE É DEPOIS DO ANTERIOR. | |
else if (strcmp(novaCelula->item->nome, q->item->nome) == -1) { | |
//else if(strcmp(novaCelula->item->nome, anterior->item->nome) == 1) { | |
printf("strcmp == -1\n"); | |
anterior->proximo = novaCelula; | |
novaCelula->proximo = q; | |
break; // pare de procurar. | |
} | |
// OPÇÃO PARA INSERIR DEPOIS DO q (SENDO q->proximo != NULL) | |
// TEM QUE GARANTIR QUE O item FIQUE ANTES DO q->proximo. | |
// NO CASO É: Se somente se, q->item der 1 (inserir depois do q) e q->proximo der -1 (inserir antes) | |
else if (strcmp(novaCelula->item->nome, q->item->nome) == 1 && | |
strcmp(novaCelula->item->nome, q->proximo->item->nome) == -1) { | |
printf("strcmp == 1\n"); | |
// SEGUIR A SEQUENCIA. Primeiro falar q nova celula aponta para q->proximo | |
novaCelula->proximo = q->proximo; | |
q->proximo = novaCelula; | |
break; // pare de procurar. | |
} else { | |
q = q->proximo; // continue procurando. | |
} | |
} | |
} else { | |
// CASO A LISTA ESTIVER VAZIA, O ITEM SERÁ INSERIDO POR ULTIMO DE QUALQUER FORMA. | |
// SOMENTE PARA INSERIR UM ITEM COM A LISTA VAZIA, | |
// POIS EM NENHUMA DAS OPÇÕES A CIMA GARANTE ISSO. | |
lista->ultimo->proximo = novaCelula; | |
lista->ultimo = novaCelula; | |
return; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment