//======================== LIFO queue (stack) =============================

function Stack() {              			// Konstruktor
   this.stack_array = new Array();
   this.stack_length = 0;                   // laenge und zeigt immer auf das naechste frei Element
};

//............................... Methoden ................................

function s_pop() { // Erstes/oberstes (hier: das hinterste) Element entfernen und zurŸckliefern
	if (this.stack_length == 0) return null;
	return(this.stack_array[--this.stack_length]);
};

Stack.prototype.pop = s_pop; 				//Methode hinzufuegen

//.........................................................................

function s_push(newEl) { // Ein neues Element drauflegen (hier: hinten anhaengen)
	this.stack_array[this.stack_length++] = newEl;
	return true;
};

Stack.prototype.push = s_push;

//.........................................................................

function s_print() { // Ganzen Stack ausgeben
	var resString = "";
	for (var i=this.stack_length-1;i>=0;i--) {
		resString+=this.stack_array[i]+"\n";
	}
	return resString;
};

Stack.prototype.print = s_print;

//.........................................................................
//..............Methoden zur besseren Darstellung als Protokoll............
//.........................................................................

function s_printAsList() { // Ganzen Stack als Liste ausgeben
	var resString = "[";
	for (var i=this.stack_length-1;i>=0;i--) {
		resString+=this.stack_array[i];
		if (i>0) resString+=",";
	}
	resString+="]";
	return resString;
};

Stack.prototype.printAsList = s_printAsList;

//=========================================================================
