La Web del Programador: Comunidad de Programadores
 
    Pregunta:  1783 - DUDAS DE PASCAL
Autor:  José Miguel Valenzuela Pereira
Como podemos trabajar con pilas y colas en pascal?

  Respuesta:  fernando aguilar
si keres trabajar con pilas y colas no uses arrays, te vas a complicar la vida, entender el tema de los punteros o la estructuras de datos dinamicas no es muy dificil... le tenes ke agarrar la mano nomas,
si keres explicaciones detalladas mandame un mail, tambien te puedo pasar un par de programas implementando punteros.

  Respuesta:  josé VAlenzuela
*lo primero que debes de saber es que Las pilas y colas son estructuras abstractas, es decir que no son tipos de datos reales en pascal por llamarles de alguna manera, por lo tanto a lo más que puedes hacer es representarlas y la manera más facil de hacerlo es utilizando arreglos(array) ahi te va la declaracion*
***********primero la declaracion de pilas***************************
(los parentesis no los tomes en cuenta solo son aclaraciones para ti)
program pila;
uses
crt;
cont
n=10;
(este parentesis no lo tomes en cuenta ***** n representa el numero de casillas o espacios que tendrá la pila, n puede ser el numero que quieras)
type
pila=record
elem=array[1..n] of integer;(depende de que vayas a utilizar en vez de integer puede ser string o bien char, pero ya sabes en la pila solo se almacenarán datos del mismo tipo, es decir que en donde dice integer siginifica que solo se almacenarán numeros enteros en la pila)
cima:0..n;
end;
var
p:pila;
(ahora te voy a escribir dos subprogramas o procedimientos que te van a facilitar la vida ya verás por qué)
procedure pop(var p:pila; var dato:integer);
(ojo la variable dato debe de ser del mismo tipo que los datos que se almacenarán en la pila)
begin
if P.cima<>0 then
begin
dato:=P.elem[p.cima];
dec(cima);
end
else
writeln('pila vacía');
end;

(Este procedimiento pop te ayudará a eliminar o sacar uno por uno los elementos de la pila)

procedure push(var p:pila dato:integer);
beigin
if p.cima<n then
begin
inc(cima);
p.elem[p.cima]:=dato;
end;
else
writeln('ya no hay espacio');
end;
(este procedimiento push te ayudará a insertar un elemento en la pila)
(ahora si vas a ver por qué es que esto procedimientos "pop y push" te facilitan la vida)
(vamos a hacer un procedimiento de llenado de la pila utilizando pop y push)(tal vez no me alcance asi que te lo mando en otra parte)

  Respuesta:  josé Vaenzuela
(continuacion)
(a como te expliqué vamos a hacer un procedimiento para llenar la pila)
procedure llenar(var p:pila);
var
dato:integer; i:integer; resp:char;
begin
writeln( '...............LLENANDO LA PILA....................');
i:=0; p.cima:=0;
repeat
writeln('numero:');
readln(dato);
push(p,dato);(es aqui en donte te ahorras un mundo, este llamada al procedimiento push, lo que hará es que,el dato que acabamos de leer lo insertará en la pila)
inc(i); (con este "i" contarémos el numero de datos que se van introduciendo, para ase llevar el control de cuando la pila esté llena más adelante notarás cómo)
repeat
writeln(´Desea introducir otro numero?[s/n]');
readln(resp);
until resp in ['n','N','s','S'];
(con esto tienes garantizado que opcion solo recibira un caracter n ó s mayúscula o minuscula)
until (resp in ['n','N']) or (i=n);end;
(este until significa que solo se deja de pedir datos hasta que la pila esté llena o se teclee una n o N de no) (y por último llamas)
begin llenar(p) end.(de la misma manera usa el proc. pop)

  Respuesta:  Benito Cuevas Amézaga
Para utilizar pilas y colas en pascal es necesario utilizar procedimientos y funciones para almacenar datos (añadirlos o quitarlos), ver si una pila está llena o queda más espacio, etc. Es un proceso mas bien sencillo si utilizas arreglos para estas simulaciones.

  Respuesta:  Ignacio Chicuate
Mira las pilas y las colas las puedes representar con arreglos y con listas encadenadas o con listas doblemente encadenadas.
O sea utilizando punteros o bien variables dinamicas.
si lo piensas intentar te recomiendo que primero lo hagas con arreglos , depues con listas encadenadas y por ultimo con listas doblemente encadenadas.
tengo un curso de punteros si lo quieres mandame un e-mail .

  Respuesta:  Iván Suárez Gómez
Es cierto que para trabajar con colas y pilas se puede hacer con punteros bla bla bla. Pero si no quieres complicarte la vida y no vas a usar mucho más de 64kb en estas estructuras, es más fácil usar un simple array.

  Respuesta:  Jorge Viqueira
Podés simular las estructuras de datos que referis, usando puntero (listas enlazadas) y vas a tener un simulación bastante real si lo implementan bien.
Supongo que si preguntan esto estan estudiando, más precisamente INFORMATICA y de punteros ni ahí; por eso si necesitan ayuda mandenme un mail.

chau,

  Respuesta:  daniel garcia
Para manejar Pilas y Colas en pascal debes trabajar con Punteros, de forma dinamica como se denomina en programacion.
Es decir, manejar direcciones de memoria, donde estan los datos. Para mas dudas enviame un correo.