viernes, 20 de enero de 2012

Lista_examen_codigo

#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