logo

Deque (lub kolejka dwustronna)

W tym artykule omówimy kolejkę dwustronną lub deque. Najpierw powinniśmy zobaczyć krótki opis kolejki.

Co to jest kolejka?

Kolejka to struktura danych, w której wszystko, co pojawi się jako pierwsze, wyjdzie jako pierwsze, zgodnie z polityką FIFO (pierwszy na wejściu, pierwszy na wyjściu). Wstawienie do kolejki odbywa się z jednego końca, tzw tył albo ogon, podczas gdy usuwanie odbywa się z innego końca, znanego jako przód albo głowa z kolejki.

operator Pythona //

Prawdziwym przykładem kolejki jest kolejka po bilety przed salą kinową, gdzie osoba wchodząca do kolejki jako pierwsza otrzymuje bilet, a osoba wchodząca w kolejce jako ostatnia otrzymuje bilet na końcu.

Co to jest Deque (lub kolejka dwustronna)

Deque oznacza kolejkę z podwójnym zakończeniem. Deque to liniowa struktura danych, w której operacje wstawiania i usuwania są wykonywane z obu końców. Można powiedzieć, że deque jest uogólnioną wersją kolejki.

Chociaż wstawianie i usuwanie w deque można wykonać na obu końcach, nie jest to zgodne z zasadą FIFO. Reprezentacja deque jest podana w następujący sposób -

Deque (lub kolejka dwustronna)

Rodzaje deque

Istnieją dwa rodzaje deque -

  • Kolejka z ograniczeniami wejściowymi
  • Kolejka z ograniczeniami wyjściowymi

Kolejka z ograniczeniami wejściowymi

W kolejce z ograniczeniami wejściowymi operację wstawiania można wykonać tylko na jednym końcu, natomiast usuwanie można wykonać na obu końcach.

Deque (lub kolejka dwustronna)

Kolejka z ograniczeniami wyjściowymi

W kolejce z ograniczeniami wyjściowymi operację usuwania można wykonać tylko na jednym końcu, natomiast wstawianie można wykonać na obu końcach.

Deque (lub kolejka dwustronna)

Operacje wykonywane na deque

Na deque można zastosować następujące operacje:

  • Wstawka z przodu
  • Wstawka z tyłu
  • Usunięcie z przodu
  • Usunięcie z tyłu

Oprócz operacji wymienionych powyżej możemy również wykonywać operacje podglądu w deque. Dzięki operacji podglądu możemy uzyskać przednie i tylne elementy deque. Zatem oprócz powyższych operacji w deque obsługiwane są również następujące operacje -

przełącz Javę
  • Zdobądź przedni przedmiot z deque
  • Zdobądź tylny przedmiot z deque
  • Sprawdź, czy deque jest pełny, czy nie
  • Sprawdza, czy deque jest pusta, czy nie

Teraz przyjrzyjmy się operacji wykonywanej na deque na przykładzie.

Wkładanie z przodu

W tej operacji element jest wstawiany z początku kolejki. Przed wykonaniem operacji musimy najpierw sprawdzić, czy kolejka jest pełna, czy nie. Jeśli kolejka nie jest pełna, element można wstawić od frontu, korzystając z poniższych warunków -

algebra zbiorów
  • Jeśli kolejka jest pusta, zarówno tył, jak i przód są inicjowane wartością 0. Teraz oba będą wskazywać na pierwszy element.
  • W przeciwnym razie sprawdź położenie przodu, jeśli przód jest mniejszy niż 1 (front<1), then reinitialize it by front = n - 1 , tj. ostatni indeks tablicy.
Deque (lub kolejka dwustronna)

Wkładanie z tyłu

W tej operacji element wstawiany jest z końca kolejki. Przed wykonaniem operacji musimy najpierw ponownie sprawdzić, czy kolejka jest pełna, czy nie. Jeśli kolejka nie jest pełna, element można wstawić od tyłu, korzystając z poniższych warunków -

  • Jeśli kolejka jest pusta, zarówno tył, jak i przód są inicjowane wartością 0. Teraz oba będą wskazywać na pierwszy element.
  • W przeciwnym razie zwiększ tył o 1. Jeśli tył ma ostatni indeks (lub rozmiar - 1), to zamiast zwiększać go o 1, musimy go wyrównać do 0.
Deque (lub kolejka dwustronna)

Usunięcie z przodu

W tej operacji element jest usuwany z początku kolejki. Przed wykonaniem operacji musimy najpierw sprawdzić, czy kolejka jest pusta, czy nie.

Jeśli kolejka jest pusta, tj. przód = -1, jest to warunek niedopełnienia i nie możemy wykonać usunięcia. Jeśli kolejka nie jest pełna, element można wstawić od frontu, korzystając z poniższych warunków -

Jeśli deque ma tylko jeden element, ustaw tył = -1 i przód = -1.

W przeciwnym razie, jeśli przód jest na końcu (to znaczy przód = rozmiar - 1), ustaw przód = 0.

typy komputerów

W przeciwnym razie zwiększ przód o 1 (tj. przód = przód + 1).

Deque (lub kolejka dwustronna)

Usunięcie z tyłu

W tej operacji element jest usuwany z końca kolejki. Przed wykonaniem operacji musimy najpierw sprawdzić, czy kolejka jest pusta, czy nie.

Jeśli kolejka jest pusta, tj. przód = -1, jest to warunek niedopełnienia i nie możemy wykonać usunięcia.

Jeśli deque ma tylko jeden element, ustaw tył = -1 i przód = -1.

Jeśli tył = 0 (tył jest z przodu), to ustaw tył = n - 1.

W przeciwnym razie zmniejsz tył o 1 (lub tył = tył -1).

Deque (lub kolejka dwustronna)

Sprawdź puste

Ta operacja jest wykonywana w celu sprawdzenia, czy deque jest pusta, czy nie. Jeśli front = -1, oznacza to, że deque jest pusta.

Sprawdź pełne

Ta operacja jest wykonywana w celu sprawdzenia, czy deque jest pełna, czy nie. Jeśli przód = tył + 1 lub przód = 0 i tył = n - 1, oznacza to, że deque jest pełne.

Złożoność czasowa wszystkich powyższych operacji deque wynosi O(1), tj. jest stała.

Zastosowania deque

  • Deque może być używany zarówno jako stos, jak i kolejka, ponieważ obsługuje obie operacje.
  • Deque może służyć jako sprawdzanie palindromu, co oznacza, że ​​jeśli odczytamy ciąg z obu końców, będzie on taki sam.

Implementacja deque

Przyjrzyjmy się teraz implementacji deque w języku programowania C.

znak na int w Javie
 #include #define size 5 int deque[size]; int f = -1, r = -1; // insert_front function will insert the value from the front void insert_front(int x) { if((f==0 &amp;&amp; r==size-1) || (f==r+1)) { printf(&apos;Overflow&apos;); } else if((f==-1) &amp;&amp; (r==-1)) { f=r=0; deque[f]=x; } else if(f==0) { f=size-1; deque[f]=x; } else { f=f-1; deque[f]=x; } } // insert_rear function will insert the value from the rear void insert_rear(int x) { if((f==0 &amp;&amp; r==size-1) || (f==r+1)) { printf(&apos;Overflow&apos;); } else if((f==-1) &amp;&amp; (r==-1)) { r=0; deque[r]=x; } else if(r==size-1) { r=0; deque[r]=x; } else { r++; deque[r]=x; } } // display function prints all the value of deque. void display() { int i=f; printf(&apos;
Elements in a deque are: &apos;); while(i!=r) { printf(&apos;%d &apos;,deque[i]); i=(i+1)%size; } printf(&apos;%d&apos;,deque[r]); } // getfront function retrieves the first value of the deque. void getfront() { if((f==-1) &amp;&amp; (r==-1)) { printf(&apos;Deque is empty&apos;); } else { printf(&apos;
The value of the element at front is: %d&apos;, deque[f]); } } // getrear function retrieves the last value of the deque. void getrear() { if((f==-1) &amp;&amp; (r==-1)) { printf(&apos;Deque is empty&apos;); } else { printf(&apos;
The value of the element at rear is %d&apos;, deque[r]); } } // delete_front() function deletes the element from the front void delete_front() { if((f==-1) &amp;&amp; (r==-1)) { printf(&apos;Deque is empty&apos;); } else if(f==r) { printf(&apos;
The deleted element is %d&apos;, deque[f]); f=-1; r=-1; } else if(f==(size-1)) { printf(&apos;
The deleted element is %d&apos;, deque[f]); f=0; } else { printf(&apos;
The deleted element is %d&apos;, deque[f]); f=f+1; } } // delete_rear() function deletes the element from the rear void delete_rear() { if((f==-1) &amp;&amp; (r==-1)) { printf(&apos;Deque is empty&apos;); } else if(f==r) { printf(&apos;
The deleted element is %d&apos;, deque[r]); f=-1; r=-1; } else if(r==0) { printf(&apos;
The deleted element is %d&apos;, deque[r]); r=size-1; } else { printf(&apos;
The deleted element is %d&apos;, deque[r]); r=r-1; } } int main() { insert_front(20); insert_front(10); insert_rear(30); insert_rear(50); insert_rear(80); display(); // Calling the display function to retrieve the values of deque getfront(); // Retrieve the value at front-end getrear(); // Retrieve the value at rear-end delete_front(); delete_rear(); display(); // calling display function to retrieve values after deletion return 0; } 

Wyjście:

Deque (lub kolejka dwustronna)

To tyle na temat artykułu. Mamy nadzieję, że artykuł będzie dla Ciebie pomocny i pouczający.