#include<stdio.h>
#include<conio.h>
#include <windows.h>
#include <stdlib.h>
struct lista {
int data;
struct lista * sig;
};
typedef struct lista lista;
lista * principio,*final,*actual;
lista * getlista();
void enlista_inicio(int x);
void enlista_final(int x);
void enlista_medio(int n_no,int x);
int borrar_lista(int kv);
void ordenar();
void desplegar();
int contar();
main()
{
int ch,n,n_no;
principio = NULL;
do
{
system ("cls") ;
printf("\a\nINFORMATICA II\n");
printf("\n-----Operaciones con listas-----\n");
printf("\n1. Insertar un valor al principio de la lista");
printf("\n2. Desplegar la lista");
printf("\n3. Insertar un valor al final de la lista");
printf("\n4. Insertar un valor despues de un nodo especifico");
printf("\n5. Borrar un nodo de la lista");
printf("\n6. Ordenar la lista\n");
printf("\n-----Creditos-----");
printf("\n\n7. Autores del Programa");
printf("\n8. Salir");
printf("\n\n Elige una opcion: ");
scanf("%d",&ch);
switch (ch)
{
case 1:
printf("\nIngresa el valor a insertar al principio: ");
scanf("%d",&n);
enlista_inicio(n);
break;
case 2:
desplegar();
break;
case 3:
printf("\nIngresa el valor a insertar al final: ");
scanf("%d",&n);
enlista_final(n);
break;
case 4:
printf("\nIngresa el numero de nodo despues del cual quieres insertar un valor: ");
scanf("%d",&n_no);
if ( n_no > contar() )
{
printf("\nNo existen %d nodo(s). Solo hay %d nodo(s) en la lista"
"\n\nPresione Enter para continuar...",n_no,contar());
getch();
}
else
{
printf("\nIngresa el valor a colocar despues del nodo %d: ",n_no);
scanf("%d",&n);
enlista_medio(n_no,n);
}
break;
case 5:
printf("\nIngresa el valor a borrar: ");
scanf("%d",&n);
borrar_lista(n);
break;
case 6:
ordenar();
break;
case 7:
system("cls");
printf("\n -----------------------------------"
"\n|Autores: |\n\n"
"|-----------------------------------|"
"\n|Arango Robles Eleazar |"
"\n|Godoy Saavedra Eduardo |"
"\n|Mobarak Elnecave Antonio |"
"\n|Perez Vazquez Christian Maria Jose |"
"\n ------------------------------------"
"\n\nCopyright, UNAM. Todos los Derechos Reservados"
"\n\nNo apoyamos a la SOPA"
"\n\nPresiona Enter para regresar...");
getch();
break;
}
}
while (ch!=8);
}
void ordenar() //Ordena la lista
{
int temp;
actual = final = principio;
if (principio==NULL)
{
printf("\nLista vacia, Presione Enter para continuar...");
getch();
}
else
{
for (actual=principio;(actual != NULL);actual=actual->sig)
{
for (final=actual->sig;(final != NULL);final=final->sig)
{
if ( actual->data < final->data )
{
temp = final->data;
final->data = actual->data;
actual->data = temp;
}
}
}
printf("\nLa lista esta ordenada, Presione Enter para continuar...");
getch();
}
}
int borrar_lista(int kv) //Borra un elemento de la lista
{
int borrar;
actual = principio;
if (principio == NULL)
{
printf("\a\nLista vacia, Presione Enter para continuar...");
getch();
}
else
{
while ( (actual != NULL) && (actual->data != kv) )
{
final = actual;
actual = actual->sig;
}
if (actual->data == kv)
{
if (actual == principio)
{
borrar = actual->data;
actual = actual->sig;
free(principio);
principio = actual;
}
else
{
borrar = actual->data;
final->sig = actual->sig;
free(actual);
}
printf("\nEl valor %d se ha borrado, Presione Enter para continuar...",kv);
getch();
return(borrar);
}
else
printf("\nEl valor %d no existe, Presione Enter para continuar...",kv);
getch();
}
return(1);
}
void enlista_medio(int n_no,int x) // Agrega un elemento en la parte media de la lista
{
int ct=0;
lista *temp;
temp = getlista();
temp->data = x;
temp->sig = NULL;
actual = principio;
while (ct < n_no )
{
final = actual;
actual = actual->sig;
ct++;
}
if (principio == NULL) principio = temp;
else if (actual == principio)
{
temp->sig = actual;
principio = temp;
}
else
{
temp->sig = final->sig;
final->sig = temp;
}
}
lista * getlista()
{
lista * temp;
temp = (lista *) malloc(sizeof(lista));
if (temp == NULL)
{
printf("\nFalla en la asignacion de memoria, Presione Enter para continuar...");
exit(1);
}
else
return(temp);
}
int contar()
{
int ct=0;
actual = principio;
while (actual != NULL)
{
ct++;
actual = actual->sig;
}
return(ct);
}
void enlista_inicio(int x) // Agrega un elemento en la parte inicial de la lista
{
lista *temp;
temp = getlista();
temp->data = x;
temp->sig = NULL;
if (principio == NULL)
principio = temp;
else
{
temp->sig = principio;
principio = temp;
}
}
void enlista_final(int x) // Agrega un elemento en la parte final de la lista
{
lista *temp;
temp = getlista();
temp->data = x;
temp->sig = NULL;
if (principio == NULL)
principio = temp;
else
{
actual = principio;
while (actual != NULL)
{
final = actual;
actual = actual->sig;
}
final->sig = temp;
}
}
void desplegar() //Muestra la lista
{
actual = principio;
if (actual == NULL)
printf("\a\nLa lista esta vacia, Presione Enter para continuar...");
while (actual != NULL)
{
printf("\n %d",actual->data);
actual = actual->sig;
}
getch();
}
No hay comentarios:
Publicar un comentario