Saturday, April 7, 2012
/*Alocação @ Lista inserção ordenada -*/
#include<stdio.h>
struct cel
{
int dado;
struct cel *NEXT;
};
typedef struct cel cel;
cel *Penultimo(cel**);
cel *Novo(void);
void Adiciona(cel**,cel**);
void ver(cel*);
void clrscr(void);
//void *Descarrega(cel**);
//void *Deleta(cel**);
//void varrer(cel**);
int main()
{
cel *dado,*fim;
fim = NULL;
char opc;
do
{
clrscr();
printf("Escolha:\t[I]nserir\t[V]er\t\033[37m\033[40m[R]emover\033[0;0m\t[S]air\n# ");
scanf("%c",&opc);
switch(opc)
{
case 'i':
case 'I': Adiciona(&dado,&fim);
case 'v':
case 'V': ver(dado); break;
case 'r':
case 'R': break;
case 's':
case 'S': return 0;
}
}while(1);
return 1;
}
cel *Penultimo(cel **dado)
{
if((*dado)->NEXT != NULL)
{
Penultimo(&(*dado)->NEXT);
}
else return (*dado);
}
cel *Novo()
{
#include<stdlib.h>
cel *dado;
dado = (cel *) malloc(sizeof(cel));
printf("Valor: ");
scanf("%d",&dado->dado);
dado->NEXT = NULL;
return dado;
}
/*void Adiciona(cel **dado)
{
if(!(*dado))
{
(*dado) = Novo();
}
else if((*dado)->NEXT != NULL)
{
Adiciona(&(*dado)->NEXT);
}
else
{
(*dado)->NEXT = Novo();
}*/
void Adiciona(cel**inicio,cel **fim)
{
cel *novo;
novo = Novo();
if(!(*inicio))
{
(*inicio) = novo;
(*fim) = (*inicio);
}
else
{
(*fim) = Penultimo(&(*inicio));
if(novo->dado < (*inicio)->dado)
{
novo->NEXT = (*inicio);
(*inicio) = novo;
}
else if(novo->dado > (*fim)->dado)
{
(*fim)->NEXT = novo;
}
else
{
cel *anterior,*aux;
aux = (*inicio);
while(novo->dado > aux->dado)
{
anterior = aux;
aux = aux->NEXT;
}
anterior->NEXT = novo;
novo->NEXT = aux;
}
}
return;
}
// return;
//}
void ver(cel *dado)
{
if(dado != NULL)
{
printf("%d\t",dado->dado);
ver(dado->NEXT);
}
scanf("%*c");
return;
}
void clrscr()
{
#include<stdlib.h>
#ifdef WIN32
system("cls");
#else
system("clear");
#endif
}
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment