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");
}
#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");
}
Blogger Comentario