You are on page 1of 12

INTRODUCCION

En este trabajo vamos a utilizar tres tipos de estructuras lineales el tipo cola: Una cola es una
estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación
de inserción push se realiza por un extremo y la operación de extracción pop por el otro.
También se le llama estructura FIFO (del inglés First In First Out), debido a que el primer
elemento en entrar será también el primero en salir.
Las colas se utilizan en sistemas informáticos, transportes y operaciones de investigación
(entre otros), dónde los objetos, personas o eventos son tomados como datos que se
almacenan y se guardan mediante colas para su posterior procesamiento. Este tipo de
estructura de datos abstracta se implementa en lenguajes orientados a objetos mediante
clases, en forma de listas enlazadas.

Y la estructura de de listas enlazadas o doblemente enlazadas son: una lista enlazada es una
de las estructuras de datos fundamentales, y puede ser usada para implementar otras
estructuras de datos. Consiste en una secuencia de nodos, en los que se guardan campos de
datos arbitrarios y una o dos referencias (punteros) al nodo anterior y/o posterior.
OBJETIVOS

 Fundamentar la aplicación de las estructuras lineales pilas, colas, en situaciones reales


haciendo uso de la representación de las listas por medio de apuntadores.
 Fundamentar la aplicación de las estructuras lineales: listas enlazadas y listas
doblemente enlazadas, en situaciones reales haciendo uso de la representación de las
listas por medio de apuntadores.
Actividad a realizar

1. Para lo cual es necesario iniciar con el desarrollo del planteamiento del problema o
supuesto semántico que de aplicabilidad a una situación real del entorno y que pueda ser
solucionado a través de una Lista enlazada, para ello se debe tener claro la
conceptualización de las listas enlazadas; posteriormente realizar un listado de
requerimientos, a lo que se conoce como captura de requerimientos para el desarrollo de
software (se recomienda hacer una consulta del tema); Posteriormente se debe realizar un
listado de recursos a utilizar tales como (Variables, constantes, funciones u operadores
para la gestión de memoria, apuntadores, funciones para ser manejadas con las opciones
del menú, entre otros).

Supuesto semántico:

La biblioteca de la UNAD desea llevar el registro de los estudiantes que la ingresan y que
adquieren el prestamos de un libro, de los estudiantes se desea saber (Nombre, Apellido, COD,
Carrera, Semestre, Hora del préstamo), cuando piden el préstamo se debe anotar del (Nombre,
Temática, ID), cuando el estudiante entrega el libro se debe eliminar de la lista, si alguien desea
saber si ese libro esta disponible la lista debe tener la posibilidad de saber si el libro esta
prestado.

2. El programa a implementar deberá cumplir con los siguientes requerimientos:


 Una opción de una Portada: que incluya datos básicos como:(Nombre de la
Universidad, el texto del supuesto semántico es decir lo que hace el programa, el
nombre de los integrantes del grupo (solo incluir a quienes realmente aportaron al
desarrollo del trabajo), nombre del grupo colaborativo, nombre del tutor y la fecha).
 Una opción para Insertar registros a la Lista (La inserción de elementos debe permitir
insertar al inicio, en el intermedio de la lista o al final de la lista)
 Una opción para Visualizar los registros de la lista
 Una opción para Eliminar o suprimir registros de la lista
 Una opción para Buscar un dato en la lista
 Una opción para Salir del programa

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

struct biblio{
char libro[15];
char cod[10];
char nombre[30];
char apellido[20];
char cc[20];
char tel[12];
char carr[30];
char semes[15];
char hrpre[20];
char tema[30];
struct biblio *sig;
struct biblio *ant;
}*cab=NULL, *fin=NULL, *p=NULL;

void menu();
void portada();
void insertar();
void eliminar();
void visualizar();
void libros();
void buscar();

void main(){
clrscr();
menu();
}

void menu(){
clrscr();
printf("\tGESTROR DE PRESTAMOS DE LIBROS DE LA BIBLIOTECA
UNAD\n\n\n");
int op=0;
do{
clrscr();
printf("------MENU DE OCIONES------\n\n");
printf("1- PORTADA");
printf("\n2- INSERTAR USUARIO");
printf("\n3- VISUALIZAR USUARIOS");
printf("\n4- ELIMINAR DEL REGISTRO A UN USUARIO");
printf("\n5- BUSCAR DISPONIOBILIDAD DEL LIBRO");
printf("\n6- SALIR DEL GESTOR");
printf("\n\n\nINGRESE LA ACCION QUE DESEA HACER: ");
scanf("%d",&op);
switch(op){
case 1: portada();
break;
case 2: insertar();
getch();
break;
case 3: visualizar();
getch();
break;
case 4: eliminar();
getch();
break;
case 5: buscar();
getch();
break;
}

}while(op!=6);
clrscr();
printf("GRACIAS POR USAR LA APLICACION");
getch();
}

void portada(){
clrscr();
printf("\t\t------------PORTADA------------\n\n");
printf("\t\t\tTRABAJO COLABORATIVO 1\n\n");
printf("\t\t\tPRENSENTADO POR:\n\t\t\tJHON SEBASTIAN SEPULVEDA
NOMESQUE\n");
printf("\t\t\tRUBY ALEJANDRA SUAREZ\n\t\t\tMANUEL ALBERTO
CIFUENTES\n\n");
printf("\t\t\tSUPUESTO SEMANTICO\n\n");
printf("La biblioteca de la UNAD desea llevar el registro de los estudiantes\n");
printf("que la ingresan y que adquieren el prestamos de un libro,de los \n");
printf("estudiantes se desea saber (Nombre, Apellido, COD, Carrera,
Semestre,\n");
printf("Hora del préstamo),cuando piden el préstamo se debe anotar del
libro\n");
printf("(Nombre, Temática, ID), cuando el estudiante entrega el libro se debe \n");
printf("eliminar de la lista,si alguien desea saber si ese libro esta disponible \n");
printf("la lista debe tener la posibilidad de saber si el libro esta prestado.");
getch();
}

void insertar(){
clrscr();
p=(struct biblio *)malloc(sizeof(struct biblio)); //reservamos memoria
if(p==NULL)
printf("UPS!!! NO HAY MEMORIA SUFICIENTE");
printf("Nombre del Estudiante: ");
scanf("%s",p->nombre);
printf("Apellidos del estudiante: ");
scanf("%s",p->apellido);
printf("Carrera: ");
scanf("%s",p->carr);
printf("Numero de cedula: ");
scanf("%s",p->cc);
printf("Semestre Cursado: ");
scanf("%s",p->semes);
printf("Mire la siguiente lista y anote el nombre segun aparece en ella con su
Referencia");
printf("Nombre del libro: ");
scanf("%s",p->libro);
printf("Numero de Referencia del Libro: ");
scanf("%s",p->cod);
printf("Hora de prestamo: ");
scanf("%s",p->hrpre);
p->sig=NULL; //el campo siguiente va a ser null por ser el ultimo elemento
if(cab==NULL){
cab=p;
fin=p;
}else{
fin->sig=p;
fin=p;
}
}

void visualizar(){}
void eliminar(){}
void buscar(){}
void libros(){
clrscr();
printf("\tNOMBRE DEL LIBRO------REFERENCIA\n\n\n");
printf("\tPROGRAMACION ESTRUCTURADA------104.9\n");
printf("\tBIOLOGIA BASICA 1------189.8\n");
printf("\tELECTRONICA Y TECNOLOGIA------123.7\n");
printf("\tINFORMATICA BASICA------234.6\n");
printf("\tARQUITECTURA DE COMPUTADORES 1------345.5\n");
printf("\tALGEBRA LINEAL------143.4\n");
printf("\tALGEBRA DE BALDOR------453.6\n");
}
3. Aporte Individual Como aporte individual dentro del trabajo, cada integrante del grupo
además de lo anterior se va encargar de la documentación o explicación de cada linea de
código de una de estas anteriores funciónes, es decir que el grupo se repartan la explicación
de las funciones (visualizar, insertar, eliminar, buscar y la función main()) y esta explicación
se debe anexar en el documento de Word como se explica más adelante.

Listas Enlazadas

Recorrido

Definición:

Recorrido simplemente despliega los datos almacenados en el arreglo Info, con ayuda de un
segundo arreglo llamado Indice el cual guarda el orden en el que encuentran enlazados cada
uno de los datos.

Explicación:

Apuntador toma el valor de Inicio, después ve si la condición cumple para efectuar un Ciclo
mientras Apuntador sea diferente de 0, si cumple lo que hace es que despliega la
Info[Apuntador], después Apuntador toma el valor de Indice[Apuntador] (El cual nos indica el
siguiente nodo que sigue en la lista) y hace esto hasta que Apuntador sea igual a 0 (Cuando
llega a este punto a llegado al fin de la Lista Enlazada).

Las operaciones que podemos realizar sobre una lista enlazada son las siguientes:

 Recorrido. Esta operación consiste en visitar cada uno de los nodos que forman la lista
. Para recorrer todos los nodos de la lista, se comienza con el primero, se toma el valor
del campo liga para avanzar al segundo nodo, el campo liga de este nodo nos dará la
dirección del tercer nodo, y así sucesivamente.

Algoritmo:
 Recorrido(Inicio, Info, Indice)
 Apuntador ←- Inicio
 Repetir mientras Apuntador ≠ Nill
 Imprimir Info[Apuntador]
 Apuntador ←- Indice[Apuntador]
 Fin del ciclo
 Salir

 Inserción. Esta operación consiste en agregar un nuevo nodo a la lista. Para esta
operación se pueden considerar tres casos:
 Insertar un nodo al inicio.
 Insertar un nodo antes o después de cierto nodo.
 Insertar un nodo al final.

Algoritmo:

 InsPr(Inicio, Disp, Info, Indice, Elemento)


 Si Disp ≠ Nill entonces:
 Apuntador ←- Disp
 Disp ←- Indice[Disp]
 Info[Apuntador] ←- Elemento
 Indice[Apuntador] ←- Inicio
 Inicio ←- Apuntador
 Si no:
 Imprimir “Sobre Carga”
 Salir

 Borrado. La operación de borrado consiste en quitar un nodo de la lista, redefiniendo las


ligas que correspondan. Se pueden presentar cuatro casos:
 Eliminar el primer nodo.
 Eliminar el último nodo.
 Eliminar un nodo con cierta información.
 Eliminar el nodo anterior o posterior al nodo cierta con información.

Algoritmo:

EliBusq(Inicio, Info, Indice, Elemento)

Temp ←- Inicio

Si Temp = Nill

Imprimir “Lista Vacia… Imposible Eliminar” y Retornar

Repetir mientras Temp ≠ Nill

Si Elemento = Info[Temp] entonces:

Si Temp = Inicio entonces:

Inicio ←- Indice[Inicio]

Si no:

Indice[Temp2] ←- Indice[Temp]

Indice[Temp] ß Disp

Disp ←- Temp

Recorrido(Inicio, Info, Indice) y Retornar

Si no:

Temp2 ←- Temp

Temp ←- Indice[Temp]

Imprimir “Dato no encontrado… Imposible Eliminar” y Retornar


 Búsqueda. Esta operación consiste en visitar cada uno de los nodos, tomando al campo
liga como puntero al siguiente nodo a visitar

Algoritmo:

Recorrido(Inicio, Info, Indice, Elemento)

Apuntador ←- Inicio

Repetir mientras Apuntador ≠ Nill

Si Elemento = Info[Apuntador] entonces:

Imprimir Info[Apuntador]

Regresa Apuntador

Apuntador ←- Indice[Apuntador]

Fin del ciclo

Regresar Apuntador
ANEXOS

You might also like