powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Структура данных
25 сообщений из 106, страница 1 из 5
Структура данных
    #39687229
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята я написала код структуры данных (иерархия) нужно было создать класс "Tree " с datattpe (string (можно было object добавлять))
с функциями add, remove, search, iterate посмотрите код я правильно написала если нет можете подправить)?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
package tree;

import java.util.ArrayList;
import java.util.List;


public class Tree<T> {
     private Node<T> root;

    public Tree(T rootData) {
        root = new Node<T>();
        root.data = rootData;
        root.children = new ArrayList<Node<T>>();
    }

    public static class Node<T> {
        private T data;
        private Node<T> parent;
        private List<Node<T>> children;
    }
}
...
Рейтинг: 0 / 0
Структура данных
    #39687253
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На мой взгляд не стоит делать и родительские и дочерние объекты в классе.
Что-то одно.
Но, опять-таки не знаю что вы хотите и может быть вам нужен именно двусвязный список объектов.
...
Рейтинг: 0 / 0
Структура данных
    #39687257
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

как можно сделать по вашему чтобы add remove search iterator был (
...
Рейтинг: 0 / 0
Структура данных
    #39687258
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

как можно сделать по вашему чтобы add remove search iterator был (
...
Рейтинг: 0 / 0
Структура данных
    #39687260
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nastyaa,
примено вот так да?
Код: java
1.
2.
3.
4.
5.
6.
 public TreeNode<T> addChild(T child) {
        TreeNode<T> childNode = new TreeNode<T>(child);
        childNode.parent = this;
        this.children.add(childNode);
        return childNode;
    }
...
Рейтинг: 0 / 0
Структура данных
    #39687263
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы лучше связывался через родительский элемент, так как он (как мне кажется) создается раньше, чем дочерний.
...
Рейтинг: 0 / 0
Структура данных
    #39687266
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

как можно это сделать? можете написать код пожалуйста)
...
Рейтинг: 0 / 0
Структура данных
    #39687270
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaanastyaa,
примено вот так да?
Код: java
1.
2.
3.
4.
5.
6.
 public TreeNode<T> addChild(T child) {
        TreeNode<T> childNode = new TreeNode<T>(child);
        childNode.parent = this;
        this.children.add(childNode);
        return childNode;
    }


Нет, зачем вам создавать TreeNode<T> childNode = new TreeNode<T>(child);?
Просто добавляйте существующий child в this.children.
Что-то типа
Код: java
1.
2.
3.
 public void addChild(T child) {
        this.children.add(childNode);
    }


Впрочем могу ошибаться :)
...
Рейтинг: 0 / 0
Структура данных
    #39687273
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,
вот так?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public abstract class Tree<T> implements Iterable<Tree<T>> {

    T data;
    Tree<T> parent;
    List<Tree<T>> children;

    public Tree(T data) {
        this.data = data;
        this.children = new LinkedList<Tree<T>>();
    }

     public void addChild(T child) {
        Tree<T> childNode = null;
        this.children.add(childNode);
    }
    
...
Рейтинг: 0 / 0
Структура данных
    #39687282
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему вы добавляете null объект в коллекцию дочерний, имея существующий child ?
Код: java
1.
2.
3.
4.
     public void addChild(T child) {
        Tree<T> childNode = null;
        this.children.add(childNode);
    }


Почему не так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
     
public void setParent(Tree<T> child) {
        this.parent = child;
}

public void addChild(T child) {
        child.setParent(this);
        this.children.add(child);
    }



Боюсь, что я вас окончательно запутаю :)
...
Рейтинг: 0 / 0
Структура данных
    #39687296
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

ошибка(
...
Рейтинг: 0 / 0
Структура данных
    #39687319
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaSQL2008,
ошибка(
Я предупреждал, что могу ошибаться :)
дело в том, что передаваемый тип (T child) не есть объект класса Tree<T> (тут я ошибся, каюсь)
и у него нет метода setParent.

Выход попробовать передавать
Код: java
1.
2.
3.
4.
public void addChild(Tree<T> child) {
        child.setParent(this);
        this.children.add(child);
    }
...
Рейтинг: 0 / 0
Структура данных
    #39687343
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

Спасибо) как можно добавить add, remove, search, iterate я пишу но ошибку выводит
...
Рейтинг: 0 / 0
Структура данных
    #39687344
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,
...
Рейтинг: 0 / 0
Структура данных
    #39687506
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaa,

Вот такое решение:

Main.java:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
package tree;

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Node node = new Node("name", null, 0L);
        int foundForName = findByName(node, "name").size();
        int foundForName1 = findByName(node, "name1").size();
        System.out.println("found for name - " + foundForName);
        System.out.println("found for name1 - " + foundForName1);

        Tree tree = new Tree("name", null);
        tree.add(node);
        int foundForNameInTree = findByName(tree, "name").size();
        System.out.println("found for name in tree - " + foundForNameInTree);

        Tree tree2 = new Tree("name", null);
        tree2.add(node);
        tree.add(tree2);
        int foundForNameInTree2 = findByName(tree, "name").size();
        System.out.println("found for name in tree 2 - " + foundForNameInTree2);

    }

    public static List<Entry> findByName(final Entry entry, final String name) {
        final List<Entry> result = new ArrayList<Entry>();
        final Queue<Entry> allFiles = new LinkedList<Entry>();
        allFiles.add(entry);
        while (!allFiles.isEmpty()) {
            final Entry localEntry = allFiles.poll();
            if (localEntry instanceof Tree) {
                final List<Entry> files = ((Tree) localEntry).iterate();
                for (final Entry innerFile : files) {
                    if (innerFile instanceof Tree) {
                        allFiles.add(innerFile);
                    } else if (innerFile.getName().equals(name)) {
                        result.add(innerFile);
                    }
                }
            } else if (localEntry.getName().equals(name)) {
                result.add(localEntry);
            }
        }
        return result;
    }
}



Entry.java:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
package tree;

public abstract class Entry {
    private final Tree parent;
    private final long created;
    private String name;
    private long lastUpdated;
    private long lastAccessed;

    public Entry(String name, Tree parent) {
        this.name = name;
        this.parent = parent;
        this.created = System.currentTimeMillis();
    }

    public boolean delete() {
        if (parent == null) {
            return false;
        }
        return parent.remove(this);
    }

    public abstract long size();

    public String getFullPath() {
        if (parent == null) {
            return name;
        } else {
            return parent.getFullPath() + "/" + name;
        }
    }

    public long getCreationTime() {
        return created;
    }

    public long getLastUpdated() {
        return lastUpdated;
    }

    public long getLastAccessed() {
        return lastAccessed;
    }

    public void setLastUpdated(long lastUpdated) {
        this.lastUpdated = lastUpdated;
    }

    public void setLastAccessed(long lastAccessed) {
        this.lastAccessed = lastAccessed;
    }

    public void changeName(String newName) {
        this.name = newName;
        this.lastUpdated = System.currentTimeMillis();
    }

    public String getName() {
        return name;
    }
}



Node.java:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
package tree;

public class Node extends Entry {
    private final java.io.ByteArrayOutputStream stream;
    private final long size;

    public Node(String name, Tree parent, long size) {
        super(name, parent);
        this.size = size;
        this.stream = new java.io.ByteArrayOutputStream();
    }

    public long size() {
        return size;
    }

    public byte[] getContents() {
        setLastAccessed(System.currentTimeMillis());
        return stream.toByteArray();
    }

    public void setContents(byte[] content) {
        this.stream.write(content, 0, content.length);
        setLastUpdated(System.currentTimeMillis());
    }
}



Tree.java:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
package tree;

import java.util.ArrayList;
import java.util.List;

public class Tree extends Entry {
    private final List<Entry> contents;

    public Tree(String name, Tree tree) {
        super(name, tree);
        contents = new ArrayList<Entry>();
    }

    protected List<Entry> iterate() {
        return contents;
    }

    public long size() {
        long size = 0;
        for (final Entry entry : contents) {
            size += entry.size();
        }
        return size;
    }

    public boolean remove(Entry entry) {
        return contents.remove(entry);
    }

    public void add(Entry entry) {
        contents.add(entry);
    }
}



С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39687522
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Спасибо вам большое)))
Ваше решение похоже на то мне сказали чтобы внутри класса Tree нужно создать class Node и внутри мутить add и тд ??
...
Рейтинг: 0 / 0
Структура данных
    #39687524
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Можете некоторые места закомментировать(( я просто только сегодня познакомилась с Tree и Datatype некоторые места непонятны, если конечно у вас время будет. А так вы мой спаситель люблю вас!!)
...
Рейтинг: 0 / 0
Структура данных
    #39687531
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

Можете некоторые места закомментировать(( я просто только сегодня познакомилась с Tree и Datatype некоторые места непонятны, если конечно у вас время будет. А так вы мой спаситель люблю вас!!)

Новая версия:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
Main.java:

package tree;

public class Main {

    public static void main(String[] args) {
        Node node = new Node("name", null, 0L);
        int foundForName = node.findByName("name").size();
        int foundForName1 = node.findByName("name1").size();
        System.out.println("found for name - " + foundForName);
        System.out.println("found for name1 - " + foundForName1);

        Tree tree = new Tree("name", null);
        tree.add(node);
        int foundForNameInTree = tree.findByName("name").size();
        System.out.println("found for name in tree - " + foundForNameInTree);

        Tree tree2 = new Tree("name", null);
        tree2.add(node);
        tree.add(tree2);
        int foundForNameInTree2 = tree.findByName("name").size();
        System.out.println("found for name in tree 2 - " + foundForNameInTree2);

    }
}

Entry.java:

package tree;

import java.util.*;

public abstract class Entry {
    private final Tree parent;
    private String name;

    public Entry(String name, Tree parent) {
        this.name = name;
        this.parent = parent;
    }

    public boolean delete() {
        if (parent == null) {
            return false;
        }
        return parent.remove(this);
    }

    public abstract long size();

    public String getFullPath() {
        if (parent == null) {
            return name;
        } else {
            return parent.getFullPath() + "/" + name;
        }
    }

    public void changeName(String newName) {
        this.name = newName;
    }

    public String getName() {
        return name;
    }

    public List<Entry> findByName(final String name) {
        final List<Entry> result = new ArrayList<Entry>();
        final Queue<Entry> allFiles = new LinkedList<Entry>();
        allFiles.add(this);
        while (!allFiles.isEmpty()) {
            final Entry localEntry = allFiles.poll();
            if (localEntry instanceof Tree) {
                final List<Entry> files = ((Tree) localEntry).iterate();
                for (final Entry innerFile : files) {
                    if (innerFile instanceof Tree) {
                        allFiles.add(innerFile);
                    } else if (innerFile.getName().equals(name)) {
                        result.add(innerFile);
                    }
                }
            } else if (localEntry.getName().equals(name)) {
                result.add(localEntry);
            }
        }
        return result;
    }
}

Node.java:

package tree;

public class Node extends Entry {
    private final java.io.ByteArrayOutputStream stream;
    private final long size;

    public Node(String name, Tree parent, long size) {
        super(name, parent);
        this.size = size;
        this.stream = new java.io.ByteArrayOutputStream();
    }

    public long size() {
        return size;
    }

    public byte[] getContents() {
        return stream.toByteArray();
    }

    public void setContents(byte[] content) {
        this.stream.write(content, 0, content.length);
    }
}

Tree.java:

package tree;

import java.util.ArrayList;
import java.util.List;

public class Tree extends Entry {
    private final List<Entry> contents;

    public Tree(String name, Tree tree) {
        super(name, tree);
        contents = new ArrayList<Entry>();
    }

    protected List<Entry> iterate() {
        return contents;
    }

    public long size() {
        long size = 0;
        for (final Entry entry : contents) {
            size += entry.size();
        }
        return size;
    }

    public boolean remove(Entry entry) {
        return contents.remove(entry);
    }

    public void add(Entry entry) {
        contents.add(entry);
    }
}



С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39687807
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

это весь код?)
...
Рейтинг: 0 / 0
Структура данных
    #39687808
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

ошибка(
...
Рейтинг: 0 / 0
Структура данных
    #39687809
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

ошибка в main
(
...
Рейтинг: 0 / 0
Структура данных
    #39687810
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

ошибка в node(
...
Рейтинг: 0 / 0
Структура данных
    #39687811
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

ошибка в tree(
...
Рейтинг: 0 / 0
Структура данных
    #39687812
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

выводит главный класс найти не удалось(
...
Рейтинг: 0 / 0
Структура данных
    #39687821
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Я все решила проблему))
Можно спросить что здесь выводит
Код: java
1.
2.
3.
4.
found for name - 1
found for name1 - 0
found for name in tree - 1
found for name in tree 2 - 2
...
Рейтинг: 0 / 0
25 сообщений из 106, страница 1 из 5
Форумы / Java [игнор отключен] [закрыт для гостей] / Структура данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]