-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPilas.h
92 lines (79 loc) · 1.64 KB
/
Pilas.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <stdio.h>
#include <stdlib.h>
/*------------- estructura de datos -------------*/
typedef struct nodoGenerico
{
int dato;
struct nodoGenerico* siguiente;
}nodo;
typedef struct
{
int capacidad; //capacidad de la pila
int size; //cantidad de elementos
nodo* tope;
}TDApila;
/*------------- operaciones -------------*/
TDApila* crearPilaVacia(int capacidad)
{
TDApila* pila=(TDApila*)malloc(sizeof(TDApila));
pila->capacidad=capacidad;
pila->size=0;
pila->tope=NULL;
return pila;
}
int esPilaVacia(TDApila* pila)
{
if (pila->size == 0)
{
return 1;
}else{
return 0;
}
}
void apilar(TDApila* pila, int dato){
if(pila->size < pila->capacidad){
nodo* nuevo=(nodo*)malloc(sizeof(nodo));
nuevo->dato=dato;
nuevo->siguiente=pila->tope;
pila->tope=nuevo;
pila->size++;
}else{
printf("Pila llena, el elemento %d no se pudo apilar\n",dato);
}
}
void desapilar(TDApila* pila){
if(pila->size ==0){
printf("***No se puede desapilar, pila vacia\n");
}else{
printf("Desapilando...\n");
nodo* aux=pila->tope;
pila->tope=aux->siguiente;
pila->size--;
free(aux);
}
}
nodo* tope(TDApila* pila){
if(pila->size ==0){
printf("***No se puede obtener tope, lista vacia.\n");
}else{
return (pila->tope);
}
}
int buscarDatoPila(TDApila* pila, int dato){
if(esPilaVacia(pila)==1){
printf("Pila vacia\n");
return 0;
}else{
TDApila* pila_aux=crearPilaVacia(pila->size);
pila_aux=pila;
int datoAux;
while (esPilaVacia(pila_aux)==0){
datoAux=pila_aux->tope->dato;
desapilar(pila_aux);
if(datoAux==dato){
return 1;
}
}
}
return 0;
}