Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 19.02.2014
Сообщений: 47
1

Односвязный Список, метод поиска элементов

19.02.2014, 07:16. Показов 4588. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создал односвязный список, добавляет элементы, удаляет. Нужно написать добавление элемента после определённого индекса. Обшарил кучу тем про счетчики индексов в итоге ничего не нашел, помогите.
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
class Object<X> {
    Object<X> next;
    X value;
}
 
public class Spisok<X> {
    X element;
    public Object<X> next;
    public Object<X> first;
 
    Spisok(X element, Object<X> next, Object<X> first) {
        this.element = element;
        this.next = next;
        this.first = first;
 
    }
 
    public Spisok() {
 
    }
void add(X value) {
        Object<X> newElem = new Object<X>();
        newElem.value = value;
 
        if (next == null) {
 
            first = newElem;
            next = newElem;
        } else {
            next.next = newElem;
            next = newElem;
        }
    }
void printList() {
 
        Object<X> link = first;
        while (link != null) {
            System.out.print(" " + link.value);
            link = link.next;
        }
 
    }
 
    void delElem(X value) {
 
        if (first == next) {
            first = null;
            next = null;
            return;
        }
        if (first.value == value) {
            first = first.next;
            return;
        } else {
            Object<X> link = first;
            while (link.next != null) {
                if (link.next.value == value) {
                    if (next == link.next)
                        next = link;
                    link.next = link.next.next;
                    return;
                }
                link = link.next;
            }
        }
    }
public static void main(String[] args) {
        @SuppressWarnings({ "all" })
        //Spisok<Comparable> myList = new Spisok();
        Spisok<String> myList = new Spisok<String>();
        myList.add("1");
        myList.add("2");
        myList.add("3");
        myList.add("4");
        myList.add("0");
        myList.delElem("0");
        myList.printList();
        
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2014, 07:16
Ответы с готовыми решениями:

Односвязный список, метод вставки по индексу
вот односвязный список с методами(добавления элементов в список, определения индекса и вставки...

Односвязный список, проблема при добавлении элементов
Добрый день. Пишу односвязный список. Узел public class Node&lt;T&gt; { private T value; ...

Создать односвязный линейный список и прописать функции добавления и удаления элементов
Доброго времени суток! Нужно создать одно-связанный линейный список и прописать функции...

Односвязный список (удаление элементов)
Функция должна удалять все элементы у которых поле будет совпадать с полем которое введет...

8
22 / 22 / 5
Регистрация: 18.08.2013
Сообщений: 44
19.02.2014, 08:14 2
Pr1M, вот несколько реализаций кастомных списков с требуемым функционалом:
http://www.java2s.com/Code/Jav... ucture.htm
http://www.java-tips.org/java-... -java.html
Думаю разобраться будет не трудно
1
0 / 0 / 0
Регистрация: 19.02.2014
Сообщений: 47
19.02.2014, 11:37  [ТС] 3
Спасибо, CrashLies, разобрался)

Добавлено через 3 часа 8 минут
а как реализовать метод сортировки элементов по возрастанию, смотрел разные алгоритмы, не улавливаю суть, если кто знает подскажите.
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
public class LinkedList {
    private Object first;
    private Object next;
 
    public LinkedList() {
        first = null;
        next = null;
    }
 
    public boolean isEmpty() {
        return first == null;
    }
 
    public void pushNext(long dd) {
        Object newLink = new Object(dd);
        if (isEmpty())
            first = newLink;
        else {
            next.next = newLink;
            newLink.previous = next;
        }
        next = newLink;
    }
 
    public boolean insertAfter(long key, long dd) {
        Object link = first;
        while (link.dData != key) {
            link = link.next;
            if (link == null)
                return false;
        }
        Object newLink = new Object(dd);
 
        if (link == next) {
            newLink.next = null;
            next = newLink;
        } else {
            newLink.next = link.next;
 
            link.next.previous = newLink;
        }
        newLink.previous = link;
        link.next = newLink;
        return true;
    }
 
    public Object delElem(long key) {
        Object link = first;
        while (link.dData != key) {
            link = link.next;
            if (link == null)
                return null;
        }
        if (link == first)
            first = link.next;
        else
            link.previous.next = link.next;
 
        if (link == next)
            next = link.previous;
        else
 
            link.next.previous = link.previous;
        return link;
    }
 
    public void printList() {
        System.out.print("Список: ");
        Object link = first;
        while (link != null) {
            link.displayLink();
            link = link.next;
        }
        System.out.println("");
    }
 
    public static void main(String[] args) {
        LinkedList myList = new LinkedList();
        myList.pushNext(1);
        myList.pushNext(2);
        myList.pushNext(3);
        myList.pushNext(4);
        myList.pushNext(5);
        myList.printList();
 
        // myList.delElem(5);
        // myList.insertAfter(2, 77123);
    }
 
}
 
class Object {
    public long dData;
 
    public Object next;
 
    public Object previous;
 
    public Object(long d) {
        dData = d;
    }
 
    public void displayLink() {
        System.out.print(dData + " ");
    }
 
}
0
22 / 22 / 5
Регистрация: 18.08.2013
Сообщений: 44
19.02.2014, 13:20 4
Цитата Сообщение от Pr1M Посмотреть сообщение
как реализовать метод сортировки
В случае с кастомным списком всё не так уж и просто. К такому списку нельзя применить стандартные плюшки вроде класса Comparator или интерфейса Comparable.(Может быть и можно, но точно придётся переделывать алгоритм).
Вывод: или писать ручками, или или делать аналог кастомного SortedList(Но тогда придётся отказаться от вставки по индексу).
1. Вот пример реализации на Си:https://www.ibm.com/developerw... ctures_04/
На джава это даже проще - нет указателей.

2. Кастомный SortedList: http://www.java2s.com/Code/Jav... edlist.htm
В этом случае при вставке вычисляется место в списке, не нарушающее порядок сортировки. Но от вставки по индексу придётся отказаться.

ps: Неудачное имя для класса: Object. Лучше использовать что-то вроде Wrapper или Entity.
1
0 / 0 / 0
Регистрация: 19.02.2014
Сообщений: 47
20.02.2014, 06:47  [ТС] 5
Да не получается, в с++ не разбираюсь, поэтому в коде запутался еще больше.
А метод insert и добавляет элементы и сразу их сортирует. Я же не могу добавить элементы одним методом, а если захочу рассортировать то вбивать их по новой другим методом.
Нужна какая нибудь фича, что бы в метод insert пихало уже записанные элементы, и insert только сортировал их. А вот как это сделать...
0
22 / 22 / 5
Регистрация: 18.08.2013
Сообщений: 44
20.02.2014, 07:31 6
Pr1M, там используется не С++, а Си и он намного проще. Вот полностью скопированный код пузырьковой сортировки из первой приведённой ссылки, почти без изменений и на 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
    public void bubbleSort() {
        Object a = null;
        Object b = null;
        Object c = null;
        Object e = null;
        Object tmp = null;
 
        while (e != first.next) {
            c = a = first;
            b = a.next;
            while (a != e) {
                if (a.dData > b.dData) {
                    if (a == first) {
                        tmp = b.next;
                        b.next = a;
                        a.next = tmp;
                        first = b;
                        c = b;
                    } else {
                        tmp = b.next;
                        b.next = a;
                        a.next = tmp;
                        c.next = b;
                        c = b;
                    }
                } else {
                    c = a;
                    a = a.next;
                }
                b = a.next;
                if (b == e) {
                    e = a;
                }
            }
        }
    }

Было бы не плохо оптимизировать, но работать должно и так.
ps: повторюсь, название у класса Object лучше изменить.
1
0 / 0 / 0
Регистрация: 19.02.2014
Сообщений: 47
20.02.2014, 08:27  [ТС] 7
да я сменил название, а переменная С - это узел который хранит каждый раз новые данные о элементах что бы потом передать другим переменным в циклы?
0
22 / 22 / 5
Регистрация: 18.08.2013
Сообщений: 44
20.02.2014, 11:06 8
Pr1M, не совсем понял о чём вы. Если под "С" подразумевается "Object c" из приведённого метода, то это обычная ссылка на объект. А если под "С" подразумевается язык "Си" - то в приведённых на сайте примерах используются указатели на структуру. Или вы о чём-то другом спрашивали?
1
0 / 0 / 0
Регистрация: 19.02.2014
Сообщений: 47
20.02.2014, 15:13  [ТС] 9
да я про ссылку спасибо еще раз)
0
20.02.2014, 15:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2014, 15:13
Помогаю со студенческими работами здесь

Добавление элементов в односвязный список
добавляю элементы в список, после вывода всех он выводит все с одинаковым значением (которое такое...

Запись элементов файла в односвязный список
дан файл целых чисел. записать все его элементы в односвязный список!!!

Добавление элементов в односвязный линейный список
Всем добрый день! Написала функцию, которая добавляет элементы в список, причем каждый элемент...

Односвязный список: удаление элементов,заканчивающихся на 5
Есть вот такая задача: Создать список из случайных целых чисел и удалить элементы, заканчивающиеся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru