АкушерствоАнатомияАнестезиологияВакцинопрофилактикаВалеологияВетеринарияГигиенаЗаболеванияИммунологияКардиологияНеврологияНефрологияОнкологияОториноларингологияОфтальмологияПаразитологияПедиатрияПервая помощьПсихиатрияПульмонологияРеанимацияРевматологияСтоматологияТерапияТоксикологияТравматологияУрологияФармакологияФармацевтикаФизиотерапияФтизиатрияХирургияЭндокринологияЭпидемиология

Представление очереди в виде вектора

Прочитайте:
  1. Iii. Представление
  2. ИЗОБРАЗИТЕЛЬНОЕ ПРЕДСТАВЛЕНИЕ СТРУКТУРЫ ТРЕХ ВЕРХНИХ ШЕЙНЫХ ПОЗВОНКОВ
  3. Общее представление об обмене жиров. Регуляция липидного обмена.
  4. Поток вектора напряженности электростатического поля. Теорема Гаусса для электростатического поля в вакууме
  5. Представление информации
  6. Представление о диагнозе
  7. ПРЕДСТАВЛЕНИЕ О ДИАГНОЗЕ И ДИФФЕРЕНЦИАЛЬНОМ ДИАГНОЗЕ
  8. Представление о сахарном диабете типов I и II
  9. Представление об экономике до меркантилизма.

Очередь удобно представлять в виде циклического (кольцевого) вектора (в котором за последним элементом следует первый), с указателями начала и конца (рис. 3.2). Часть вектора занимает очередь, часть - свободное пространство. Указателем начала служит индекс первого из поступивших элементов, указателем конца - индекс первой свободной позиции в конце очереди (использование индекса последнего элемента несколько усложнит операции).

 


 

 

а) Индекс начала меньше б) Индекс начала больше

индекса конца индекса конца

Рис. 3.2. Хранение очереди в виде циклического вектора

(показаны два состояния)

Указатель начала увеличивается на одну позицию циклически (за N следует 0) при исключении элемента, указатель конца - при включении. У пустой очереди указатели равны друг другу и могут принимать любое значение от 0 до N. Чтобы отличать максимально заполненную очередь от пустой очереди, оставляют свободным хотя бы один элемент вектора. Поэтому у максимально заполненной очереди указатель конца отстает от указателя начала на одну позицию (рис. 3.3 г).

 

          b   c
      a   c   d
      b        
      c       a
          a   b

un=uk=2 un=1 uk=4 un=4 uk=2 un=3 uk=2

а) пустая б) un < uk в) un > uk г) полная

очередь очередь:a,b,c очередь:a,b,c очередь:a,b,c,d

Рис. 3.3. Примеры возможных состояний очереди

(un, uk - указатели начала и конца)

 

Пример 3.1. Описание данных для представления очереди циклическим вектором:

 

#define N 100 /* Максимальная длина очереди */

Тип-элемента q[N+1]; /* Отображающий вектор очереди */

int un; /* Указатель начала (индекс первого элемента) */

int uk; /* Указатель конца (индекс первого свободного

элемента в конце очереди) */

 

Пример 3.2. Инициализация (создание) пустой очереди:

un = uk = 0;

 

Пример 3.3. Исключение из очереди элемента и присваивание его величине x (обозначим эту операцию Очередь ==> x):

 

Тип-элемента x; /* Значение исключенного элемента */

...

if (un!= uk) /* В очереди есть элементы */

{ x = q[un]; /* Запоминание значения */

if (un < N) un++; else un=0; /* Исключение элемента */

}

else... /* Пустая очередь */

 

Пример 3.4. Включение в очередь элемента, равного x

(обозначим эту операцию Очередь<== x):

 

Тип-элемента x; /* Включаемое значение */

int i;

...

if (uk < N) i=uk+1; else i=0; /* Новое значение uk */

if (i!= un) /* Есть место в очереди */

{ q[uk] = x; /* Включение в очередь значения x */

uk = i;

}

else... /* Переполнение очереди */

 

При невозможности выполнения операции действия зависят от решаемой задачи. Обычно пустота очереди используется как условие окончания алгоритма, а переполнение означает ошибку.


Дата добавления: 2015-09-27 | Просмотры: 589 | Нарушение авторских прав







При использовании материала ссылка на сайт medlec.org обязательна! (0.004 сек.)