Conversão de Números em C usando Pilha

Pilha: Conversão de Números

#include
#include

typedef struct no
{
int info;
struct no *prox;
} lista;

//como desejamos alterar o valor de dentro do Main e lá temos um ponteiro,
//é necessário declarar um ponteiro para ponteiro
void insereInicio(struct no **inicio, int info)
{
lista *aux;
if((aux = (struct no*) malloc(sizeof(struct no))) != NULL)
{
//atribui o valor de 'info' ao 'aux -> info' do no
aux -> info = info;

//atribui o valor de NULL ao prox do no
aux -> prox = NULL;

//se inicio for diferente de NULL o no atual deve recebé-lo
if ((*inicio) != NULL)
aux ->prox = (*inicio);



//o inicio precisa ser atualizado
(*inicio) = aux;
}
}

int busca(struct no *list, int info)
{
while(list!=NULL)
{
if(list->info == info)
return 1;
list = list->prox;
}
return 0;
}
void lstdde_imprime(struct no *list)
{
 lista * l;
//printf("Tamanho da lista %d\n",l.tamanho);
//for (p = l.prox; p != NULL; p = p->prox)
for (list = l; list != NULL; list = list->prox)
printf("info= %d\n", list->info);
}
//a função deve retornar um ponteiro do tipo 'lista'
lista *uniao(lista *list1)
{
lista *list3 = NULL;

while(list1 != NULL)
{

if(!busca(list3, list1->info))
insereInicio(&list3, list1->info);
list1 = list1->prox;
}


return list3;
}

//No Main deve conter um método que gere uma lista
//abaixo contém um exemplo para teste
int main()
{
lista *list1 = NULL, *list2 = NULL;

//esse for criará uma lista sequencial decrescente,
//base no método de inserção no início
    printf("Lista 1\n");
insereInicio(&list1, 3);
insereInicio(&list1, 5);
insereInicio(&list1, 7);
    insereInicio(&list1, 7);
    insereInicio(&list1, 3);
    insereInicio(&list1, 5);
    insereInicio(&list1, 6);
    lstdde_imprime(list1);
    printf("Lista sem repeticao\n");
list2 = uniao(list1);
    lstdde_imprime(list2);

    system("pause");
}

Compartilhar no Google Plus
    Blogger Comentario
Postagem mais recente Postagem mais antiga Página inicial