Как установить элемент на индекс строки и индекс столбца, чтобы создать разреженную матрицу, используя связанный список - PullRequest
1 голос
/ 25 февраля 2020

Я хочу создать разреженную матрицу, используя связанные списки в java. Узел сортируется на основе индекса строки и столбца. Мне удалось создать разреженный вектор, но по какой-то причине я не могу понять, как это сделать, используя два индекса.

Конструктор

public LLSparseM(int nr, int nc) {
        numeberOfColums = nc;
        numerOfRows = nr;
        head = new node(-1, -1, 0, null, null);
        tail = new node(nr, nc, 0, head, null);
        head.setNext(tail);
        return;
    }

Метод заданного элемента

public void setElement(int ridx, int cidx, int val) {
    if (head.getNext().getElement() == 0) {
        node newnode = new node(ridx, cidx, val, head, tail);
        head.setNext(newnode);
        tail.setPrev(newnode);
    } else {
        node current = head.getNext();
        while (current.getRidx() < ridx || (current.getRidx() <= ridx && current.getCidx() < cidx)) {
            current = current.getNext();
        }
        if (current.getRidx() == ridx && current.getCidx() == cidx) {
            node newest = new node(ridx, cidx, val, current.getPrev(), current.getNext());
            current.getPrev().setNext(newest);
            current.getNext().setPrev(newest);
        } else if (current.getRidx() > ridx || current.getRidx() >= ridx && current.getCidx() > current.getCidx()) {
            if (head.getRidx() > ridx || head.getRidx() == ridx && head.getCidx() > cidx) {
                node newest = new node(ridx, cidx, val, null, head);
                tail = head;
                head.setPrev(newest);
                head = newest;
                tail.setNext(null);
            } else {
                node temp = current.getPrev();
                node newest = new node(ridx, cidx, val, temp, current);
                temp.setNext(newest);
                current.setPrev(newest);
            }

        } else if (current.getRidx() == numerOfRows && current.getCidx() == numeberOfColums) {
            node newest = new node(ridx, cidx, val, tail.getPrev(), tail);
            tail.getPrev().setNext(newest);
        }
    }
}
...