Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การใช้อาร์เรย์ของคิวใน C++


คิวคือโครงสร้างข้อมูลเชิงเส้นที่ลำดับการดำเนินการคือ FIFO (เข้าก่อนออกก่อน)

อาร์เรย์คือโครงสร้างข้อมูลที่มีองค์ประกอบของประเภทข้อมูลเดียวกัน ซึ่งจัดเก็บไว้ในตำแหน่งหน่วยความจำแบบต่อเนื่อง

ในคิวการดำเนินการแทรกและการลบที่ทำที่ปลายอีกด้านของคิว การนำไปใช้งานนั้นซับซ้อนกว่าเล็กน้อยเมื่อเทียบกับสแต็ก

ในการใช้งานอาร์เรย์ของคิว เราสร้างคิวอาร์เรย์ขนาด n โดยมีตัวแปรสองตัวบนและล่าง

ตอนนี้ในตอนแรกอาร์เรย์ว่างเปล่านั่นคือทั้งด้านบนและด้านล่างอยู่ที่ 0 ดัชนีของอาร์เรย์ และเมื่อเพิ่มองค์ประกอบลงในคิว (การแทรก) ค่าของตัวแปรท้ายจะเพิ่มขึ้น ค่าของส่วนท้ายสามารถเพิ่มขึ้นได้ถึง n นั่นคือความยาวสูงสุดของอาร์เรย์

เมื่อองค์ประกอบจะถูกลบออกจากคิว (การลบ) ค่าของตัวแปรบนจะเพิ่มขึ้น ค่าสูงสุดสามารถขึ้นไปถึงค่าสิ้นสุดได้

การดำเนินการตามคิว

เข้าคิว - เป็นการดำเนินการสำหรับการเพิ่มองค์ประกอบในคิว ก่อนเพิ่มองค์ประกอบในคิวเราจะตรวจสอบว่าคิวเต็มหรือไม่ เงื่อนไขการตรวจสอบสิ้นสุดลง หากน้อยกว่า n เราสามารถเก็บองค์ประกอบไว้ที่คิว[end] และเพิ่มขึ้นสิ้นสุดที่ 1.

เงื่อนไขล้นคือเมื่ออาร์เรย์เต็มเช่น end ==n.

ดีคิว - เป็นการดำเนินการลบองค์ประกอบของคิว ก่อนลบองค์ประกอบของคิวเราจะตรวจสอบว่าคิวว่างหรือไม่ เงื่อนไขในการตรวจสอบว่าคิวว่างหรือไม่ ตรวจสอบค่าบนและล่าง ถ้า top ==end กว่าอาร์เรย์ว่างเปล่า

หากมีองค์ประกอบ เราจะทำการดีคิวอาร์เรย์ โดยเลื่อนองค์ประกอบทั้งหมดทางด้านซ้ายของอาร์เรย์ไปทีละรายการ

ด้านหน้า - แยกองค์ประกอบแรกของคิวเช่น array[top] การดำเนินการนี้สามารถทำได้เมื่ออาร์เรย์ไม่ว่างเปล่าเท่านั้น

การแสดงผล - การดำเนินการนี้แสดงองค์ประกอบทั้งหมดของคิว คือข้ามคิว

อัลกอริทึม

ENQUEUE :
Step 1 : if (end == n), print : “OVERFLOW”. Exit
Step 2 : queue[end] = data and end++
DEQUEUE :
Step 1 : If (top == 0), print : “empty Queue”. Exit
Step 2 : shift all elements one position left. End-- ;

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
struct Queue {
   int top, end, n;
   int* queue;
   Queue(int c){
      top = end = 0;
      n = c;
      queue = new int;
   }
   ~Queue() { delete[] queue;
}
void Enqueue(int data){
   if (n == end) {
      printf("\nQueue is full\n");
      return;
   }
   else {
      queue[end] = data;
      end++;
   }
   return;
}
void Dequeue(){
   if (top == end) {
      printf("\nQueue is empty\n");
      return;
   }
   else {
      for (int i = 0; i < end - 1; i++) {
         queue[i] = queue[i + 1];
      }
      end--;
   }
   return;
}
void Display(){
   int i;
   if (top == end) {
      printf("\nQueue is Empty\n");
      return;
   }
   for (i = top; i < end; i++) {
      printf(" %d <-- ", queue[i]);
   }
   return;
}
void Front(){
   if (top == end) {
      printf("\nQueue is Empty\n");
      return;
   }
   printf("\nFront Element is: %d", queue[top]);
   return;
}
};
int main(void){
   Queue q(4);
   q.Display();
   q.Enqueue(12);
   q.Enqueue(89);
   q.Enqueue(65);
   q.Enqueue(34);
   q.Display();
   q.Enqueue(92);
   q.Display();
   q.Dequeue();
   q.Dequeue();
   q.Display();
   q.Front();
   return 0;
}

ผลลัพธ์

Queue is Empty
12 <-- 89 <-- 65 <-- 34 <--
Queue is full
12 <-- 89 <-- 65 <-- 34 <-- 65 <-- 34 <--
Front Element is: 65