1.Agregar(Agregar un numero)
2.Ordenar(Ordenar la lista)
3.Insertar(Insertar un numero aleatorio en la lista en la posicion que corresponde,
debe estar ordenada con anterioridad)
4.Buscar(un elemento si está o no en la lista)
5.eliminar(un elemento de la lista(si no está q presente un mensaje))
6.Presentar(la lista enlazada)
7.salir
*/
#include
#include
#include
#define MX 1
#define randomize (srand(time(NULL)))
#define random(num) (rand()%(num))
typedef int Item;
typedef struct Elemento{
Item dato;
struct Elemento* siguiente;
}Nodo;
void InsertarNodo(Nodo** ant, Item d);
void InsertarCabezaLista(Nodo** cabeza, Item entrada);
Nodo* NuevoNodo(Item x);
int EsVacia(Nodo *cabeza);
Nodo* BuscarEnLista(Nodo* cabeza, Item dato);
void AnadePL(Nodo** L, Item e);
void InsertarEnOrden(Nodo** cabeza, Item dato);
void EliminarEnLista(Nodo** cabeza, Item dato);
void ordena(Nodo** cabeza, int n);
void presentar(Nodo** cabeza);
void main(){
Item d;
int op;
int n, i;
int num;
Nodo *cabeza;//declaracion de un puntero a una estructura
cabeza=NULL;//inicializa cabeza en lista vacia
randomize;
while(op!=7){
printf(" \n 1. AGREGAR \n 2. ORDENAR \n 3. INSERTAR UN ELEMENTO \n 4. BUSCAR \n 5. ELIMINAR \n 6. PRESENTAR \n 7. SALIR \n ");
printf("Ingrese la opcion que desea: ");
scanf("%d",&op);
switch(op){
case 1:
printf("Ingrese cuantos numeros desea almacenar: ");
scanf("%d",&n);
for(i=1; i<=n; i++){
d = random(30);
InsertarNodo(&cabeza, d);
}
printf("Elementos anadidos aleatoriamente ");
break;
case 2:
if(EsVacia(cabeza)!=NULL){
printf("La lista esta vacia");
}else{
ordena(&cabeza,n);
printf("Ordenado correctamente \n");
presentar(&cabeza);
}
break;
case 3:
if(EsVacia(cabeza)!=NULL){
printf("La lista esta vacia \n");
}else{
ordena(&cabeza,n);
printf("Ingrese el numero a insertar:");
scanf("%d", &num );
InsertarEnOrden(&cabeza, num);
printf("Insertado correctamente");
}
break;
case 4:
if(EsVacia(cabeza)!=NULL){
printf("La lista esta vacia \n");
}else{
printf("Ingrese un numero a buscar en la lista: ");
scanf("%d", &num);
if(BuscarEnLista(cabeza,num)!=NULL){
printf("Elemento encontrado");
}else{
printf("Elemento no encontrado");
}
}
break;
case 5:
if(EsVacia(cabeza)!=NULL){
printf("La lista esta vacia \n");
}else{
printf("Ingrese un numero que desee eliminar:");
scanf("%d", &num);
EliminarEnLista(&cabeza, num);
presentar(&cabeza);
}
break;
case 6:
presentar(&cabeza);
break;
}
}
}
Nodo* NuevoNodo(Item x){
Nodo *a;
a=(Nodo*)malloc(sizeof(Nodo));
a->dato = x;
a->siguiente=NULL;
return a;
}
void InsertarNodo(Nodo** ant, Item d){
Nodo *a;
a= NuevoNodo(d);
a->siguiente = *ant;
*ant = a;
}
void presentar(Nodo** cabeza){
Nodo *ptr;
int k;
for(k=0,ptr=*cabeza;ptr;){//si ptr es un puntero hast q ptr sea null
printf("%d ",ptr->dato);
k++;
ptr= ptr->siguiente;
printf("\n");
}
}
int EsVacia(Nodo *cabeza){
return(cabeza==NULL);
}
Nodo* BuscarEnLista(Nodo* cabeza, Item dato){
Nodo *Ptr;
for(Ptr= cabeza; Ptr != NULL; Ptr->siguiente){
if(Ptr->dato == dato){
return Ptr;
}
return NULL;
}
}
void InsertarEnOrden(Nodo** cabeza, Item dato){
Nodo *nuevo, *ant, *pos;
nuevo=NuevoNodo(dato);
if(*cabeza == NULL)
*cabeza =nuevo;
else
if(dato<=(*cabeza)->dato){
nuevo->siguiente=*cabeza;
*cabeza=nuevo;
}
else{
ant=pos=*cabeza;
while((dato>pos->dato) &&(pos->siguiente != NULL)){
ant=pos;
pos=pos->siguiente;
}
if(dato>pos->dato)
ant= pos;
nuevo->siguiente= ant->siguiente;
ant->siguiente=nuevo;
}
}
void EliminarEnLista(Nodo** cabeza, Item dato){
Nodo *ant, *pos;
int encontrado=0;
ant =NULL;
pos= *cabeza;
while((!encontrado)&&(pos != NULL)){
encontrado=(dato<=(pos->dato));
if(!encontrado){
ant=pos;
pos= pos->siguiente;
}
}
if(encontrado)
encontrado=((pos->dato)== dato);
if(encontrado){
if(ant == NULL)
*cabeza = pos->siguiente;
else
ant->siguiente=pos->siguiente;
free(pos);
}
}
void ordena(Nodo** cabeza, int n){
int i, j;
Nodo *aux, *aux1, *anterior;
for(i=1; i
aux=*cabeza;
anterior =NULL;
while(j<= (n-i)){
aux1=aux->siguiente;
if(aux->dato > aux1->dato){
aux->siguiente=aux1->siguiente;
aux1->siguiente= aux;
if(anterior == NULL){
*cabeza=aux1;
anterior= *cabeza;
}
else{
anterior->siguiente=aux1;
anterior=aux1;
}
aux= anterior->siguiente;
}
else{
anterior=aux;
aux=aux1;
}
j++;
}
}
}