Blog para publicar ejercicios y exámenes del curso intersemestral de Informática II (Estructuras de datos estáticas y dinámicas en memoria principal) de la FCA de la UNAM
lunes, 23 de enero de 2012
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();
}
#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();
}
viernes, 13 de enero de 2012
Ejercicio_Cola_Codigo
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
struct colanodo {
char nombre;
struct colanodo *sig;
};
typedef struct colanodo COLA;
typedef COLA *COLAPTR;
void enqueue (COLAPTR *, COLAPTR *, char);
int nohaycola (COLAPTR);
void escribecola (COLAPTR);
void menu(void);
void imprimecola (COLAPTR);
void enqueue (COLAPTR *, COLAPTR *, char);
char dequeue(COLAPTR *);
main ()
{
COLAPTR principio=NULL, final=NULL;
int opcion;
char item;
menu();
printf("\n\n Elige una opcion: ");
fflush(stdin);
scanf ("%d", &opcion);
while (opcion!=4)
{
switch (opcion)
{ case 1: printf ("\n Ingresar el caracter del nodo: ");
fflush(stdin);
scanf ("%c", &item);
enqueue (&principio, &final, item);
escribecola (principio);
printf("\n\n Enter para regresar...");
getch();
menu();
printf ("\n\n Elige una opcion :");
scanf ("%d", &opcion);
break;
case 2: printf ("\n\n Eliminar un elemento de la cola");
fflush(stdin);
dequeue (&principio);
case 3: printf ("\n\n La cola es: ");
fflush(stdin);
imprimecola (principio);
printf("\n\n Enter para regresar...");
getch();
menu();
printf ("\n\n Elige una opcion :");
scanf ("%d", &opcion);
break;
default:printf ("\n\nOpcion NO valida");
printf ("\n\nEnter para continuar");
getch();
system ("cls");
menu();
printf ("\n\n Elige una opcion :");
fflush(stdin);
scanf ("%d", &opcion);
}
}
}
void menu(void) {
system("cls");
printf("\n\n Operaciones disponibles con la Cola");
printf("\n\n 1.- Agregar un elemento a la cola");
printf("\n\n 2.- Eliminar un elemento de la cola");
printf("\n\n 3.- Imprime la cola");
printf("\n\n 4.- Fin");
};
void enqueue (COLAPTR *adela, COLAPTR *atras, char valor)
{
COLAPTR aux=(COLAPTR)malloc(sizeof(COLA));
aux->sig=NULL;
aux->nombre=valor;
if (nohaycola(*adela))
{*adela=aux;
*atras=aux;}
else
{
(*atras)->sig=aux;
*atras=aux;
}
}
int nohaycola (COLAPTR aux)
{
return aux==NULL;
}
void escribecola (COLAPTR aux)
{
if (nohaycola(aux))
printf("\n\nNo hay cola");
else { printf ("\n\n La cola tiene... ");
printf ("\n Principio --> ");
while (aux!=NULL)
{printf("%c <-- ", aux->nombre);
aux=aux->sig;
}
printf("Final de la cola");
}
}
void imprimecola (COLAPTR aux)
{
if (nohaycola(aux))
printf(" No hay cola");
else { printf ("\n Principio --> ");
while (aux!=NULL)
{printf("%c <-- ", aux->nombre);
aux=aux->sig;
}
printf("Final de la cola");
}
}
char dequeue(COLAPTR *adela)
{
COLAPTR aux; char sale;
aux=*adela;
sale=aux->nombre;
*adela=aux->sig;
free(aux);
return (sale);
}
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
struct colanodo {
char nombre;
struct colanodo *sig;
};
typedef struct colanodo COLA;
typedef COLA *COLAPTR;
void enqueue (COLAPTR *, COLAPTR *, char);
int nohaycola (COLAPTR);
void escribecola (COLAPTR);
void menu(void);
void imprimecola (COLAPTR);
void enqueue (COLAPTR *, COLAPTR *, char);
char dequeue(COLAPTR *);
main ()
{
COLAPTR principio=NULL, final=NULL;
int opcion;
char item;
menu();
printf("\n\n Elige una opcion: ");
fflush(stdin);
scanf ("%d", &opcion);
while (opcion!=4)
{
switch (opcion)
{ case 1: printf ("\n Ingresar el caracter del nodo: ");
fflush(stdin);
scanf ("%c", &item);
enqueue (&principio, &final, item);
escribecola (principio);
printf("\n\n Enter para regresar...");
getch();
menu();
printf ("\n\n Elige una opcion :");
scanf ("%d", &opcion);
break;
case 2: printf ("\n\n Eliminar un elemento de la cola");
fflush(stdin);
dequeue (&principio);
case 3: printf ("\n\n La cola es: ");
fflush(stdin);
imprimecola (principio);
printf("\n\n Enter para regresar...");
getch();
menu();
printf ("\n\n Elige una opcion :");
scanf ("%d", &opcion);
break;
default:printf ("\n\nOpcion NO valida");
printf ("\n\nEnter para continuar");
getch();
system ("cls");
menu();
printf ("\n\n Elige una opcion :");
fflush(stdin);
scanf ("%d", &opcion);
}
}
}
void menu(void) {
system("cls");
printf("\n\n Operaciones disponibles con la Cola");
printf("\n\n 1.- Agregar un elemento a la cola");
printf("\n\n 2.- Eliminar un elemento de la cola");
printf("\n\n 3.- Imprime la cola");
printf("\n\n 4.- Fin");
};
void enqueue (COLAPTR *adela, COLAPTR *atras, char valor)
{
COLAPTR aux=(COLAPTR)malloc(sizeof(COLA));
aux->sig=NULL;
aux->nombre=valor;
if (nohaycola(*adela))
{*adela=aux;
*atras=aux;}
else
{
(*atras)->sig=aux;
*atras=aux;
}
}
int nohaycola (COLAPTR aux)
{
return aux==NULL;
}
void escribecola (COLAPTR aux)
{
if (nohaycola(aux))
printf("\n\nNo hay cola");
else { printf ("\n\n La cola tiene... ");
printf ("\n Principio --> ");
while (aux!=NULL)
{printf("%c <-- ", aux->nombre);
aux=aux->sig;
}
printf("Final de la cola");
}
}
void imprimecola (COLAPTR aux)
{
if (nohaycola(aux))
printf(" No hay cola");
else { printf ("\n Principio --> ");
while (aux!=NULL)
{printf("%c <-- ", aux->nombre);
aux=aux->sig;
}
printf("Final de la cola");
}
}
char dequeue(COLAPTR *adela)
{
COLAPTR aux; char sale;
aux=*adela;
sale=aux->nombre;
*adela=aux->sig;
free(aux);
return (sale);
}
miércoles, 11 de enero de 2012
ejercicio_pila_codigo
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
struct pilanodo {
int dato;
struct pilanodo *sig;
};
typedef struct pilanodo PILA;
typedef PILA *PILAPTR;
void menu(void);
void push(PILAPTR *, int);
int pop(PILAPTR *);
int vacia (PILAPTR);
void imprime (PILAPTR);
main()
{ PILAPTR pilaptr = NULL;
int opcion;
int valor;
menu();
printf ("\n\n Selecciona una de las siguientes opciones:");
scanf ("%d", &opcion);
while (opcion!= 4)
{switch (opcion)
{case 1: printf ("\n\n Dame el valor del elemento a guardar: ");
scanf ("%d", &valor);
push (&pilaptr, valor);
menu();
printf ("\n\n Elige una opcion :");
scanf ("%d", &opcion);
break;
case 2: if(!vacia(pilaptr))
printf("\n\n El valor extraido de la pila es %d", pop(&pilaptr));
case 3: imprime(pilaptr);
menu();
printf ("\n\n Elige una opcion :");
scanf ("%d", &opcion);
break;
default : printf("\n\n Ingresaste un numero no valido\n\n");
printf("\n\n || Por favor reinicie el programa ||\n\n");
getch();
}
}
}
void menu(void) {
system("cls");
printf("\n\n Operaciones disponibles con la Pila");
printf("\n\n 1.- Agregar un elemento a la pila");
printf("\n\n 2.- Eliminar un elemento a la pila");
printf("\n\n 3.- Recorrer la pila");
printf("\n\n 4.- Fin");
};
void push(PILAPTR *aux, int valor)
{PILAPTR aux1;
aux1=((PILAPTR)malloc(sizeof (PILA)));
if(aux1!=NULL)
{ aux1->dato = valor;
aux1->sig = NULL;
if(*aux==NULL)
*aux=aux1;
else{ aux1->sig = *aux;
*aux = aux1;
}
}
else printf ("\n\n No se creo el nodo por que no hay memoria suficiente");
}
int pop(PILAPTR *aux)
{ PILAPTR aux1; int sale;
aux1 = *aux;
*aux = aux1 -> sig;
sale = aux1->dato;
free(aux1);
return (sale);
}
int vacia(PILAPTR aux){
return aux==NULL;
}
void imprime(PILAPTR aux)
{ if (aux == NULL)
printf("\n || La pila esta vacia || \n\n");
else
{ printf("\n La pila es: \n\n");
printf("\n\n Tope");
while (aux != NULL)
{ printf("\n %4d", aux->dato);
aux = aux->sig;
}
printf("\n Fondo\n\n");
}
printf("\n\n Enter para regresar...");
getch();
}
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
struct pilanodo {
int dato;
struct pilanodo *sig;
};
typedef struct pilanodo PILA;
typedef PILA *PILAPTR;
void menu(void);
void push(PILAPTR *, int);
int pop(PILAPTR *);
int vacia (PILAPTR);
void imprime (PILAPTR);
main()
{ PILAPTR pilaptr = NULL;
int opcion;
int valor;
menu();
printf ("\n\n Selecciona una de las siguientes opciones:");
scanf ("%d", &opcion);
while (opcion!= 4)
{switch (opcion)
{case 1: printf ("\n\n Dame el valor del elemento a guardar: ");
scanf ("%d", &valor);
push (&pilaptr, valor);
menu();
printf ("\n\n Elige una opcion :");
scanf ("%d", &opcion);
break;
case 2: if(!vacia(pilaptr))
printf("\n\n El valor extraido de la pila es %d", pop(&pilaptr));
case 3: imprime(pilaptr);
menu();
printf ("\n\n Elige una opcion :");
scanf ("%d", &opcion);
break;
default : printf("\n\n Ingresaste un numero no valido\n\n");
printf("\n\n || Por favor reinicie el programa ||\n\n");
getch();
}
}
}
void menu(void) {
system("cls");
printf("\n\n Operaciones disponibles con la Pila");
printf("\n\n 1.- Agregar un elemento a la pila");
printf("\n\n 2.- Eliminar un elemento a la pila");
printf("\n\n 3.- Recorrer la pila");
printf("\n\n 4.- Fin");
};
void push(PILAPTR *aux, int valor)
{PILAPTR aux1;
aux1=((PILAPTR)malloc(sizeof (PILA)));
if(aux1!=NULL)
{ aux1->dato = valor;
aux1->sig = NULL;
if(*aux==NULL)
*aux=aux1;
else{ aux1->sig = *aux;
*aux = aux1;
}
}
else printf ("\n\n No se creo el nodo por que no hay memoria suficiente");
}
int pop(PILAPTR *aux)
{ PILAPTR aux1; int sale;
aux1 = *aux;
*aux = aux1 -> sig;
sale = aux1->dato;
free(aux1);
return (sale);
}
int vacia(PILAPTR aux){
return aux==NULL;
}
void imprime(PILAPTR aux)
{ if (aux == NULL)
printf("\n || La pila esta vacia || \n\n");
else
{ printf("\n La pila es: \n\n");
printf("\n\n Tope");
while (aux != NULL)
{ printf("\n %4d", aux->dato);
aux = aux->sig;
}
printf("\n Fondo\n\n");
}
printf("\n\n Enter para regresar...");
getch();
}
jueves, 5 de enero de 2012
Suscribirse a:
Entradas (Atom)


















