При вивченні попереднього прикладу програми планування зустрічей, ймовірно, вам в голову міг прийти наступний спосіб її поліпшення: при досягненні кінця масиву, в якому зберігається чергу, можна не зупиняти програму, а встановлювати індекси вставки (spos) і вилучення (rpos) так, щоб вони вказували на початок масиву. Це дозволить поміщати в чергу будь-яку кількість елементів за умови їх своєчасного вилучення. Така реалізація черги називається циклічною чергою. оскільки масив використовується так, ніби він є не лінійний список, а кільце.
Щоб організувати в програмі-планувальнику циклічну чергу, функції qstore () і qretrieve () необхідно переписати таким чином:
У даній версії програми чергу переповнюється, коли індекс записи знаходиться безпосередньо перед індексом вилучення; в іншому випадку ще є місце для вставки події. Черга порожня, коли rpos дорівнює spos.
Ймовірно, найчастіше циклічні черги застосовуються в операційних системах для зберігання інформації, яка обліковується і записується в дискові файли або на консоль. Циклічні черги також використовуються в програмах обробки реального часу, які повинні продовжувати обробляти інформацію, буферізіруя при цьому запити на введення / висновок. Багато текстові процесори використовують цей прийом під час переформатування абзацу або вирівнювання рядка. Введений текст не відображається на екрані до закінчення процесу. Для цього прикладна програма повинна перевіряти натискання клавіш під час виконання іншого завдання. Якщо будь-яка клавіша була натиснута, введений символ швидко поміщається в чергу, і процес триває. Після його завершення символи витягуються з черги.
Щоб відчути на практиці дане застосування циклічних черг, давайте розглянемо просту програму, що складається з двох процесів. Перший процес в програмі виводить на екран числа від 1 до 32 000. Другий процес поміщає символи в чергу в міру їх введення, що не відображаючи їх на екрані, поки користувач не натисне
Щоб програма працювала, як описано вище, в ній необхідно використовувати дві функції, не визначені в стандартній мові С: _kbhit () і _getch (). Функція _kbhit () повертає значення ІСТИНА, якщо на клавіатурі була натиснута клавіша; в іншому випадку вона повертає БРЕХНЯ. Функція _getch () зчитує введений символ, але не дублює його на екрані. У стандарті мови С не передбачені функції для перевірки стану клавіатури або зчитування символів без відображення на екрані, оскільки ці функції залежать від операційної системи. Проте, в більшості бібліотек компіляторів є функції, які виконують ці завдання. Наведена тут невелика програма компілюється за допомогою компілятора Microsoft.