C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

循環キュー-C++での挿入および削除操作


キューは、要素のコレクションを含む抽象的なデータ構造です。キューはFIFOメカニズムを実装します。つまり、最初に挿入された要素も最初に削除されます。

キュー杖は1つの線形データ構造です。ただし、配列を使用してキューを実装すると、問題が発生する可能性があります。挿入と削除を連続して行うと、前後の位置が変わる場合があります。その瞬間、キューには要素を挿入するスペースがないように見えます。空きスペースがあっても、論理的な問題により使用されません。この問題を解決するために、循環キューのデータ構造を使用します。

循環キューは、最後の位置が最初の位置に接続されて円を描くタイプのキューです。

アルゴリズム

insert(queue、key)-

begin
   if front = 0 and rear = n – 1, or front = rear + 1, then queue is full, and return
   otherwise
   if front = -1, then front = 0 and rear = 0
   else
      if rear = n – 1, then, rear = 0, else rear := rear + 1
   queue[rear] = key
end

削除(キュー)

begin
   if front = -1 then queue is empty, and return
   otherwise
   item := queue[front]
   if front = rear, then front and rear will be -1
   else
      if front = n – 1, then front := 0 else front := front + 1
end

#include <iostream>
using namespace std;
int cqueue[5];
int front = -1, rear = -1, n=5;
void insertCQ(int val) {
   if ((front == 0 && rear == n-1) || (front == rear+1)) {
      cout<<"Queue Overflow \n";
      return;
   }
   if (front == -1) {
      front = 0;
      rear = 0;
   }
   else {
      if (rear == n - 1)
         rear = 0;
      else
         rear = rear + 1;
   }
   cqueue[rear] = val ;
}
void deleteCQ() {
   if (front == -1) {
      cout<<"Queue Underflow\n";
      return ;
   }
   cout<<"Element deleted from queue is : "<<cqueue[front]<<endl;
   if (front == rear) {
      front = -1;
      rear = -1;
   }
   else {
      if (front == n - 1)
         front = 0;
      else
         front = front + 1;
   }
}
void displayCQ() {
   int f = front, r = rear;
   if (front == -1) {
      cout<<"Queue is empty"<<endl;
      return;
   }
   cout<<"Queue elements are :\n";
   if (f <= r) {
      while (f <= r){
         cout<<cqueue[f]<<" ";
         f++;
      }
   }
   else {
      while (f <= n - 1) {
         cout<<cqueue[f]<<" ";
         f++;
      }
      f = 0;
      while (f <= r) {
         cout<<cqueue[f]<<" ";
         f++;
      }
   }
   cout<<endl;
}
int main() {
   int ch, val;
   cout<<"1)Insert\n";
   cout<<"2)Delete\n";
   cout<<"3)Display\n";
   cout<<"4)Exit\n";
   do {
      cout<<"Enter choice : "<<endl;
      cin>>ch;
      switch(ch) {
         case 1:
            cout<<"Input for insertion: "<<endl;
            cin>>val;
            insertCQ(val);
         break;
         case 2:
            deleteCQ();
         break;
         case 3:
            displayCQ();
         break;
         case 4:
            cout<<"Exit\n";
         break;
            default: cout<<"Incorrect!\n";
      }
   } while(ch != 4);
      return 0;
}

出力

1)Insert
2)Delete
3)Display
4)Exit
Enter choice :
1
Input for insertion:
10
Enter choice :
1
Input for insertion:
20
Enter choice :
1
Input for insertion:
30
Enter choice :
1
Input for insertion:
40
Enter choice :
1
Input for insertion:
50
Enter choice :
3
Queue elements are :
10 20 30 40 50
Enter choice :
2
Element deleted from queue is : 10
Enter choice :
2
Element deleted from queue is : 20
Enter choice :
3
Queue elements are :
30 40 50
Enter choice :
4
Exit

  1. C ++のdelete()とfree()

    delete() 削除演算子は、メモリの割り当てを解除するために使用されます。ユーザーには、この削除演算子によって作成されたポインター変数の割り当てを解除する権限があります。 C++言語での削除演算子の構文は次のとおりです delete pointer_variable; 割り当てられたメモリのブロックを削除する構文は次のとおりです。 delete[ ] pointer_variable; これは、C++言語での削除演算子の例です 例 #include <iostream> using namespace std; int main () {    in

  2. リスト内のPythonフロントおよびリアレンジの削除?

    リストスライスの使用 このアプローチでは、リストの前面と背面の両方からスライスを使用します。結果は新しいリストに保存されます。スライスする要素の数は可変にすることができます。 例 listA = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] # Given list print("Given list : " ,listA) # No of elements to be deleted # from front an