Показать сообщение отдельно
  #16 (permalink)  
Старый 23.08.2012, 23:45
Новичок на форуме
Отправить личное сообщение для drstas Посмотреть профиль Найти все сообщения от drstas
 
Регистрация: 23.08.2012
Сообщений: 1

Двух мерный массив
Лучшее решение создать собственный оператор массивов, точнее контейнер
вот пример
function vector()
	{
		this.begin=null;
  		this.end=null;
  		this.zn=null;
  		this.size=function(){var s=0;this.zn=this.begin;while(this.zn!=null){s++;this.zn=this.zn.end;}return s;}
  		this.add_back=function(buff){this.zn=new vector();this.zn.begin=this.end;this.zn.end=null;this.zn.zn=buff;if(this.end==null)this.begin=this.zn;else this.end.end=this.zn;this.end=this.zn;}  		
  		this.add_front=function(buff){this.zn=new vector();this.zn.begin=null;this.zn.end=this.begin;this.zn.zn=buff;if(this.begin==null)this.end=this.zn;else this.begin.begin=this.zn;this.begin=this.zn;}
  		this.add=function(pos,buff){if(pos<=0)this.add_front(buff);else if(pos>=this.size())this.add_back(buff);else{this.zn=new vector();var q=this.begin;while(pos!=0){q=q.end;pos--;}this.zn.begin=q.begin;this.zn.end=q;this.zn.zn=buff;q.begin.end=this.zn;q.begin=this.zn;}}
		this.del_front=function(){if(this.begin!=null){this.zn=this.begin.end;delete this.begin;this.begin=this.zn;}}			
		this.del_back=function(){if(this.begin!=null){this.zn=this.end.begin;delete this.end;this.end=this.zn;}}		
		this.del=function(pos){if(pos<=0)this.del_front(buff);else if(pos>=this.size()-1)this.del_back(buff);else{this.zn=this.begin;while(pos!=0){this.zn=this.zn.end;pos--;}this.zn.begin.end=this.zn.end;this.zn.end.begin=this.zn.begin;delete this.zn;}}	
		this.front=function(){if(this.begin!=null)return this.begin.zn;else return null;}			
		this.back=function(){if(this.begin!=null)return this.end.zn;else return null;}				
		this.insert=function(pos){if(pos<0)return null;this.zn=this.begin;while(pos!=0){if(this.zn==null)return null;else{this.zn=this.zn.end;pos--}}return this.zn.zn;}	
		this.clear=function(){while(this.begin!=null){this.zn=this.begin.end;delete this.begin;this.begin=this.zn;}}
	}
	function matrix()
	{
		this.it=new vector();
		this.line_size=function(){return this.it.size();} 		
		this.col_size=function(pos){return this.it.insert(pos).size();} 
		this.add_line=function(pos){this.it.add(pos,new vector());}				
		this.add_line_front=function(){this.it.add_front(new vector());}
		this.add_line_back=function(){this.it.add_back(new vector());}	
		this.del_line=function(pos){if(this.it.insert(pos)!=null){this.it.insert(pos).clear();delete this.it.insert(pos);this.it.del(pos);}}		
		this.del_line_front=function(){if(this.it.begin!=null){this.it.front().clear();delete this.it.front();this.it.del_front();}}	
		this.del_line_back=function(){if(this.it.end!=null){this.it.back().clear();delete this.it.back();this.it.del_back();}}
		this.add_col=function(posx,posy,zn){this.it.insert(posx).add(posy,zn);}	
		this.add_col_front=function(posx,zn){this.it.insert(posx).add_front(zn);}
		this.add_col_back=function(posx,zn){this.it.posx,posy.add_back(zn);}	
		this.del_col=function(posx,posy){this.it.insert(posx).del(posy);}
		this.del_col_front=function(posx){this.it.insert(posx).del_front();}			
		this.del_col_back=function(posx){this.it.insert(posx).del_back();}
		this.insert=function(posx,posy){return this.it.insert(posx).insert(posy);}
		this.clear=function(){while(this.it.begin!=null)this.del_line_front();}
	}

тем самым мы получаем оператор двумерный массив Matrix()

var kon=new matrix(); // создаем двумерный массив
\\.............работаем с ним
kon.clear(); // очищаем массив освобождая память
delete kon;


оператор matrix() имеет команды (функции)
работа с массивом первого уровня:
line_size() - возвращает количество строк (x.length)
add_line(pos) - создает пустой массив 2 уровня в позицию pos (x[pos]=new Array())
add_line_front() - тоже что и add_line(pos), но добавляет в начале массива (x[0]=new Array())
add_line_back() - тоже что и add_line(pos), но добавляет в конец массива (x[x.length]=new Array())
del_line(pos) - удалить строку в позицию pos
соответственно
del_line_front() удалить в начале,
del_line_back() удалить в конце

работа с массивом второго уровня:
col_size(pos) - возвращает количество значений в pos строке
add_col(posx,posy,zn) - добавить значение zn в строку posx, в позицию posy ( x[posx][posy]=y )
add_col_front(posx,zn) - добавить значение zn в строку posx, в начало массива 2 уровня ( x[posx][0]=y )
add_col_back(posx,zn) соответственно добавить в конец массива
del_col(posx,posy) - удалить из строки posx и значение posy
del_col_front(posx) - удалить из строки posx в начале строки
del_col_back(posx) - удалить из строки posx в конце строки

и самое главное чтение значения
insert(posx,posy) - читаем, изменяем значение posy в строке posx (x[posx][posy]=z)

clear() - очищаем массивы
Ответить с цитированием