Created
June 4, 2020 23:06
-
-
Save TopRoupi/391c8a5c6b1ea535665fe18c892a357b 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
// Considerando o programa que cria listas encadeadas e tem funções para incluir elemento no início da lista, retirar elemento inicial da lista, e exibir a lista, desenvolva e teste no próprio programa as seguinte funções (a lista sempre deve ser passada como parâmetro): | |
// a) Construa uma função que retorne a quantidade de elementos de uma lista encadeada simples que será passada como parâmetro; | |
// b) Construa uma função que transforme uma lista encadeada simples em uma lista encadeada circular; | |
// c) Construa uma função que altere a função do item (a) para transorme uma lista encadeada circularque receba como parâmetro uma lista encadeada circular e retorne sua quantidade de elementos; | |
// d) Construa uma função que altere a função do item (b) para que esta transforme uma lista encadeada circular em uma lista encadeada simples; | |
#include <stdio.h> | |
#include <stdlib.h> | |
typedef struct nodo { | |
char data; | |
struct nodo *link; | |
} *ptr; | |
void incluiini(ptr *lista, char elem) { | |
ptr aux = malloc(sizeof(struct nodo)); | |
aux->data = elem; | |
aux->link = *lista; | |
*lista = aux; | |
} | |
void removeini(ptr *lista) { | |
ptr aux; | |
aux = *lista; | |
*lista = aux->link; | |
free(aux); | |
} | |
void exibe(ptr lista) { | |
printf("Lista: [ "); | |
while (lista != NULL) { | |
printf("%c ", lista->data); | |
lista = lista->link; | |
} | |
printf("]\n"); | |
} | |
int tamanho(ptr lista){ | |
if(lista == NULL) | |
return 0; | |
removeini(&lista); | |
return tamanho(lista) + 1; | |
} | |
int tamanho_circular(ptr lista){ | |
if(lista == NULL) | |
return 0; | |
ptr aux = lista; | |
int quantidade = 1; | |
while (aux->link != lista) { | |
aux = aux->link; | |
quantidade++; | |
} | |
return quantidade; | |
} | |
void to_circular(ptr *lista){ | |
ptr aux = *lista; | |
while (aux->link != NULL) { | |
aux = aux->link; | |
} | |
aux->link = *lista; | |
} | |
void to_simples(ptr *lista){ | |
ptr aux = *lista; | |
while (aux->link != *lista) { | |
aux = aux->link; | |
} | |
aux->link = NULL; | |
} | |
int main() { | |
printf("Cria a lista1 C A D E...\n"); | |
ptr lista1 = NULL; | |
lista1 = malloc(sizeof(struct nodo)); | |
lista1->data = 'C'; | |
lista1->link = malloc(sizeof(struct nodo)); | |
lista1->link->data = 'A'; | |
lista1->link->link = malloc(sizeof(struct nodo)); | |
lista1->link->link->data = 'D'; | |
lista1->link->link->link = malloc(sizeof(struct nodo)); | |
lista1->link->link->link->data = 'E'; | |
lista1->link->link->link->link = NULL; | |
printf("\nMostra os elementos da lista1: \n"); | |
exibe(lista1); | |
to_circular(&lista1); | |
printf("%c ", lista1->data); | |
printf("%c ", lista1->link->data); | |
printf("%c ", lista1->link->link->data); | |
printf("%c ", lista1->link->link->link->data); | |
printf("%c ", lista1->link->link->link->link->data); | |
printf("%d", tamanho_circular(lista1)); | |
// printf("\n"); | |
// to_simples(&lista1); | |
// printf("%c ", lista1->data); | |
// printf("%c ", lista1->link->data); | |
// printf("%c ", lista1->link->link->data); | |
// printf("%c ", lista1->link->link->link->data); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment