Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "lista_encadeada.h"
- void iniciarLista(struct lista_enc *lista){
- lista->cabeca = NULL;
- lista->tamanho = 0;
- }
- int vaziaLista(struct lista_enc *lista){
- if(lista->tamanho == 0){
- return 1;
- }else{
- return 0;
- }
- }
- int tamanhoLista(struct lista_enc *lista){
- return lista->tamanho;
- }
- int buscaIndice(struct lista_enc *lista, int indice, int *dado){
- struct no *ptr = lista->cabeca;
- int count = 1;
- if(lista->cabeca == NULL) return 0;
- while((ptr!=NULL) && (count < indice)){
- ptr = ptr->proximo;
- count++;
- }
- if(ptr == NULL) return 0;
- *dado = ptr->valor;
- return 1;
- }
- int buscaValor(struct lista_enc *lista, int valor){
- if(lista->cabeca == NULL) return 0;
- struct no *ptr = lista->cabeca;
- int count = 1;
- while(ptr != NULL){
- if(ptr->valor == valor){
- return count;
- }
- ptr = ptr->proximo;
- count++;
- }
- return 0;
- }
- int insereLista(struct lista_enc *lista, int indice, int valor){
- int ret;
- if(vaziaLista(lista)){
- if(indice != 1){
- return 0;
- }
- ret = insereVaziaLista(lista, valor);
- return ret;
- }else if(indice == 1){
- ret = insereComecoLista(lista, valor);
- return ret;
- }else if(indice == lista->tamanho){
- ret = insereFimLista(lista, valor);
- return ret;
- }else{
- ret = insereMeioLista(lista, indice, valor);
- return ret;
- }
- }
- int insereVaziaLista(struct lista_enc *lista, int valor){
- struct no *novoNo;
- novoNo = malloc(sizeof(struct no));
- if(novoNo == NULL) return 0;
- novoNo->valor = valor;
- novoNo->proximo = NULL;
- lista->cabeca = novoNo;
- ++(lista->tamanho);
- return 1;
- }
- int insereComecoLista(struct lista_enc *lista, int valor){
- struct no *novoNo;
- novoNo = malloc(sizeof(struct no));
- if(novoNo == NULL){
- return 0;
- }
- novoNo->valor = valor;
- novoNo->proximo = lista->cabeca;
- lista->cabeca = novoNo;
- ++(lista->tamanho);
- return 1;
- }
- int insereFimLista(struct lista_enc *lista, int valor){
- struct no *novoNo;
- novoNo = malloc(sizeof(struct no));
- if(novoNo == NULL){
- return 0;
- }
- novoNo->valor = valor;
- struct no *ptr = lista->cabeca;
- while(ptr->proximo !=NULL){
- ptr = ptr->proximo;
- }
- ptr->proximo = novoNo;
- novoNo->proximo = NULL;
- ++(lista->tamanho);
- return 1;
- }
- int insereMeioLista(struct lista_enc *lista, int indice, int valor){
- struct no *ptr = lista->cabeca;
- struct no *novoNo;
- int count = 1;
- while((count < indice - 1) && (ptr!=NULL)){
- ptr = ptr->proximo;
- count++;
- }
- if(ptr==NULL){
- return 0;
- }
- novoNo = malloc(sizeof(struct no));
- if(novoNo == NULL) return 0;
- novoNo->valor = valor;
- novoNo->proximo = ptr->proximo;
- ptr->proximo = novoNo;
- ++(lista->tamanho);
- return 1;
- }
- int removerLista(struct lista_enc *lista, int indice, int *dado){
- int ret;
- if(vaziaLista(lista)){
- return 0;
- }
- if(indice == 1){
- ret = removeComecoLista(lista, dado);
- return ret;
- }else{
- ret = removeMeioLista(lista, indice, dado);
- return ret;
- }
- return ret;
- }
- int removeComecoLista(struct lista_enc *lista, int *dado){
- struct no *ptr = lista->cabeca;
- *dado = ptr->valor;
- lista->cabeca = ptr->proximo;
- --(lista->tamanho);
- free(ptr);
- return 1;
- }
- int removeMeioLista(struct lista_enc *lista, int indice, int *dado){
- struct no *aux, *ptr = lista->cabeca;
- int count = 1;
- while((count <= indice - 1) && (ptr != NULL)){
- aux = ptr;
- ptr = ptr->proximo;
- count++;
- }
- if(ptr == NULL) return 0;
- *dado = ptr->valor;
- aux->proximo = ptr->proximo;
- --(lista->tamanho);
- free(ptr);
- return 1;
- }
- int mostrarLista(struct lista_enc *lista){
- struct no *ptr = lista->cabeca;
- int count = 1;
- if(vaziaLista(lista)){
- return 0;
- }
- printf("Tamanho da lista: %d elementos(s)\n", lista->tamanho);
- printf("-----------------------------------\n");
- while(ptr != NULL){
- printf("\n\tNO : %d\n", count);
- printf("\tVALOR : %d\n", ptr->valor);
- count++;
- ptr = ptr->proximo;
- }
- printf("\n");
- return 1;
- }
- int dividirLista(struct lista_enc *lista, struct lista_enc *lista_par, struct lista_enc *lista_impar){
- struct no *ptr = lista->cabeca;
- while(ptr!=NULL){
- if((ptr->valor % 2)== 0){
- insereLista(lista_par, lista_par->tamanho + 1, ptr->valor);
- }else{
- insereLista(lista_impar, lista_impar->tamanho + 1, ptr->valor);
- }
- ptr = ptr->proximo;
- }
- mostrarLista(lista_par);
- mostrarLista(lista_impar);
- return 1;
- }
- int concatenaLista(struct lista_enc *lista, struct lista_enc *lista2, struct lista_enc *novalista){
- struct no *ptr = lista->cabeca;
- int count = 1;
- if(vaziaLista(lista) || vaziaLista(lista2)){
- return 0;
- }
- while(ptr!=NULL){
- insereLista(novalista, count, ptr->valor);
- ptr = ptr->proximo;
- count++;
- }
- ptr = lista2->cabeca;
- while(ptr!=NULL){
- insereLista(novalista, count, ptr->valor);
- ptr = ptr->proximo;
- count++;
- }
- mostrarLista(novalista);
- return 1;
- }
- int modificarElemento(struct lista_enc *lista, int posicao, int valor){
- if(posicao > lista->tamanho || posicao <= 0){
- return 0;
- }
- struct no *ptr = lista->cabeca;
- int count = 1;
- while( (count < posicao) && (ptr != NULL) ){
- ptr = ptr->proximo;
- count++;
- }
- ptr->valor = valor;
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment