Вставка и удаление элементов в матрице - PullRequest
2 голосов
/ 01 марта 2010

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

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|

Edit:

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

Ответы [ 3 ]

1 голос
/ 01 марта 2010
|3    6|
|null 8|
|2    5|

или

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

или

|3    6|
|2    8|

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

0 голосов
/ 01 марта 2010

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

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

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

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

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

0 голосов
/ 01 марта 2010

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

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