-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPila.hs
48 lines (44 loc) · 1.67 KB
/
Pila.hs
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
-- Pila.hs
-- El tipo abstracto de datos de las pilas.
-- José A. Alonso Jiménez <https://jaalonso.github.io>
-- Sevilla, 19-enero-2023
-- ---------------------------------------------------------------------
-- Una pila es una estructura de datos, caracterizada por ser una
-- secuencia de elementos en la que las operaciones de inserción y
-- extracción se realizan por el mismo extremo.
--
-- Las operaciones que definen a tipo abstracto de datos (TAD) de las
-- pilas (cuyos elementos son del tipo a) son las siguientes:
-- vacia :: Pila a
-- apila :: a -> Pila a -> Pila a
-- cima :: Pila a -> a
-- desapila :: Pila a -> Pila a
-- esVacia :: Pila a -> Bool
-- tales que
-- + vacia es la pila vacía.
-- + (apila x p) es la pila obtenida añadiendo x al principio de p.
-- + (cima p) es la cima de la pila p.
-- + (desapila p) es la pila obtenida suprimiendo la cima de p.
-- + (esVacia p) se verifica si p es la pila vacía.
--
-- Las operaciones tienen que verificar las siguientes propiedades:
-- + cima(apila(x, p) == x
-- + desapila(apila(x, p)) == p
-- + esVacia(vacia)
-- + not esVacia(apila(x, p))
--
-- Para usar el TAD hay que usar una implementación concreta. En
-- principio, consideraremos dos una usando listas y otra usando
-- sucesiones. Hay que elegir la que se desee utilizar, descomentándola
-- y comentando las otras.
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module TAD.Pila
(Pila,
vacia, -- Pila a
apila, -- a -> Pila a -> Pila a
cima, -- Pila a -> a
desapila, -- Pila a -> Pila a
esVacia, -- Pila a -> Bool
) where
import TAD.PilaConListas
-- import TAD.PilaConSucesiones