C++ میں سرکلر بفر کی مثالیں۔

C My Srklr Bfr Ky Mthaly



سرکلر بفر یا سرکلر قطار عام قطار کا جدید ورژن ہے جہاں آخری انڈیکس اور ٹیل انڈیکس ایک سرکلر ڈھانچے میں جڑے ہوتے ہیں۔ C++ میں سرکلر بفر دو طریقوں کی پیروی کرتا ہے: enqueue() اور dequeue(). ہم ان طریقوں کی بنیاد پر سرکلر بفر یا سرکلر قطار آپریشن کرتے ہیں۔

  • enqueue() طریقہ یہ دیکھنے کے لیے چیک کرتا ہے کہ آیا بفر بھرا ہوا ہے۔ بصورت دیگر، تصدیق کریں کہ اختتامی اشاریہ آخری ہے۔ اگر ایسا ہے تو، ٹیل ویلیو کو 0 پر سیٹ کریں۔ اگر نہیں، تو اس انڈیکس کی قدر سے ٹیل ویلیو میں اضافہ کریں۔
  • dequeue() فنکشن سرکلر قطار میں سامنے والے انڈیکس سے قدر لیتا ہے۔ اگر قطار خالی ہے تو، ایک پیغام اس خالی قطار کو ظاہر کرے گا۔ بصورت دیگر، یہ آخری قدر حاصل کرتا ہے اور اسے قطار سے حذف کر دیتا ہے۔

C++ میں سرکلر بفر کو لاگو کرنے کا پروگرام

مذکورہ دو طریقوں کے بعد، ہم C++ میں سرکلر بفر کو نافذ کرتے ہیں۔ آئیے C++ میں سرکلر قطار کے نفاذ کے تمام مراحل پر غور کریں۔







# شامل کریں

نام کی جگہ کا استعمال کرتے ہوئے std؛

ساخت MyQueue

{

int سر , دم ;

int Qsize؛



int * NewArr;



مائی کیو ( int نمبر ) {



سر = دم = -1 ;

Qsize = سائز؛

NewArr = new int [ s ] ;

}



خالی قطار ( int val ) ;



int deQueue ( ) ;



باطل شو قطار ( ) ;



} ;



کوڈ کے ساتھ شروع کرتے ہوئے، ہم سب سے پہلے ہیڈ اور ٹیل کے متغیرات کو شروع کرنے کے لیے 'MyQueue' ڈھانچہ بناتے ہیں۔ ہیڈ متغیر سامنے کے اشاریوں کی نمائندگی کرتا ہے اور دم ایک صف کے پیچھے والے اشاریوں کی نمائندگی کرتا ہے۔ اس کے بعد، سرکلر قطار کا سائز، متغیر 'Qsize' کے ذریعہ بیان کیا جاتا ہے۔



پھر، ہم 'NewArr' کی متحرک طور پر مختص کی گئی صف کی وضاحت کرتے ہیں جو سرکلر قطار کی قدروں کو محفوظ کرتا ہے۔ اگلا، ہم MyQueue() کو کہتے ہیں جو ایک کنسٹرکٹر ہے اور سرکلر قطار کے سائز کے لیے 'sz' پیرامیٹر پاس کرتے ہیں۔ MyQueue() کنسٹرکٹر کے اندر، ہم ہیڈ اور ٹیل پوائنٹرز کو '-1' ویلیو تفویض کرتے ہیں۔ یہ منفی قدر بتاتی ہے کہ قطار اب خالی ہے۔ آگے بڑھتے ہوئے، ہم 'sz' قدر تفویض کرتے ہیں جو سرکلر قطار کے سائز کی نمائندگی کرتی ہے۔ 'NewArr' سرکلر قطار کو ایک نئے مطلوبہ الفاظ کے ساتھ سیٹ کیا گیا ہے تاکہ مخصوص 'sz' سائز کے اندر انٹیجرز کی صف بنائی جائے۔





پھر، ہم enQueue() اور dequeue() فنکشنز کی وضاحت کرتے ہیں۔ enqueue() قدروں کو دم سے متعین سرکلر قطار میں داخل کرتا ہے۔ تاہم، سرکلر قطار کے سر میں موجود عناصر کو dequeue() فنکشن کے ذریعے ختم کر دیا جاتا ہے۔ showQueue() ممبر فنکشن سرکلر قطار کی قدروں کو ظاہر کرتا ہے۔

مرحلہ 1: سرکلر بفر میں عناصر داخل کرنے کے لیے ایک فنکشن بنائیں



پہلے مرحلے میں، ہم نے ایک کلاس سیٹ کی ہے جہاں پرائیویٹ ممبرز شروع کیے جاتے ہیں اور پرائیویٹ ممبر کے فنکشنز سرکلر قطار کو لاگو کرنے کے لیے سیٹ کیے جاتے ہیں۔ اب، ہم سرکلر قطار بنانے کے لیے فنکشن سیٹ کرتے ہیں اور الگورتھم کا استعمال کرتے ہوئے سرکلر قطار کے اندر ویلیوز داخل کرتے ہیں۔

void MyQueue::enQueue ( int val )

{

اگر ( ( سر == 0 && دم == Qsize - 1 ) || ( دم == ( سر - 1 ) % ( Qsize - 1 ) ) )

{

cout << ' \n قطار بھر گئی ہے' ;

واپسی ;

}



اور اگر ( سر == - 1 )

{

سر = دم = 0 ;

NewArr [ دم ] = val;

}



اور اگر ( دم == Qsize - 1 && سر ! = 0 )

{

دم = 0 ;

NewArr [ دم ] = val;

}



اور {

دم ++

NewArr [ دم ] = val;

}

}

یہاں، اگر قطار خالی یا زیر بہاؤ ہے تو ہم سرکلر قطار میں عنصر داخل کرنے کے لیے 'MyQueue' کلاس سے 'enqueue()' فنکشن کو کال کرتے ہیں۔ 'enqueue()' فنکشن کو 'val' پیرامیٹر کے ساتھ پاس کیا جاتا ہے اور سرکلر قطار کی دم سے ویلیو داخل کیا جاتا ہے۔ اس کے لیے سرکلر قطار میں اقدار داخل کرنے کے لیے ہم نے 'if-else' کی شرط رکھی ہے۔ پہلا 'if' بیان جو ہے 'if (( head == 0 && tail == Qsize – 1) || (tail == (head – 1) % (Qsize – 1)))' دو شرائط چیک کرتا ہے کہ آیا سر ابتدائی پوزیشن پر ہے اور دم سرکلر قطار کی آخری پوزیشن پر ہے۔ پھر، یہ چیک کرتا ہے کہ کیا دم سر کی پوزیشن کے پیچھے ایک پوزیشن میں ہے۔ اگر ان میں سے کوئی بھی شرط پوری ہو جاتی ہے تو قطار خالی نہیں ہوتی اور پرامپٹ پیغام تیار کرتا ہے۔

اگلا، ہمارے پاس 'اور اگر' شرط ہے جو اس بات کی نشاندہی کرتی ہے کہ آیا قطار خالی ہے۔ اگر ایسا ہے تو، قدر قطار میں ڈالی جاتی ہے۔ جیسا کہ سر کو -1 کے برابر رکھا گیا ہے، اس سے پتہ چلتا ہے کہ قطار خالی ہے اور سرکلر قطار میں قدر ڈالنے کی ضرورت ہے۔ اس کے لیے، ہم سر اور دم کو 0 کے برابر سیٹ کرتے ہیں۔ پھر، ہم ٹیل پوزیشن سے 'NewArr' سرکلر قطار میں ویلیو ڈالتے ہیں۔

اس کے بعد، ہماری تیسری 'الس-اگر' حالت ہے جو یہ جانچتی ہے کہ آیا دم قطار کی آخری پوزیشن پر ہے اور سر قطار کی ابتدائی پوزیشن نہیں ہے۔ یہ حالت اس وقت لاگو ہوتی ہے جب دم آخر تک پہنچ جاتی ہے اور ابتدائی پوزیشن میں ابھی بھی جگہ ہوتی ہے۔ اس کے لیے، ہمیں سر کو 0 پر سیٹ کرنے کی ضرورت ہے، اور عنصر کو دم کی پوزیشن سے شامل کیا جاتا ہے۔ آخر میں، اگر دی گئی تمام شرائط پوری نہیں ہوتی ہیں، تو قطار نہ تو خالی ہے اور نہ ہی بھری ہوئی ہے۔ اس معاملے کے لیے، ہم دم کو 1 تک بڑھاتے ہیں اور نئی دم کی پوزیشن سے ویلیو شامل کی جاتی ہے۔

مرحلہ 2: سرکلر بفر سے عناصر کو حذف کرنے کے لیے ایک فنکشن بنائیں

ہم نے پچھلے کوڈ کو enqueue() فنکشن کا استعمال کرتے ہوئے سرکلر قطار میں عناصر بنانے اور داخل کرنے کے لیے سیٹ کیا ہے۔ اب، ہم سرکلر بفر سے عناصر کو ہٹانے کے نفاذ کی وضاحت کرتے ہیں اگر یہ بہہ جاتا ہے۔

int MyQueue::deQueue ( )

{

اگر ( سر == - 1 )

{

cout << ' \n قطار مفت ہے' ;

واپسی INT_MIN;

}



int MyData = NewArr [ سر ] ;

NewArr [ سر ] = -1 ;



اگر ( سر == دم )

{

سر = -1 ;

دم = -1 ;

}



اور اگر ( سر == Qsize - 1 )

سر = 0 ;



اور

سر ++



واپسی میرا ڈیٹا؛



}

دیے گئے کوڈ میں، ہم ہیڈ انڈیکس سے عنصر کو ہٹانے کے لیے 'Myqueue' کلاس سے dequeue() فنکشن کہتے ہیں۔ لہذا، ہمارے پاس 'اگر' بیان ہے جو چیک کرتا ہے کہ آیا قطار خالی ہے یا نہیں۔ سر کو '-1' قدر کے ساتھ سیٹ کیا گیا ہے جو خالی قطار کی نمائندگی کرتا ہے۔ پیغام تیار کیا جاتا ہے کہ قطار خالی ہے اور پھر INT_MIN واپس کریں جو ایک int کے لئے مستقل کم از کم قیمت ہے۔ 'اگر' بیان اس بات کا تعین کرتا ہے کہ آیا قطار خالی ہے یا نہیں۔ اس کے لیے، ہم 'MyData' متغیر کی وضاحت کرتے ہیں اور قطار کے سر پر عنصر کی قدر مقرر کرتے ہیں۔ پھر، ہم سر کو -1 پوزیشن پر سیٹ کرتے ہیں جو اس بات کی نشاندہی کرتا ہے کہ اس قدر کو قطار سے ہٹا دیا گیا ہے۔ اس کے بعد ہم دیکھتے ہیں کہ سر اور دم برابر ہیں یا نہیں۔ اگر دونوں برابر ہیں، تو ہم خالی سرکلر قطار کی نمائندگی کرتے ہوئے، دونوں کو '-1' قدر تفویض کرتے ہیں۔ آخر میں، ہم چیک کرتے ہیں کہ آیا dequeue() کام کرتا ہے اگر ہیڈ قطار کے آخری انڈیکس پر ہے۔ اس کے لیے، ہم اسے '0' کی ویلیو کے ساتھ سیٹ کرتے ہیں جو کہ ارے کے شروع میں گھوم جاتی ہے۔ اگر دی گئی شرائط میں سے کوئی بھی درست نہیں ہے تو، سر کی قیمت میں اضافہ کیا جاتا ہے اور ترتیب شدہ عنصر کو واپس کر دیا جاتا ہے۔

مرحلہ 3: سرکلر بفر کے عناصر کو دکھانے کے لیے ایک فنکشن بنائیں

اس سیکشن میں، ہم 'NewArr' سرکلر قطار کے عناصر کو ظاہر کرنے کے لیے showQueue() فنکشن کہتے ہیں۔

void MyQueue::showQueue ( )

{

اگر ( سر == - 1 )

{

cout << ' \n قطار مفت ہے' ;

واپسی ;

}



cout << ' \n سرکلر قطار عناصر: ' ;



اگر ( دم > = سر )

{

کے لیے ( int i = سر ; میں < = دم ; i++ )

cout << NewArr [ میں ] << ' ;

}



اور

{

کے لیے ( int i = سر ; میں < Qsize; i++ )

cout << NewArr [ میں ] << ' ;



کے لیے ( int i = 0 ; میں < = دم ; i++ )

cout << NewArr [ میں ] << ' ;

}

}

قطار کی خالی حیثیت کی پہلے تصدیق کی جاتی ہے۔ اگر قطار مفت ہے تو سرکلر قطار مفت ہونے کا اشارہ ظاہر ہوتا ہے۔ بصورت دیگر، فنکشن سرکلر قطار کے عناصر کو دکھائے گا۔ اس کے لیے، ہم 'اگر' بیان کی وضاحت کرتے ہیں جہاں ہمارے پاس دم ہے جو سر سے بڑا یا اس کے برابر ہے۔ جب سرکلر قطار مکمل نہیں ہوتی ہے تو یہ حالت کیس کو ہینڈل کرنے کے لیے سیٹ کی جاتی ہے۔

اس صورت میں، ہم سر سے دم تک اعادہ کرنے کے لیے 'for' لوپ کا استعمال کرتے ہیں اور سرکلر قطار کی قدروں کو پرنٹ کرتے ہیں۔ اگلی صورت وہ ہے جہاں سرکلر قطار مکمل ہو گئی ہے۔ اس کے لیے ہم 'اگر' حالت کا استعمال کرتے ہوئے چیک کرتے ہیں جہاں دم سر سے کم ہے۔ اس کے بعد، ہمیں دو لوپس استعمال کرنے کی ضرورت ہے جہاں پہلا سر سے قطار کے آخر تک دہرتا ہے اور دوسرا دم کے آغاز سے دہراتا ہے۔

مرحلہ 4: سرکلر قطار پروگرام کا مین() فنکشن بنائیں

آخر میں، ہم پروگرام کا مین() فنکشن بناتے ہیں جہاں ہم سرکلر قطار میں پانچ عدد داخل کرتے ہیں اور قطار کے عدد کو ظاہر کرتے ہیں۔ اس کے بعد، ہم dequeue() فنکشن کو کال کرکے سرکلر قطار سے حذف شدہ عدد دکھاتے ہیں۔ کچھ عناصر کو ڈیکیو کرنے کے بعد، ہم enqueue() فنکشن کا استعمال کرتے ہوئے نئے عناصر ڈال کر قطار کو دوبارہ بھرتے ہیں۔

اہم int ( )

{

MyQueue کہ ( 5 ) ;



// عناصر داخل کرنا میں سرکلر قطار

que.enقطار ( گیارہ ) ;

que.enقطار ( 12 ) ;

que.enقطار ( 13 ) ;

que.enقطار ( 14 ) ;

que.enقطار ( پندرہ ) ;



// ڈسپلے عناصر موجود ہیں۔ میں سرکلر قطار

que.showQueue ( ) ;



// سرکلر قطار سے عناصر کو حذف کرنا

cout << ' \n حذف شدہ عنصر = ' << que.deQueue ( ) ;

cout << ' \n حذف شدہ عنصر = ' << que.deQueue ( ) ;



que.showQueue ( ) ;



que.enقطار ( 16 ) ;

que.enقطار ( 17 ) ;

que.enقطار ( 18 ) ;



que.showQueue ( ) ;



واپسی 0 ;



}

آؤٹ پٹ:

سرکلر قطار کے نفاذ کے نتائج C++ پرامپٹ اسکرین پر دکھائے گئے ہیں۔

نتیجہ

آخر میں، اس مضمون میں سرکلر بفر کے موضوع کی گہرائی سے وضاحت کی گئی ہے۔ ہم نے پہلے سرکلر بفر بنایا، پھر بتایا کہ سرکلر قطار سے کیسے ڈیلیٹ کیا جائے، اور پھر سرکلر کے عناصر کو C++ میں دکھایا۔