Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Practica 5 Reporte
Practica 5 Reporte
Laboratorio de Computación
Salas A y B
Grupo: 4
No de Práctica(s): 5
No. de Equipo de
cómputo empleado:
Semestre: 2 semestre
Observaciones:
CALIFICACIÓN: ________________
Introducción:
Listas:
Es una colección de elementos dispuestos uno detrás del otro, en la que cada elemento se conecta al
siguiente por un “Enlace” o “Puntero”.
Los nodos de las listas al igual que las colas y pilas, está compuesta por una parte de información (que pude
ser datos enteros, flotantes, caracteres, estructuras..) y el puntero que mantiene el enlace entre un nodo y
otro.
Una cola es un tipo especial de lista abierta en la que sólo se puede insertar nodos en uno de los extremos de
la lista y sólo se pueden eliminar nodos en el otro. Además, como sucede con las pilas, las escrituras de datos
siempre son inserciones de nodos, y las lecturas siempre eliminan el nodo leído.
Este tipo de lista es conocido como lista FIFO (First In First Out), el primero en entrar es el primero en salir.
El símil cotidiano es una cola para comprar, por ejemplo, las entradas del cine. Los nuevos compradores sólo
pueden colocarse al final de la cola, y sólo el primero de la cola puede comprar la entrada.
La pila es una estructura de datos que permite almacenar datos en el orden LIFO (Last In First Out, en
español, "último en entrar, primero en salir").
La recuperación de los datos es realizada en el orden inverso de su inserción.
Para la implementación he elegido una lista enlazada simple, presentada sobre la vertical.
Ya que la inserción es siempre hecha al inicio de la lista, el primer elemento de la lista será el ultimo elemento
ingresado, por lo tanto estará en la cabeza de la pila.
No he utilizado un puntero fin, como lo hice en el caso de la lista enlazada simple, ya que el objetivo no es el
de tratar una lista enlazada, sino una pila.
Lo interesante es que el último elemento ingresado, será el primer elemento recuperado.
Objetivo:
Utilizar las definiciones, características, procedimientos y ejemplos de las estructuras lineales Pila y Cola, con
la finalidad de comprenderlas e implementarlas
Desarrollo:
Actividad 1
Implementar con la guía del profesor un programa donde se muestren las operaciones que se pueden realizar
sobre una pila representada por un arreglo unidimensional.
Código:
#include<stdio.h>
#include<stdlib.h>
#define max 5
struct tipoPila
int tope;
int *stack;
};
/*prototipos de funciones*/
int v,d,p,x;
int main()
tpila pila1;
creaPila(&pila1);
do
printf("\tMenu\n");
printf("\n1.Push\n");
printf("2.-Pop\n");
printf("3.-Liberar\n");
printf("4.-Mostrar\n");
printf("5.-Salir\n");
scanf("%d",&p);
switch(p)
case 1:
scanf("%d",&d);
push(&pila1,d);
break;
case 2 :
v=pop(&pila1);
break;
case 3:
liberaPila(&pila1);
break;
case 4:
mostrar(pila1);
break;
case 5:
printf("Adios\n");
break;
default:
scanf("%d",&x);
}while(x==1);
return (0);
s->tope=0;
s->stack=(int*)malloc(max*sizeof(int));
free (s->stack);
if (s->tope==max)
return (0);
else
return (1);
if (s->tope==0)
return(0);
else
return (1);
if (!llena (s))
else
s->stack[s->tope]=dato;
s->tope++;
if(!vacia (s))
printf("pila vacia" );
return -1;
else
s->tope--;
return s->stack[s->tope];
void mostrar(tpila s)
int i;
for (i=0;i<s.tope;i++)
printf("%d\n",s.stack[i]);
Actividad 1.1 Con el programa anterior, modificarlo para introducir datos en una pila, sacarlos e irlos
introduciendo en otra pila, mostrar lo que tiene la segunda pila.
Código:
#include<stdio.h>
#include<stdlib.h>
#define max 5
struct tipoPila
int tope;
int *stack;
};
/*prototipos de funciones*/
int v,d,p,x,e;
int main()
tpila pila1;
creaPila(&pila1);
tpila pila2;
creaPila(&pila2);
do
{
printf("\tMenu\n");
printf("\n1.Push\n");
printf("2.-Pop 1\n");
printf("3.-Liberar 1\n");
printf("5.-Liberar 1\n");
printf("6.-Pop 2\n");
printf("7.-Salir\n");
scanf("%d",&p);
switch(p)
case 1:
scanf("%d",&d);
push(&pila1,d);
break;
case 2 :
v=pop(&pila1);
push(&pila2,v);
break;
case 3:
liberaPila(&pila1);
break;
case 4:
mostrar(pila2);
break;
case 5:
liberaPila(&pila2);
break;
case 6:
e=pop(&pila2);
case 7:
printf("Adios\n");
break;
default:
scanf("%d",&x);
}while(x==1);
return (0);
s->tope=0;
s->stack=(int*)malloc(max*sizeof(int));
free (s->stack);
}
if (s->tope==max)
return (0);
else
return (1);
if (s->tope==0)
return(0);
else
return (1);
if (!llena (s))
else
s->stack[s->tope]=dato;
s->tope++;
if(!vacia (s))
{
printf("pila vacia" );
return -1;
else
s->tope--;
return s->stack[s->tope];
void mostrar(tpila s)
int i;
for (i=0;i<s.tope;i++)
printf("%d\n",s.stack[i]);
}
Actividad 2
Código:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define _Nodoc_H_
struct Nodo{
char Dato;
};
struct Nodo*init;
init->Dato = Dato;
init->Sig = NULL;
return init;
};
init->Dato=Dato;
init->Sig=Sig;
return init;
};
struct Pila{
struct Nodo* H;
struct Nodo* T;
int size;
};
struct Pila*init;
init->H=NULL;
init->T=NULL;
init->size=0;
return init;
};
while(aux!=NULL){
aux=aux->Sig;
};
};
aux = inicNodoDN(Dato,p->H);
p->H=aux;
p->size++;
if(p->size==1)
p->T=aux;
};
if(p->size==0){
char aux=p->H->Dato;
p->H=p->H->Sig;
borrame->Sig=NULL;
if(p->size==1)
p->T=NULL;
free(borrame);
p->size--;
return aux;
};
void main(){
act=initPila();
char* ingr;
ingr=(char*)malloc(256*sizeof(char));
gets(ingr);
aux=strlen(ingr);
while(i<=aux){
if(*(ingr+i)==' '){
i++;
}
else{
push(act, *(ingr+i));
i++;
};
imprimirPila(act);
itp=act->H;
i=i;
while(i<=aux){
if((itp->Dato)==(itc->Dato)){
itp=itp->Sig;
itc=itc->Sig;
i++;
printf(".");
else{
exit(0);
};
while(act->size!=0){
pop(act);
};
free(act);
free(ingr);
Actividad 3
Implementar un programa donde se muestren las operaciones que se pueden realizar sobre una cola
representada con un arreglo unidimensional.
Código:
#include<stdio.h>
#include<stdlib.h>
#define max 5
struct tipoCola
int inicio;
int fin;
int *q;
};
/*prototipos de funciones*/
int v,d,p,x;
int main()
tCola cola1;
creaCola(&cola1);
do
printf("\tMenu\n");
printf("\n1.Incerta\n");
printf("2.-Remover\n");
printf("3.-Liberar\n");
printf("4.-Mostrar\n");
printf("5.-Salir\n");
scanf("%d",&p);
switch(p)
case 1:
printf("Dame tu dato a introducir\n");
scanf("%d",&d);
incerta(&cola1,d);
break;
case 2 :
v=remover(&cola1);
break;
case 3:
libera(&cola1);
break;
case 4:
mostrar(cola1);
break;
case 5:
printf("Adios\n");
break;
default:
scanf("%d",&x);
}while(x==1);
return (0);
qq->inicio=0;
qq->fin=0;
qq->q=(int*)malloc(max*sizeof(int));
free (qq->q);
if (qq->fin==max)
return (0);
else
return (1);
if (qq->inicio==0&& qq->fin==0)
return(0);
else
return (1);
if (!llena (qq))
else
{
qq->q[qq->fin]=dato;
qq->fin++;
int x,i;
if(!vacia (qq))
printf("vacia" );
return -1;
else
x=qq->q[qq->inicio];
for(i=0;i<qq->fin;i++)
qq->q[i]=qq->q[i+1];
qq->fin--;
return x;
int i;
for (i=0;i<qq.fin;i++)
{
printf("%d\n",qq.q[i]);
Conclusiones:
Al realizar esta práctica por primera vez utilizamos pilas, ya que a través de las clases entendimos como se
hace una pila y una cola, las cuales son de mucha utilidad para usar la memoria en tiempo de ejecución,
además de hacer programas como un palíndromo donde tuvimos que aplicar los conocimientos de cómo es
una pila utilizando en la pila el push, pop, liberar, mostrar, además de que en los otros programas todo esto lo
metimos en un menú para ejemplificarlo mejor y que se viera más elegante, todos estos elementos de la pila,
también lo hicimos con las colas con insertar, remover, liberar ,etc e igual en un menú, una buena práctica,
muy tediosa y un poco complicada porque era muy larga.
Dionicio Juárez Agustín:
Utilizamos las pilas para implementar nuestros códigos, fue muy difícil hacerlo debido a que todavía no se
tiene muy bien el concepto de pilas, esto se debe a que las colas están diseñadas para devolver elementos
ordenados tal como llegan. Para esto, las colas poseen un punto de acceso y otra de salida que lógicamente
están en extremos opuestos. Siempre se ve un elemento que esta primero o al frente, entonces al
implementar eso en los códigos, se tuvo muchos problemas que al final se logró solucionar
Palacios Cacique Esteffany Abigail:Durante esta práctica entendimos como funciona una pila o una cola,
las cuales son de gran utilidad para guardar datos y removerlos con facilidad