29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
||||||
1 | ||||||
Очередь FIFO21.05.2012, 19:37. Показов 8370. Ответов 11
Метки нет (Все метки)
Добрый вечер. Задали написать реализацию очереди FIFO. Загвоздка в том, как передать указание на следующий элемент при его добавлении.
Недавно писал FILO, там было так:
0
|
21.05.2012, 19:37 | |
Ответы с готовыми решениями:
11
Очередь FIFO Очередь FIFO Динамическая Очередь (FIFO). Двумерная очередь (FIFO) |
-19 / 6 / 0
Регистрация: 09.10.2010
Сообщений: 41
|
|
21.05.2012, 19:40 | 2 |
это структура типа очередь. Хранишь начало, и конец. Данные забираешь сначала. Записываешь в конец
0
|
29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
||||||
21.05.2012, 20:55 [ТС] | 3 | |||||
Я в ступоре, как сделать функцию добавления в очередь((
Добавлено через 11 минут при первой записи я запоминаю first, при второй - end, а потом при добавлении любого элемента end будет указывать на него, а next - на предыдущий? Или как? Добавлено через 49 минут Ребят, помогите пожалуйста, очень надо до завтра...
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||||||
21.05.2012, 20:56 | 4 | |||||
вот топорный вариант:
имея указатель на начало списка вы всегда можете в цикле добраться до его последнего элемента (до тех пор пока item->next не станет равным нулю). вот у вас есть последний итем.
0
|
29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
|
21.05.2012, 21:02 [ТС] | 5 |
DU, я не понимаю(
Чего-то туго очень все... Можно целиком работающий код?
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
21.05.2012, 21:07 | 6 |
вы спрашивайте, не стесняйтесь. что именно вам не понятно?
0
|
29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
|
21.05.2012, 21:13 [ТС] | 7 |
мне не понятна Ваша реализация функций добавления элемента и удаления.
Вот как я понимаю очередь: записываем первый элемент - он first, на следующий, который мы запишем, будет ссылка next от того, который first...и так далее. нет?
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||||||
21.05.2012, 21:26 | 8 | |||||
я привел несколько упрощенный вариант, которые не рассматривает случай, когда список пустой.
предположим в списке десяток объектов. чтобы добавить в конец списка элемент, нужно: 1 создать новый 2 взять текущий последний. 3 к последнему присоединить новый. т.е.
удаление последнего тоже вроде простое берем предпоследний итем. по нему находим последний. удаляем последний (delete). помечаем предпоследний последним.
0
|
29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
|
21.05.2012, 21:30 [ТС] | 9 |
Да. Это понятно.
А как реализовать, танцуя от того, что изначально очередь пустая? Можете помочь?
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||||||
21.05.2012, 21:41 | 10 | |||||
ну все же просто. если getLastItem вернула 0, значит список пустой. значит у него еще нет головы (первого итема.). значит новый созданный и будет его головой. т.е что-нибудь типа:
для удаления последнего элемента из списка действия такие же если предпоследний элемент не вернулся, значит список или пустой или состоит из одного элемента. проверяем firstItem. если оно нуль - значит список пустой и ничего из него удалить не получится. если же firstItem не ноль - то он является последним в списке. его нужно задестроить и указатель firstItem приравнять к нулю.
0
|
29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
|
21.05.2012, 22:20 [ТС] | 11 |
Хорошо, попробую реализовать. Осталось реализовать вывод на печать...
Добавлено через 13 минут DU, я не могу реализовать Ваш метод. У Вас не рабочего кода? Добавлено через 23 минуты Ребят выручите пожалуйста. Завтра сдавать, а реализовать не могу. Очень нужно
0
|
0 / 0 / 0
Регистрация: 19.06.2012
Сообщений: 22
|
|
19.06.2012, 19:45 | 12 |
вот код посоны
#pragma once; ///////// LIFO class Lifo { int *stack; int size; int *p; public: Lifo(int size=10):size(size) { stack=new int [size]; p=stack; } bool isEmpty() { return stack==p; } bool isFull() { return stack+size==p; } bool push (int value) { if(isFull()) return false; *p=value; ++p; return true; } int pop () { if(isEmpty()) return 0; --p; return *p; } ~Lifo() { delete[]stack; } void SetEmpty() { p=stack; } };
0
|
19.06.2012, 19:45 | |
19.06.2012, 19:45 | |
Помогаю со студенческими работами здесь
12
Очередь целых чисел (структура FIFO) FIFO Очередь, как с ней разобратся?? Изменить удаление и добавление элементов в очередь по правилу FIFO. Описать класс, реализующий очередь целых чисел типа FIFO. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |