A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Principais operações em Listas TPA - 2009-2. Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p.

Apresentações semelhantes


Apresentação em tema: "Principais operações em Listas TPA - 2009-2. Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p."— Transcrição da apresentação:

1 Principais operações em Listas TPA - 2009-2

2 Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p =malloc(sizeof(struct nodo)); 4. p->prox=NULL; 5. p->e=e; 6. if (*l == NULL) { 7. *l =p; 8. } 9. else { 10. paux = *l; 11. while(paux->prox){ 12. paux=paux->prox; 13. } 14. paux->prox=p; 15. } 16. 17.}

3 Insere no final da lista Recursivamente 1.void insereNofinalDaListaRec(Lista *l, Elemento e){ 2. if (*l == NULL) { 3. *l = malloc(sizeof(struct nodo)); 4. (*l)->e=e; 5. (*l)->prox = NULL; 6. } 7. else 8. insereNofinalDaLista( &((*l)->prox), e); 9.} 10.

4 Inserção Ordenada – 1.void insereListaOrdenada(Lista *l, Elemento e){ 2.Lista paux,pant,p; 3. p = malloc(sizeof(struct nodo)); 4. p->e=e; 5. p->prox = NULL; 6. 7. if (*l == NULL) { 8. *l=p; 9. } 10. else{ 11. pant=*l; 12. paux = pant->prox; 13. while(paux!=NULL){ 14. if((paux)->e.codigo>=e.codigo){ 15. break; 16. } 17. pant=paux; 18. paux=paux->prox; 19. } 20. p->prox=paux; 21. pant->prox = p; 22. } 23.}

5 Remove da Lista um elemento arbitrário 1.Elemento removeDaLista(Lista *l, int codigo){ 2.Lista paux; 3.Elemento e; 4. if(*l==NULL){ 5. return e; 6. } 7.if((*l)->e.codigo== codigo){ 8.paux = *l; 9. *l=(*l)->prox; 10. e = paux->e; 11. free(paux); 12. return e; 13. } 14. else { 15. return removeDaLista(&((*l)->prox),codigo); 16. } 17. }

6 Lista Circular Inserção 1.void insereaDireita(Lista *l, Elemento e){ 2. Lista p; 3. p = malloc(sizeof(struct nodo)); 4. p->e = e; 5. if (*l==NULL){ /* Lista vazia */ 6. p->prox = p; 7. *l = p; 8. } 9. else { 10. p->prox = (*l)->prox; 11. (*l)->prox = p; 12. } 13. }

7 Remoção 1.int removeaDireita(Lista *l, Elemento *ret){ 2. Lista paux; 3. if (*l == NULL){ 4. return 0; 5. } 6. else { 7. paux = (*l)->prox; 8. *ret = paux->e; 9. if (*l==paux){ /* Lista com apenas um nó */ 10. *l = NULL; 11. } 12. else{ 13. (*l)->prox = paux->prox; 14. } 15. free(paux); 16. return 1; 17. } 18. }

8 Remoção de elemento arbitrário 1.Elemento removeElemento(Lista *l, int codigo){ 2. Lista paux1,paux2; 3. Elemento e; 4. if(*l==NULL){ 5. return e; 6. } 7. paux1=*l; 8. paux2=paux1->prox; 9. do{ 10. if (paux2->e.codigo==codigo){ 11. break; 12. } 13. paux1=paux2; 14. paux2=paux2->prox; 15. }while(paux2!=*l); 16. if(paux2->e.codigo!=codigo){ 17. // elemento não encontrado 18. return e; //retorna e vazio; 19. } 20. paux1->prox = paux2->prox; 21. e = paux2->e; 22. if(*l==paux2){ /* se o nodo procurado é o apontado por l*/ 23. if(paux1!=paux2){ /* lista com mais de um nodo */ 24. *l=paux1; 25. } 26. else { /* lista com um so nodo */ 27. *l=NULL; 28. } 29. } 30. free(paux2); 31. return e; 32. }

9 Lista duplamente encadeada 1.void insereNaLista(Lista *l, Elemento e){ 2. Lista p; 3. p = malloc(sizeof(struct nodo)); 4. p->e = e; 5. 6. if (*l==NULL){ /* Lista vazia */ 7. p->prox = p; 8. p->ant=p; 9. *l = p; 10. } 11. else { 12. (*l)->ant->prox=p; 13. p->prox=(*l); 14. p->ant=(*l)->ant; 15. (*l)->ant=p; 16. (*l)=p; 17. } 18.}

10 Remoção 1.Elemento removeDaLista(Lista *l){ 2.Elemento e; 3.Lista anterior, proximo; 4. if(*l==NULL){ // lista vazia 5. return e; 6. } 7. if(*l==(*l)->ant) { // lista de um nodo somente 8. e=(*l)->e; 9. free(*l); 10. *l=NULL; 11. return e; 12. } 13. anterior=(*l)->ant; 14. proximo = (*l)->prox; 15. anterior->prox=proximo; 16. proximo->ant=anterior; 17. e=(*l)->e; 18. free(*l); 19. *l=proximo; 20. return e; 21.}

11 1.Removendo elemento arbitrário. 2.Elemento removeElemento(Lista *l, int codigo){ 3. Lista aeliminar, proximo,anterior; 4. Elemento e; 5. if(*l==NULL){ // 1.lista vazia 6. return e; 7. } 8. aeliminar = *l; 9. do { 10. if(aeliminar->e.codigo==codigo) 11. break; 12. aeliminar=aeliminar->prox; 13. }while(aeliminar!=*l); 14. if (aeliminar->e.codigo!=codigo){ // 2.elemento nao existe 15. return e; 16. } 17. if ((*l)->ant==(*l)){ // 3. so um elemento na lista 18. *l=NULL; 19. return e; 20. } 21. else{ 22. anterior = aeliminar->ant; 23. proximo = aeliminar->prox; 24. anterior->prox=proximo; 25. proximo->ant=anterior; 26. if(aeliminar==*l){ // 4. se eliminar o elemento apontado por l atualizo l 27. *l=proximo; 28. } 29. } 30. e = aeliminar->e; 31. free(aeliminar); 32. return e; 33.}


Carregar ppt "Principais operações em Listas TPA - 2009-2. Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p."

Apresentações semelhantes


Anúncios Google