Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 04.12.2017
Сообщений: 9
1

Написать класс Queue (очередь), который умеет хранить следующие данные

04.12.2017, 21:43. Показов 3304. Ответов 12
Метки нет (Все метки)

Добрый вечер дорогие программисты) Не давно на вашем форуму, очень многое и интересное узнал у Вас. Хочу добавить, что решил пройти курсы по java, и из нашей группы 95% программисты по другим языкам, либо люди, хоть кто то когда то писал программы, и для меня все это сложно. У нас было 4 лекции, и вот задали домашнее задание( а я плохо понимаю в ней). Уважаемые программисты не могли бы вы написать для нее решение, что бы я ее потом разобрал по строчно... Прошу вас только об одном, написать кака можно проще, и примитивнее, иначе мне просто тяжело будет все понять и если не сложно написать комментарии почему именно тот или иной код вы написали. Задание не срочное, ну просто очень хочется во всем этом разобраться). Заранее всем спасибо за любую помощь!)


Задание:

Написать класс Queue (очередь), который умеет хранить следующие данные:

1. Элементы очереди (max – 10)

2. Количество «занятых» элементов в очереди

Также класс должен уметь выполнять следующие действия:

1. Добавление элемента в конец очереди (если в очереди есть место)

2. Удаление элемента из начала очереди (если в очереди есть элементы)

3. Получение количества занятых элементов в очереди

4. Получение «головы» и «хвоста» очереди (без удаления)
0
Лучшие ответы (1)
Заказывайте контрольные, курсовые и дипломы здесь.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2017, 21:43
Ответы с готовыми решениями:

Написать класс Queue, в котором будут содержать такие данные как ФИО и возраст
Добрый вечер! Помогите написать класс Queue, в котором будут содержать такие данные как ФИО и...

Спроектировать класс Queue (очередь)
На экзамене будет такое задание: Входной файл "in.txt" содержит числа "3 8 12 45" Надо дописать...

Класс который умеет выполнять логические операции над битами
Задача : Опишите класс который умеет выполнять логические операции над битами. (конъюнкция,...

Класс, который умеет делать формировать цепочки элементов по набору пар
Добрый день. Мне нужен класс, который умеет делать формировать цепочки элементов по набору пар....

12
Эксперт Java
3049 / 2544 / 782
Регистрация: 05.07.2013
Сообщений: 12,309
04.12.2017, 21:48 2
Если хочется разобраться, открываешь иде и пишешь код.
1
1 / 1 / 1
Регистрация: 03.02.2015
Сообщений: 70
04.12.2017, 22:21 3
Если реально разобраться хочеться, то мы сейчас в институте этот курс проходим. Не скажу, что там хорошо объяснено, но как вариант.

Ну а ничего лучше, чем самому на свои грабли наступать, для обучения ещё не придумано.

Ну и заголовки на форумах надо осмысленные делать, а то атата по аккаунту может быть.
1
Супер-модератор
Эксперт PythonЭксперт Java
7576 / 4158 / 1538
Регистрация: 21.10.2017
Сообщений: 11,753
04.12.2017, 22:57 4
На интуите курс обалденный, рекомендую! http://www.intuit.ru/studies/courses/16/16/info
0
745 / 492 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
05.12.2017, 04:17 5
Лучший ответ Сообщение было отмечено Student_19 как решение

Решение

Вот накидал тебе очередь:

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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
import java.util.Arrays;
import java.util.Iterator;
import java.util.NoSuchElementException;
 
public class MainDeque {
    public static void main(String[] args) {
        Deque<Integer> deque = new MyDeque<>();
 
        //добавляем в конец очереди
        deque.addLast(1);
        deque.addLast(2);
        deque.addLast(3);
        System.out.println(deque + "; size = " + deque.size());
 
        //добавляем в начало очереди
        deque.addFirst(1);
        deque.addFirst(2);
        deque.addFirst(3);
        System.out.println(deque + "; size = " + deque.size());
 
        //возвращаем элемент из начала и конца очереди
        System.out.println(deque.peekFirst());
        System.out.println(deque.peekLast());
        System.out.println(deque + "; size = " + deque.size());
 
        //удаляем элемент из начала и конца очереди
        System.out.println(deque.pollFirst());
        System.out.println(deque.pollLast());
        System.out.println(deque + "; size = " + deque.size());
 
        //добавляем в начало очереди
        deque.push(10);
        System.out.println(deque + "; size = " + deque.size());
 
        //удаляем 2 элемента из начала очереди
        deque.pop();
        deque.pop();
        System.out.println(deque + "; size = " + deque.size());
 
        //добавляем 2 элемента в начало очереди и 2 в конец
        deque.offerFirst(1);
        deque.offerFirst(2);
        deque.offerLast(1);
        deque.offerLast(2);
        System.out.println(deque + "; size = " + deque.size());
 
        System.out.println("\nTest iterator: ");
        Iterator<Integer> iterator = deque.iterator();
        while (iterator.hasNext()) {
            System.out.println("Value: " + iterator.next());
        }
 
        System.out.println("\nTest foreach: ");
        for (Integer value : deque) {
            System.out.println("Value: " + value);
        }
    }
}
 
interface Deque<E> extends Iterable<E> {
    /**
     * Получаем кол-во значений в очереди.
     *
     * @return - кол-во значений;
     */
    int size();
 
    /**
     * Добавляем значение в начало очереди.
     *
     * @param value - значение;
     */
    void addFirst(E value);
 
    /**
     * Добавляем значение в конец очереди.
     *
     * @param value - значение;
     */
    void addLast(E value);
 
    /**
     * Возвращаем без удаления значение из головы очереди.
     * Если очередь пуста, генерирует исключение NoSuchElementException.
     *
     * @return - значение;
     */
    E getFirst();
 
    /**
     * Возвращаем без удаления последний значение очереди.
     * Если очередь пуста, генерирует исключение NoSuchElementException.
     *
     * @return - значение;
     */
    E getLast();
 
    /**
     * Добавляет значение в самое начало очереди.
     *
     * @param value - значение;
     * @return если значение удачно добавлено, возвращает true, иначе - false
     */
    boolean offerFirst(E value);
 
    /**
     * Добавляет значение в конец очереди.
     *
     * @param value - значение;
     * @return если значение удачно добавлено, возвращает true, иначе - false
     */
    boolean offerLast(E value);
 
    /**
     * Возвращает без удаления значение из начала очереди.
     *
     * @return если очередь пуста, возвращает значение null или значение из начала очереди;
     */
    E peekFirst();
 
    /**
     * Возвращает без удаления последнее значение очереди.
     *
     * @return если очередь пуста, возвращает значение null или значение из конца очереди;
     */
    E peekLast();
 
    /**
     * Возвращает с удалением значение из начала очереди.
     *
     * @return если очередь пуста, возвращает значение null или значение из начала очереди;
     */
    E pollFirst();
 
    /**
     * Возвращает с удалением последнее значение очереди.
     *
     * @return если очередь пуста, возвращает значение null или последнее значение очереди;
     */
    E pollLast();
 
    /**
     * Возвращает с удалением значение из начала очереди.
     * Если очередь пуста, генерирует исключение NoSuchElementException
     *
     * @return удалённое значение;
     */
    E pop();
 
    /**
     * Добавляет значение в самое начало очереди
     *
     * @param value - значение;
     */
    void push(E value);
 
    /**
     * Возвращает с удалением значение из начала очереди.
     * Если очередь пуста, генерирует исключение NoSuchElementException
     *
     * @return удалённое значение;
     */
    E removeFirst();
 
    /**
     * Преобразует элементы очереди в массив Object.
     *
     * @return - массив типа Object;
     */
    Object[] toArray();
}
 
class MyDeque<E> implements Deque<E> {
    private static final int MAX_LENGTH = 10;
    private Node<E> first;
    private Node<E> last;
    private int size;
 
    @Override
    public int size() {
        return this.size;
    }
 
    @Override
    public void addFirst(E value) {
        offerFirst(value);
    }
 
    @Override
    public void addLast(E value) {
       offerLast(value);
    }
 
    @Override
    public E getFirst() {
        Node<E> element = this.first;
        if (element == null) {
            throw new NoSuchElementException();
        }
        return element.value;
    }
 
    @Override
    public E getLast() {
        Node<E> element = this.last;
        if (element == null) {
            element = this.first;
            if (element == null) {
                throw new NoSuchElementException();
            }
        }
        return element.value;
    }
 
    @Override
    public boolean offerFirst(E value) {
        boolean result;
        if (result = value != null && this.size < MAX_LENGTH) {
            Node<E> newNode = new Node<>(null, null, value);
            if (this.first != null) {
                newNode.next = this.first;
                this.first = this.first.prev = newNode;
                if (this.last == null) {
                    this.last = first.next;
                }
            } else {
                this.first = newNode;
            }
            this.size++;
        }
        return result;
    }
 
    @Override
    public boolean offerLast(E value) {
        boolean result;
        if (result = value != null && this.size < MAX_LENGTH) {
            Node<E> newNode = new Node<>(null, null, value);
            if (this.last != null) {
                newNode.prev = this.last;
                this.last = last.next = newNode;
                this.size++;
            } else {
                if (this.first == null) {
                    result = offerFirst(value);
                } else {
                    this.last = this.first.next = newNode;
                    this.last.prev = this.first;
                    this.size++;
                }
            }
        }
        return result;
    }
 
    @Override
    public E peekFirst() {
        Node<E> element = this.first;
        return element != null ? element.value : null;
    }
 
    @Override
    public E peekLast() {
        Node<E> element = this.last;
        return element != null ? element.value : null;
    }
 
    @Override
    public E pollFirst() {
        E value = null;
        if (this.first != null) {
            value = first.value;
            this.first = this.first.next;
            if (this.first != null) {
                first.prev = null;
            }
            this.size--;
        }
        return value;
    }
 
    @Override
    public E pollLast() {
        E value = null;
        if (this.last != null) {
            value = this.last.value;
            if (this.last.prev != this.first) {
                this.last = this.last.prev;
                this.last.next = null;
            } else {
                this.last = null;
            }
            this.size--;
        } else {
            if (this.first != null) {
                value = pollFirst();
            }
        }
        return value;
    }
 
    @Override
    public E pop() {
        E value = pollFirst();
        if (value == null) {
            throw new NoSuchElementException();
        }
        return value;
    }
 
    @Override
    public void push(E value) {
       addFirst(value);
    }
 
    @Override
    public E removeFirst() {
        E value = pollFirst();
        if (value == null) {
            throw new NoSuchElementException();
        }
        return value;
    }
 
    @Override
    public String toString() {
        return Arrays.toString(toArray());
    }
 
    @Override
    public Object[] toArray() {
        Object[] array = new Object[this.size];
        int index = 0;
        for (Node<E> x = this.first; x != null; x = x.next) {
            array[index++] = x.value;
        }
        return array;
    }
 
    @Override
    public Iterator<E> iterator() {
        return new IteratorDeque<>(this.first);
    }
 
    private class Node<E> {
        private Node<E> prev;
        private Node<E> next;
        E value;
 
        public Node(Node<E> prev, Node<E> next, E value) {
            this.prev = prev;
            this.next = next;
            this.value = value;
        }
    }
 
    private class IteratorDeque<E> implements Iterator<E> {
        private Node<E> first;
 
        public IteratorDeque(Node<E> first) {
            this.first = first;
        }
 
        @Override
        public boolean hasNext() {
            return this.first != null;
        }
 
        @Override
        public E next() {
            if (!hasNext()) {
                throw new NoSuchElementException();
            }
            E value = this.first.value;
            this.first = first.next;
            return value;
        }
    }
 
 
}
1
0 / 0 / 0
Регистрация: 04.12.2017
Сообщений: 9
05.12.2017, 10:30  [ТС] 6
Артем спасибо вам большое за помощь!))

Добавлено через 1 минуту
Артем а нельзя ли сократить код? хотя бы в позиций 150?)
0
Эксперт Java
3049 / 2544 / 782
Регистрация: 05.07.2013
Сообщений: 12,309
05.12.2017, 11:01 7
Цитата Сообщение от Student_19 Посмотреть сообщение
нельзя ли сократить код
можно, приступай
0
0 / 0 / 0
Регистрация: 04.12.2017
Сообщений: 9
05.12.2017, 13:34  [ТС] 8
xoraxax, я смотрю вы негативно настроены, наверное Вы родились уже программистом и Вам никто и никогда не помогал, спасибо, за короткие, а главное ценные ответы.
0
Эксперт Java
3049 / 2544 / 782
Регистрация: 05.07.2013
Сообщений: 12,309
05.12.2017, 13:36 9
Цитата Сообщение от Student_19 Посмотреть сообщение
я смотрю вы негативно настроены
ты лучше делом займись, а не по сторонам смотри. Тебе чувак 300 строк кода нафигачил, а тебе даже разобраться лень.
0
0 / 0 / 0
Регистрация: 04.12.2017
Сообщений: 9
05.12.2017, 13:50  [ТС] 10
я сейчас как раз начну все делать, после учебы только
0
745 / 492 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
05.12.2017, 17:28 11
Так удали интерфейс и делов

Добавлено через 4 минуты
сократил до 250... до 150 будет сложновато:
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
import java.util.Arrays;
import java.util.Iterator;
import java.util.NoSuchElementException;
 
public class MainDeque {
    public static void main(String[] args) {
        MyDeque<Integer> deque = new MyDeque<>();
 
        //добавляем в конец очереди
        deque.addLast(1);
        deque.addLast(2);
        deque.addLast(3);
        System.out.println(deque + "; size = " + deque.size());
 
        //добавляем в начало очереди
        deque.addFirst(1);
        deque.addFirst(2);
        deque.addFirst(3);
        System.out.println(deque + "; size = " + deque.size());
 
        //возвращаем элемент из начала и конца очереди
        System.out.println(deque.peekFirst());
        System.out.println(deque.peekLast());
        System.out.println(deque + "; size = " + deque.size());
 
        //удаляем элемент из начала и конца очереди
        System.out.println(deque.pollFirst());
        System.out.println(deque.pollLast());
        System.out.println(deque + "; size = " + deque.size());
 
        //добавляем в начало очереди
        deque.push(10);
        System.out.println(deque + "; size = " + deque.size());
 
        //удаляем 2 элемента из начала очереди
        deque.pop();
        System.out.println(deque + "; size = " + deque.size());
 
        //добавляем элемент в начало очереди и в конец
        deque.offerFirst(5);
        deque.offerLast(7);
        System.out.println(deque + "; size = " + deque.size());
 
        System.out.println("\nTest iterator: ");
        Iterator<Integer> iterator = deque.iterator();
        while (iterator.hasNext()) {
            System.out.println("Value: " + iterator.next());
        }
 
        System.out.println("\nTest foreach: ");
        for (Integer value : deque) {
            System.out.println("Value: " + value);
        }
    }
}
 
class MyDeque<E> implements Iterable<E> {
    private static final int MAX_LENGTH = 10;
    private Node<E> first;
    private Node<E> last;
    private int size;
    
    public int size() {
        return this.size;
    }
    
    public void addFirst(E value) {
        offerFirst(value);
    }
    
    public void addLast(E value) {
       offerLast(value);
    }
    
    public E getFirst() {
        Node<E> element = this.first;
        if (element == null) {
            throw new NoSuchElementException();
        }
        return element.value;
    }
    
    public E getLast() {
        Node<E> element = this.last;
        if (element == null) {
            element = this.first;
            if (element == null) {
                throw new NoSuchElementException();
            }
        }
        return element.value;
    }
    
    public boolean offerFirst(E value) {
        boolean result;
        if (result = value != null && this.size < MAX_LENGTH) {
            Node<E> newNode = new Node<>(null, null, value);
            if (this.first != null) {
                newNode.next = this.first;
                this.first = this.first.prev = newNode;
                if (this.last == null) {
                    this.last = first.next;
                }
            } else {
                this.first = newNode;
            }
            this.size++;
        }
        return result;
    }
    
    public boolean offerLast(E value) {
        boolean result;
        if (result = value != null && this.size < MAX_LENGTH) {
            Node<E> newNode = new Node<>(null, null, value);
            if (this.last != null) {
                newNode.prev = this.last;
                this.last = last.next = newNode;
                this.size++;
            } else {
                if (this.first == null) {
                    result = offerFirst(value);
                } else {
                    this.last = this.first.next = newNode;
                    this.last.prev = this.first;
                    this.size++;
                }
            }
        }
        return result;
    }
    
    public E peekFirst() {
        Node<E> element = this.first;
        return element != null ? element.value : null;
    }
    
    public E peekLast() {
        Node<E> element = this.last;
        return element != null ? element.value : null;
    }
    
    public E pollFirst() {
        E value = null;
        if (this.first != null) {
            value = first.value;
            this.first = this.first.next;
            if (this.first != null) {
                first.prev = null;
            }
            this.size--;
        }
        return value;
    }
    
    public E pollLast() {
        E value = null;
        if (this.last != null) {
            value = this.last.value;
            if (this.last.prev != this.first) {
                this.last = this.last.prev;
                this.last.next = null;
            } else {
                this.last = null;
            }
            this.size--;
        } else {
            if (this.first != null) {
                value = pollFirst();
            }
        }
        return value;
    }
    
    public E pop() {
        E value = pollFirst();
        if (value == null) {
            throw new NoSuchElementException();
        }
        return value;
    }
    
    public void push(E value) {
       addFirst(value);
    }
    
    public E removeFirst() {
        E value = pollFirst();
        if (value == null) {
            throw new NoSuchElementException();
        }
        return value;
    }
    
    public String toString() {
        return Arrays.toString(toArray());
    }
    
    public Object[] toArray() {
        Object[] array = new Object[this.size];
        int index = 0;
        for (Node<E> x = this.first; x != null; x = x.next) {
            array[index++] = x.value;
        }
        return array;
    }
    
    public Iterator<E> iterator() {
        return new IteratorDeque<>(this.first);
    }
 
    private class Node<E> {
        private Node<E> prev;
        private Node<E> next;
        E value;
 
        public Node(Node<E> prev, Node<E> next, E value) {
            this.prev = prev;
            this.next = next;
            this.value = value;
        }
    }
 
    private class IteratorDeque<E> implements Iterator<E> {
        private Node<E> first;
 
        public IteratorDeque(Node<E> first) {
            this.first = first;
        }
        
        public boolean hasNext() {
            return this.first != null;
        }
        
        public E next() {
            if (!hasNext()) {
                throw new NoSuchElementException();
            }
            E value = this.first.value;
            this.first = first.next;
            return value;
        }
    }
}
1
Pablito
05.12.2017, 17:31
  #12

Не по теме:

this головного мозга :D

0
0 / 0 / 0
Регистрация: 04.12.2017
Сообщений: 9
05.12.2017, 20:57  [ТС] 13
Артем, это более чем достаточно, спасибо Вам)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2017, 20:57

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Разработать шаблонный класс Deque, который имеет следующие методы:
- addBegin(n) - добавление в начало дека - addEnd(n) - добавление в конец дека - T outBegin() -...

Хелп! родовой класс, который реализовывал бы очередь
Нужно разработать родовой класс, который реализовывал бы очередь. Не знаю даже приблизительно с...

Создать шаблонный класс-контейнер Array, который представляет собой массив, позволяющий хранить объекты заданного типа
Здравствуйте, подскажите пожалуйста, как правильно инициализировать данный класс. Новый год в...

Производный от класса «Человек» класс «Пользователь_библиотеки», содержащий следующие данные:
 номер читательского билета,  дата выдачи,  перечень прочитанных книг (динамический массив) —...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.