Skip to content

Instantly share code, notes, and snippets.

@TopRoupi
Created June 4, 2020 23:06
Show Gist options
  • Save TopRoupi/391c8a5c6b1ea535665fe18c892a357b to your computer and use it in GitHub Desktop.
Save TopRoupi/391c8a5c6b1ea535665fe18c892a357b to your computer and use it in GitHub Desktop.
// 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