#include <stdio.h>
#include <stdlib.h>
typedef struct nodo{
int dato;
struct nodo *siguiente;
}Nodo;
Nodo *principioPila = NULL;
Nodo *primeroCola = NULL;
Nodo *ultimoCola = NULL;
Nodo *lista = NULL;
//Prototipos de funciones
void meterPila();
void llenarCola();
int introducirDatos();
void sacarPila();
void vaciarCola();
void ListaEnlazadaOrdenada();
void visualizarDatos();
int main()
{
printf("Ejercicio Examen\n\n");
printf("Datos para la pila\n");
meterPila();
printf("\n\nDatos para la cola\n");
llenarCola();
printf("\n\nDatos guardados en la pila\n\n");
sacarPila();
printf("\n\nDatos guardados en la cola\n\n");
vaciarCola();
ListaEnlazadaOrdenada();
printf("\n\nLista enlazada ordenada\n\n");
visualizarDatos();
return 0;
}
void meterPila()
{
Nodo *nuevo;
int numero = introducirDatos();
while(numero!=0)
{
nuevo = (Nodo*)malloc(sizeof(Nodo));
nuevo->dato=numero;
nuevo->siguiente=principioPila;
principioPila=nuevo;
numero=introducirDatos();
}
}
void llenarCola()
{
Nodo *nuevo;
int numero=introducirDatos();
while(numero!=0)
{
nuevo = (Nodo*)malloc(sizeof(Nodo));
nuevo->dato=numero;
if(ultimoCola==NULL)
{
nuevo->siguiente=NULL;
primeroCola=nuevo;
ultimoCola=nuevo;
}
else
{
nuevo->siguiente=NULL;
ultimoCola->siguiente=nuevo;
ultimoCola=nuevo;
}
numero=introducirDatos();
}
}
int introducirDatos()
{
int x;
printf("Numero: ");
scanf("%d",&x);
return x;
}
void sacarPila()
{
Nodo *actual=principioPila;
while(actual!=NULL)
{
printf(" %d",actual->dato);
actual=actual->siguiente;
}
}
void vaciarCola()
{
Nodo *actual=primeroCola;
while(actual!=NULL)
{
printf(" %d",actual->dato);
actual=actual->siguiente;
}
}
void ListaEnlazadaOrdenada()
{
Nodo *pila,*cola,*pivote,*auxiliar,*anterior;
int valor;
//Pila en la lista enlazada
pila=principioPila;
while(pila!=NULL)
{
valor=pila->dato;
pivote = (Nodo*)malloc(sizeof(Nodo));
pivote->dato=valor;
if(lista==NULL)
{
pivote->siguiente=lista;
lista=pivote;
}
else
{
auxiliar=lista;
if(pivote->dato < auxiliar->dato)
{
pivote->siguiente=auxiliar;
lista=pivote;
}
else
{
while(auxiliar!=NULL && pivote->dato > auxiliar->dato)
{
anterior=auxiliar;
auxiliar=auxiliar->siguiente;
}
if(auxiliar!=NULL)
{
anterior->siguiente=pivote;
pivote->siguiente=auxiliar;
}
else
{
anterior->siguiente=pivote;
pivote->siguiente=NULL;
}
}
}
pila=pila->siguiente;
}
//Cola en la lista enlazada
cola=primeroCola;
while(cola!=NULL)
{
valor=cola->dato;
pivote = (Nodo*)malloc(sizeof(Nodo));
pivote->dato=valor;
if(lista==NULL)
{
pivote->siguiente=lista;
lista=pivote;
}
else
{
auxiliar=lista;
if(pivote->dato < auxiliar->dato)
{
pivote->siguiente=auxiliar;
lista=pivote;
}
else
{
while(auxiliar!=NULL && pivote->dato > auxiliar->dato)
{
anterior=auxiliar;
auxiliar=auxiliar->siguiente;
}
if(auxiliar!=NULL)
{
anterior->siguiente=pivote;
pivote->siguiente=auxiliar;
}
else
{
anterior->siguiente=pivote;
pivote->siguiente=NULL;
}
}
}
cola=cola->siguiente;
}
}
void visualizarDatos()
{
while(lista!=NULL)
{
printf(" %d",lista->dato);
lista=lista->siguiente;
}
}