Вставка и удаление элементов в матрице

У меня есть задание, где у меня есть вопросы, которые требуют следующих реализаций:

insertAtRanks(Integer x, Integer y, Object o): insert a new element to be stored at position (x,y) 

и

Object removeAtRanks(Integer x, Integer y): remove and return the element at position (x,y)

Он уже просил реализовать replaceAtRanks, где я должен был заменить элемент внутри позиции параметром.

Так что я предполагаю при вставке и удалении элементов матрица будет увеличиваться и уменьшаться в размерах, но у меня вопрос как?

Например

| 3    6|
| 2    5|

Если бы мне пришлось вставить номер 8 в позицию (1,1), произойдет ли следующее?

| 3    6|
| 2    8|
| null 5|

И если мне придется удалить элемент в (1,1), он вернется к нему после этого?

| 3   6|
| 2   5|

Редактировать:

Я использую Java для реализации и использую двумерный массив классов для представления матрицы.


person Drahcir    schedule 01.03.2010    source источник
comment
+1 за честное заявление о том, что это вопрос домашнего задания, и точное указание, с какой частью задания у вас возникли проблемы   -  person Kena    schedule 01.03.2010
comment
Это, вероятно, решение о реализации, которое зависит от вас или должно быть задано инструктором. Если они не указали, они, вероятно, хотят, чтобы вы реализовали это так, как считаете нужным. (Кстати, ваша текущая идея звучит неплохо, если удаление только удаляет, если в соответствующей строке/столбце есть нуль.)   -  person Michael Todd    schedule 01.03.2010


Ответы (3)


|3    6|
|null 8|
|2    5|

or

|3    6|
|0    8|
|2    5|

or

|3    6|
|2    8|

или многие другие формы предлагают себя в качестве альтернативы. Я думаю, вы должны решить, что вас просят реализовать, а затем реализовать это.

person High Performance Mark    schedule 01.03.2010

Я не знаю, какой язык вы используете, но это должно быть что-то вроде:

  • Вставить новую строку с пустыми значениями
  • для i = newSizeOnX, пока я не достигну x (ваша строка), с уменьшением i, скопируйте строку (m[i+1]=[i])
  • затем вы просто вставляете объект в позицию m[x][y] и заполняете остальные m[x][y'] (все y' != y)
person fern17    schedule 01.03.2010

До определенного момента это вопрос спецификаций.

В обычной системе вы можете:

  • решить рассматривать эти случаи как запрещенные исключения и вернуть ошибку или предупреждение, если это произойдет
  • определить конкретное предопределенное поведение, согласованное для всех функций, которые вы реализуете, и четко задокументированное

Например, предварительное заполнение матрицы нулями или не-числом является одним из типичных способов решения вашей первой проблемы. Как Matlab справляется с этим по умолчанию?

Это также зависит от приложения. Например, если вы работаете с изображениями, скорее всего, в большинстве случаев вы не захотите превышать исходный размер изображения. Если вы работаете со звуком, случай по умолчанию, вероятно, состоит в том, чтобы вставить тишину при расширении последовательности данных. Что наиболее целесообразно для ВАШЕГО приложения?

person Kena    schedule 01.03.2010