algorytm.org

Implementacja w JavaScript



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Stos - Implementacja w JavaScript
Ocena użytkownikóww: *****  / 3
SłabyŚwietny
Nadesłany przez Jakub Szczeklik, 02 kwietnia 2011 01:41
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

stos_1_js.js:
/*

Stos
www.algorytm.org

przykład uzycia:

var stos = new stack({ max_elements:2, erase_last_when_full:true });

stos.push('string');
stos.push(123);
stos.push(function() { var zmienna = 'przykladowa funkcja'; });

alert(stos.pop());
alert(stos.pop());

*/

var stack = function(settings) {

	// opcje ( stanardowe ustawienia )
	var options = {
		max_elements: 0,	// maksymalna ilosc elemntow, 0 - nieskonczenie wiele
		erase_last_when_full: false		// czy usuwac element ze spodu w przypadku przekroczenia maksymalnej ilosci elementow
	};
	
	var elements = {};
	var nr_element = 0;
	
	
	if(typeof settings !== 'object') settings = {};
	
	// nadpisuje ustawienia nadane przez uzytkownika
	for(var opt in options) {
		if(!!settings[opt]) {
			options[opt] = settings[opt];
		}
	}
	
	
	return {
	
		// ilość przechowywanych elementów
		size: function() {
			return nr_element;
		},
		
		// czy stos jest pusty
		empty: function() {
			return nr_element==0;
		},
		
		// dodaj nowy element
		push: function(new_elm) {
			if(options.max_elements == 0 || nr_element < options.max_elements) {
				elements[nr_element] = new_elm;
				nr_element++;
				return true;
			} else if(options.erase_last_when_full) {
				delete elements[0];
				for(var i=1;i<options.max_elements;i++) {
					elements[i-1] = elements[i];
				}
				elements[options.max_elements-1] = new_elm;
				return true;
			} else {
				return false;
			}
		},
		
		// pobierz element
		pop: function() {
			if(!this.empty()) {
				nr_element--;
				var tmp = elements[nr_element];
				elements[nr_element] = null;
				return tmp;
			}
			return false;
		},
		
		// wyczysc stos
		clear: function() {
			var tmp = false;
			for(var i=0;i<nr_element;i++) {
				tmp = true;
				delete elements[i];
				elements[i] = null;
			}
			nr_element = 0;
			return tmp;
		}
	};
};
Dodaj komentarz