Препоръчано, 2024

Избор На Редактора

Разлика между линейната опашка и кръговата опашка

Една проста линейна опашка може да бъде реализирана по три начина, сред които един от типовете е кръгова опашка. Разликата между линейна и кръгова опашка се крие в структурните и ефективни фактори. Съществената разлика между линейната опашка и кръговата опашка е, че линейната опашка консумира повече пространство от кръговата опашка, докато кръговата опашка е създадена, за да ограничи загубата на памет на линейната опашка.

Опашката може да бъде описана като непримитивна линейна структура на данни следва реда FIFO, в който елементите от данни се вмъкват от единия край (задния край) и се изтриват от другия край (предния край). Другите вариации на опашката са кръговата опашка, двойно завършваща опашка и приоритетна опашка.

Сравнителна таблица

Основа за сравнениеЛинейна опашкаКръгла опашка
ОсновенОрганизира елементите от данни и инструкциите в последователна последователност една след друга.Подрежда данните в кръговия модел, където последният елемент е свързан с първия елемент.
Ред на изпълнение на задачата
Задачите се изпълняват по реда, по който са били поставени преди (FIFO).Редът за изпълнение на дадена задача може да се промени.
Вмъкване и изтриване
Новият елемент се добавя от задния край и се сваля отпред.Вмъкването и изтриването може да се направи на всяка позиция.
производителност
Неефикасен
Работи по-добре от линейната опашка.

Дефиниция на линейна опашка

Линейната опашка е рационално първи в първия изреден списък. Тя е така наречена линейна, защото прилича на права линия, където елементите са разположени една след друга. Той съдържа хомогенна колекция от елементи, в които се добавят нови елементи в единия край и се изтриват от друг край. Концепцията на опашката може да бъде разбрана чрез примера на опашката от аудиторията, която чака пред билето за билети, за да получи билет за театър. В тази опашка лицето се присъединява към задния край на опашката, за да вземе билета и билетът се издава в предния край на опашката.

В опашката се изпълняват няколко операции

  • Първо, опашката се инициализира до нула (т.е. празна).
  • Определете дали опашката е празна или не.
  • Определете дали опашката е пълна или не.
  • Вмъкване на новия елемент от задния край (Enqueue).
  • Изтриване на елемента от предния край (Dequeue).

Опашката може да бъде изпълнена по два начина

  • Статично (с използване на масиви)
  • Динамично (с помощта на указатели)

Ограничението на линейната опашка е, че създава сценарий, в който не може да се добавя нов елемент в опашката, дори ако опашката съдържа празни пространства. Тази ситуация е илюстрирана на фигурата, дадена по-долу. Тук задната част сочи към последния индекс, докато всички полета са празни, не може да се добави нов елемент.

Дефиниция на кръгова опашка

Кръглата опашка е вариант на линейната опашка, която ефективно преодолява ограничаването на линейната опашка. В кръгова опашка новият елемент се добавя в първата позиция на опашката, ако последната е заета и пространството е налично. Когато става въпрос за линейна опашка, вмъкването може да се извърши само от задния край и изтриването от предния край. В пълна опашка след извършване на поредица от последователни изтривания в опашката възниква определена ситуация, в която не може да бъде добавен нов елемент, дори ако наличното пространство, тъй като условието за подпълване (Rear = max - 1) все още съществува.

Кръглата опашка свързва двата края чрез показалеца, където първият елемент идва след последния елемент. Той също така следи отпред и отзад, като прилага някаква допълнителна логика, така че да може да проследи елементите, които трябва да бъдат вмъкнати и изтрити. С това, кръговата опашка не генерира условие за преливане, докато опашката не е пълна в действителната.

Някои условия, следвани от кръговата опашка:

  • Предната част трябва да сочи към първия елемент.
  • Опашката ще бъде празна, ако Front = Rear.
  • Когато се добави нов елемент, опашката се увеличава с стойност one (Rear = Rear + 1).
  • Когато елемент се изтрива от опашката, фронтът се увеличава с един (Front = Front + 1).

Ключови разлики между линейната опашка и кръговата опашка

  1. Линейната опашка е подреден списък, в който елементите от данни са организирани в последователен ред. Обратно, кръговата опашка съхранява данните по кръгова форма.
  2. Линейната опашка следва реда FIFO за изпълнение на задачата (елементът, добавен в първата позиция, ще бъде изтрит в първата позиция). Обратно, в кръговата опашка редът на операциите, изпълнявани върху даден елемент, може да се промени.
  3. Вмъкването и изтриването на елементите се фиксира в линейна опашка, т.е. добавяне от задния край и изтриване от предния край. От друга страна, кръговата опашка е в състояние да вмъкне и изтрие елемента от всяка точка, докато не е незает.
  4. Линейната опашка губи място в паметта, докато кръговата опашка прави ефективното използване на пространството.

Изпълнение на линейната опашка

Даденият по-долу алгоритъм илюстрира добавянето на елементи в опашката:
Опашката се нуждае от три променливи данни, включващи един масив за съхраняване на опашката и други за съхраняване на предната и задната начална позиция, която е -1.

 insert (item, queue, n, rear) {if (отзад == n) и след това отпечатайте "queue overflow"; друго (отзад = зад + 1; опашка [отзад] = елемент; }} 

Даденият по-долу алгоритъм илюстрира изтриването на елементи в опашката:

 delete_circular (елемент, опашка, заден, преден) {if (отзад == отпред) и след това отпечатайте "queue underflow"; иначе {front = front + 1; item = queue [отпред]; }} 

Изпълнение на кръговата опашка

Алгоритъм за тълкуване на добавянето на елемента в кръговата опашка:

 insert_circular (позиция, опашка, задна, предна) {задна = (задна + 1) mod n; ако (отпред == отзад) след това печат "опашката е пълна"; else {опашка [отзад] = елемент; }} 

Алгоритъмът обяснява изтриването на елемента в кръговата опашка:

 delete_circular (елемент, опашка, заден, преден) {if (отпред == отзад) след това отпечатайте ("опашката е празна"); иначе {front = front + 1; item = queue [отпред]; }} 

заключение

Линейната опашка е неефективна в някои случаи, когато се изисква елементите да преминат към свободните пространства, за да се извърши операция по вмъкване. Това е причината да губи мястото за съхранение, докато кръговата опашка прави правилното използване на пространството за съхранение, тъй като елементите се добавят на всяка позиция, ако съществува празно пространство.

Top