Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Очередь   Найти похожие ветки 

 
default ©   (2006-10-09 15:21) [0]

во всех источниках в которых написано про реализацию очереди оперируют понятиями голова очереди и хвост очереди
это порождает проблему состоящую в том, что одним и тем же значениям головы и хвоста очереди может соответствовать как пустая очередь так и полностью заполненная
обо всём этом можно прочитать по ссылке
http://www.webfile.ru/1142965
но если оперировать понятиями голова очереди и длина очереди(что вполне ествественно) проблема неоднозначности не возникает
почему не используют нигде в литературе этот подход и говорят о высосанной из пальца проблеме?
вот пример(по аналогии с примером приведённом по ссылке)

type
QUEUE = record
 elements: array[1..maxlength] of elementtype;
 front, length: integer;
end;

function addone ( i: integer ): integer;
begin
 return((i mod maxlength) + 1)
end; { addone }

procedure MAKENULL ( var Q: QUEUE );
begin
 Q.front:= 1;
 Q.length:= 0
end;

function FRONT ( var Q: QUEUE );
begin
 if Q.length = 0 then
  error("Очередь пустая")
 else
  return(Q.elements[Q.front])
end;

procedure ENQUEUE ( x: elementtype; var Q: QUEUE );
begin
 if Q.length = maxlength then
  error("Очередь полная")
 else begin
  Q.elements[addone(Q.front+Q.length-1)]:= x;
  Inc(Q.length)
 end;
end;

procedure DEQUEUE ( var Q: QUEUE );
begin
 if Q.length = 0 then
  error("Очередь пустая")
 else
  Q.front:= addone(Q.front)
end;


 
Сергей М. ©   (2006-10-09 15:28) [1]


> голова очереди и хвост очереди
> это порождает проблему


Это не порождает никаких проблем.


 
default ©   (2006-10-09 15:29) [2]

Сергей М. ©   (09.10.06 15:28) [1]
прочитайте по ссылке сначала


 
Сергей М. ©   (2006-10-09 15:31) [3]

зачем читать то что высосано из пальца ?


 
Sandman29 ©   (2006-10-09 15:38) [4]

default ©   (09.10.06 15:21)  

Там очередь реализована не массивом, а списком (динамической структурой). Длина очереди не поможет быстро перейти к ее концу. Совсем не поможет.


 
default ©   (2006-10-09 15:39) [5]

Сергей М. ©   (09.10.06 15:31) [3]
то есть Вы мне на слово верите не хотите для начала понять в чём там дело прочитав по ссылке?:)


 
default ©   (2006-10-09 15:39) [6]

Sandman29 ©   (09.10.06 15:38) [4]
массивом там реализована, читайте внимательнее!!!


 
Сергей М. ©   (2006-10-09 15:41) [7]


> default ©   (09.10.06 15:39) [5]
>
> Сергей М. ©   (09.10.06 15:31) [3]
> не хотите


Не хочу.
Потому что никакой проблемы не существует.


 
default ©   (2006-10-09 15:42) [8]

Sandman29 ©   (09.10.06 15:38) [4]
не будем пока трогать динамические очереди, будем смотреть что написано по ссылке и что написал я, пока речь только об этом
хотя с динамическими очередями никаких проблем нет...всё то же самое почти что...


 
Игорь Шевченко ©   (2006-10-09 15:46) [9]

default ©   (09.10.06 15:21)

Источник в студию.


 
default ©   (2006-10-09 15:48) [10]

"Структуры данных и алгоритмы"
Ахо, Хопкрофт, Ульман


 
Sandman29 ©   (2006-10-09 15:48) [11]

default ©   (09.10.06 15:42) [8]

Я загрузил, почитал первые 2 странички, наткнулся на картинку с динамическими очередями. Разбирать глюки реализации динамической очереди статическим массивом у меня нет желания :)


 
default ©   (2006-10-09 15:51) [12]

Sandman29 ©   (09.10.06 15:48) [11]
нету там никаких глюков
от того примера к динамическим очередям перейти очень просто


 
sniknik ©   (2006-10-09 15:57) [13]

> одним и тем же значениям головы и хвоста очереди может соответствовать как пустая очередь так и полностью заполненная
такого не бывает, буфер клавиатуры в dos был таким образом реализован, и ничего неоднозначного там не было, одинаковые значения головы и хвоста означали чтото одно (пустоту или заполненность), второе состояние характеризовалось тем что значения рядом, т.е. "хвост" прежде чем сдвигаться проверял "а не на ту же позицию сдвиг на котором голова?", если на ту то переполнение.
(могу ошибиться, возможно было наоборот, но там все было очень логично и оптимально для работы... надо смотреть если захочется подробностей)


 
default ©   (2006-10-09 16:04) [14]

sniknik ©   (09.10.06 15:57) [13]
всё-таки хотелось бы чтобы Вы сначала по ссылке прочитали
по ссылке проблема неоднозначности решается использованием для элементов очереди maxlength-1 элемент массива
(вводить дополнительные переменные не стали)
вообщем там всё написано это...


 
MBo ©   (2006-10-09 16:05) [15]

>но если оперировать понятиями голова очереди и длина очереди
В абстрактных структурах данных - очередь, стек, список - нет понятия "длина" (хотя она и может быть введена в конкретных реализациях), что позволяет более широко применять обобщенные методы (пример, может и глупый - файл на чтение с Eof как список)

Состояние очереди Empty устанавливается изначально и при операциях извлечения, а Full - только при операции добавления, так что проблем нет.


 
default ©   (2006-10-09 16:15) [16]

MBo ©   (09.10.06 16:05) [15]

> Состояние очереди Empty устанавливается изначально и при
> операциях извлечения, а Full - только при операции добавления,
>  так что проблем нет.

проблема есть, по ссылке посмотрите?

> В абстрактных структурах данных - очередь, стек, список
> - нет понятия "длина" (хотя она и может быть введена в конкретных
> реализациях), что позволяет более широко применять обобщенные
> методы (пример, может и глупый - файл на чтение с Eof как
> список)

в теории может быть это имеет смысл(не знаю), но при конкретной реализации очереди переменные типа головы и хвоста очереди это ведь вещи относящиеся к внутренней реализации и ничто не мешает ввести длину и голову вместо головы и хвоста


 
MBo ©   (2006-10-09 17:53) [17]

ОК, не сразу тебя понял.
Использование Tail (Rear), думаю, идет по привычке, по аналогии со списками, а твоя реализация для случая массивов кажется вполне разумной.


 
default ©   (2006-10-09 18:39) [18]

MBo ©   (09.10.06 17:53) [17]
вот я тоже кроме привычки причины не вижу
в .NET классе Queue, есть внутренние переменные голова, хвост, размер(то же что и длина очереди)
подумал, что без переменной хвост код был бы менее наглядным/быстрым
посмотрел места где используется переменная хвост - их оказалось очень немного и там можно смело обойтись головой/длиной


 
default ©   (2006-10-09 18:44) [19]

вернее не так

> посмотрел места где используется переменная хвост - их оказалось
> очень немного и там можно смело обойтись головой/длиной

-->
мест, где использование голова/длина вместо хвоста идёт с потерей наглядности мало, 2-3



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.042 c
5-1141901266
mss
2006-03-09 13:47
2006.10.29
Как заменить


1-1158512916
Павел И
2006-09-17 21:08
2006.10.29
Проблемы с выделением памяти в потоках


2-1161066498
Bless
2006-10-17 10:28
2006.10.29
Два класса, ссылающиеся друг на друга, в разных модулях. Можно?


2-1160719741
Alex_C
2006-10-13 10:09
2006.10.29
Почему мерцает TMemo


15-1160046641
saNat
2006-10-05 15:10
2006.10.29
Требуется помощь в настройке сети





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский