Diferencia entre revisiones de «Pila (informática)»

Contenido eliminado Contenido añadido
Xochipily (discusión · contribs.)
Modificaciones en el código Java
Línea 37:
* '''Leer''' '''último''' ('''''top'' o ''peek'''''): lee el elemento superior de la pila sin retirarlo.
* '''Vacía (''empty''):''' devuelve cierto si la pila está sin elementos o falso en caso de que contenga alguno.
 
Una pila puede implementarse fácilmente ya sea mediante una matriz o una lista enlazada. Lo que identifica a una estructura de datos como una pila en cualquier caso no es su estructura sino su interfaz: al usuario solosólo se le permite colocar y extraer datos en el modo que se espera de una pila y algunas otras operaciones auxiliares.
 
Otro tipo de estructura de datos es la ''cola'' (FIFO, del inglés ''First In First Out''), «primero en entrar, primero en salir».
Línea 133 ⟶ 134:
La seguridad a la hora de desarrollar software usando estructuras de datos de tipo pila es un factor a tener en cuenta debido a ciertas vulnerabilidades que un uso incorrecto de éstas puede originar en la seguridad de nuestro software o en la seguridad del propio sistema que lo ejecuta. Por ejemplo, algunos lenguajes de programación usan una misma pila para almacenar los datos para un procedimiento y el enlace que permite retornar a su invocador. Esto significa que el programa introduce y extrae los datos de la misma pila en la que se encuentra la información crítica con las direcciones de retorno de las llamadas a procedimiento, supongamos que al introducir datos en la pila lo hacemos en una posición errónea de manera que introducimos datos de mayor tamaño al soportado por la pila corrompiendo así las llamadas a procedimientos, provocaríamos un fallo en nuestro programa. [http://www.cs.ucla.edu/~palsberg/paper/sas03.pdf Ésta técnica] usada de forma maliciosa (es similar, pero en otro ámbito al buffer overflow) permitiría a un atacante modificar el funcionamiento normal de nuestro programa y nuestro sistema, y es al menos una técnica útil si no lo evitamos en lenguajes muy populares como el ejemplo C++.
 
<br />
== Pilas en Java ==
 
Línea 147 ⟶ 149:
 
private char dato;
private Nodo siguinte;//Corregir atributo siguiente.;
public Nodo(char dato) {
Línea 158 ⟶ 160:
this.dato = dato;
}
public Nodo getSiguintegetSiguiente() {
return siguintesiguiente;
}
public void setSiguintesetSiguiente(Nodo siguintesiguiente) {
this.siguintesiguiente = siguintesiguiente;
}
}
 
</source>
 
Línea 177 ⟶ 178:
public class Pila {
 
Nodo raiztos;//Top Of Stack
 
public void apilar(char dato) {
Nodo nuevo = new Nodo(dato);
if (raiztos == null) {
raiztos = nuevo;
} else {
nuevo.setSiguintesetSiguiente(raiztos);
raiztos = nuevo;
}
}
 
public char desapilar() {
Nodo temp = raiztos;
raiztos = raiztos.getSiguintegetSiguiente();
return temp.getDato();
}
 
public void imprimir() {
Nodo temp = raiztos;
while (temp != null) {
System.out.print(temp.getDato() + "\n");
temp = temp.getSiguintegetSiguiente();
}
}