C ++ قطار کا استعمال کیسے کریں۔

How Use C Queue



تعارف

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

اصل فہرست کے پہلے آئٹم کو ہٹانے کے بعد ، دوسری پہلی آئٹم بن جاتی ہے۔ دوسرا آئٹم ہٹائے جانے کے بعد ، تیسرا پہلا آئٹم بن جاتا ہے ، وغیرہ۔







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



FIFO

FIFO کا مطلب ہے فرسٹ ان ، فرسٹ آؤٹ۔ یہ قطار کی تعریف کرنے کا ایک اور طریقہ ہے۔ اس کا مطلب ہے ، فہرست میں داخل ہونے والی پہلی شے ، پہلی چیز ہے جو ہٹائی جائے ، جب بھی ہٹائی جائے۔ فہرست کا آغاز ہیڈ یا فرنٹ کہلاتا ہے۔ فہرست کے آخر کو پیچھے یا دم کہا جاتا ہے۔



ضروری آپریشنز۔

سافٹ وئیر کی قطار میں کم از کم درج ذیل آپریشن ہونا ضروری ہے۔





دھکا

یہ آپریشن ، قطار کے پچھلے حصے میں ایک نیا عنصر شامل کرتا ہے۔ اس آپریشن کو سرکاری طور پر کہا جاتا ہے ، انکیو۔



شفٹ

یہ آپریشن قطار کے پہلے عنصر کو ہٹا دیتا ہے ، اور دوسرا عنصر نیا پہلا عنصر بن جاتا ہے۔ اس آپریشن کو سرکاری طور پر ڈیکیو کہا جاتا ہے۔ اسے C ++ میں پاپ کہا جاتا ہے۔

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

کلاس اور آبجیکٹ۔

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

نام ، قطار ، ایک کلاس ہے۔ قطار کی کلاس سے بنائی گئی ایک شے میں ایک پروگرامر کا منتخب کردہ نام ہوتا ہے۔

ایک فنکشن جو کلاس سے تعلق رکھتا ہے کلاس سے کسی شے کو فوری طور پر لانے کے لیے درکار ہوتا ہے۔ C ++ میں ، اس فنکشن کا وہی نام ہے جو کلاس کا نام ہے۔ کلاس سے بنائی گئی چیزیں (فوری طور پر) پروگرامر کے ذریعہ ان کو مختلف نام دیئے گئے ہیں۔

کلاس سے ایک شے بنانے کا مطلب ہے شے کی تعمیر اس کا مطلب یہ بھی ہے کہ فوری طور پر

ایک C ++ پروگرام جو قطار کی کلاس کا استعمال کرتا ہے ، فائل کے اوپری حصے میں درج ذیل لائنوں سے شروع ہوتا ہے۔

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

پہلی لائن ان پٹ/آؤٹ پٹ کے لیے ہے۔ دوسری لائن یہ ہے کہ پروگرام کو قطار کلاس کی تمام خصوصیات استعمال کرنے کی اجازت دی جائے۔ تیسری لائن پروگرام کو معیاری نام کی جگہ پر نام استعمال کرنے کی اجازت دیتی ہے۔

ایک فنکشن کو اوورلوڈ کرنا۔

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

تعمیراتی

قطار<قسم>نام()

مندرجہ ذیل اعلامیہ ایک قطار کو نام دیتا ہے ، قسم کی قسم کی قطار.

قطار<int>کہ؛

قطار خالی ہے۔ اعلامیہ کا آغاز مخصوص لفظ سے ہوتا ہے ، قطار کے بعد ڈیٹا کی قسم کے ساتھ زاویہ بریکٹ۔ پھر آپ کے پاس پروگرامر نے قطار کا نام دیا ہے۔

ابتدائی فہرست کے ساتھ تعمیر

مندرجہ ذیل تعریف ظاہر کرتی ہے کہ ابتدائی فہرست کے ساتھ قطار کیسے بنائی جائے:

قطار<تیرنا>کہ({1.1۔، 2.2۔، 3.3۔، 4.4۔})؛

قطار کو تباہ کرنا۔

قطار کو تباہ کرنے کے لیے ، اسے دائرہ کار سے باہر جانے دیں۔

قطار عنصر تک رسائی۔

دھکا (قیمت)

ایک قطار فرسٹ ان فرسٹ آؤٹ فہرست ہے۔ لہذا ، ہر قدر پیچھے سے شامل کی جاتی ہے۔ مندرجہ ذیل کوڈ طبقہ ایک خالی قطار بناتا ہے ، جس کے بعد پیچھے سے پانچ فلوٹ ویلیوز شامل کی جاتی ہیں۔

قطار<تیرنا>کہ؛

کہ.دھکا(1.1۔)؛
کہ.دھکا(2.2۔)؛
کہ.دھکا(3.3۔)؛
کہ.دھکا(4.4۔)؛
کہ.دھکا(5.5۔)؛

سائز () const

یہ قطار میں موجود عناصر کی تعداد لوٹاتا ہے۔ مندرجہ ذیل کوڈ واضح کرتا ہے:

قطار<تیرنا>کہ؛
کہ.دھکا(1.1۔)؛کہ.دھکا(2.2۔)؛کہ.دھکا(3.3۔)؛کہ.دھکا(4.4۔)؛کہ.دھکا(5.5۔)؛
لاگت<<کہ.سائز() << 'n'؛

آؤٹ پٹ 5 ہے۔

سامنے ()

یہ عنصر کو ہٹائے بغیر قطار کے پہلے عنصر کا حوالہ دیتا ہے۔ مندرجہ ذیل کوڈ کی پیداوار 1.1 ہے۔

قطار<تیرنا>کہ؛
کہ.دھکا(1.1۔)؛کہ.دھکا(2.2۔)؛کہ.دھکا(3.3۔)؛کہ.دھکا(4.4۔)؛کہ.دھکا(5.5۔)؛
لاگت<<کہ.سامنے() << 'n'؛

عنصر کو قطار سے نہیں ہٹایا گیا ہے۔

سامنے () const

جب قطار کی تعمیر const سے پہلے ہوتی ہے تو ، سامنے () کے بجائے اظہار سامنے () const پر عمل کیا جاتا ہے۔ یہ مندرجہ ذیل کوڈ میں استعمال ہوتا ہے ، مثال کے طور پر۔

constقطار<تیرنا>کہ({1.1۔، 2.2۔، 3.3۔، 4.4۔، 5.5۔})؛
لاگت<<کہ.سامنے() << 'n'؛

ایک مستقل حوالہ واپس کیا جاتا ہے۔ عنصر کو ویکٹر سے نہیں ہٹایا گیا ہے۔ قطار کے عناصر کو تبدیل نہیں کیا جا سکتا۔

پیچھے()

یہ عنصر کو ہٹائے بغیر قطار کے آخری عنصر کا حوالہ دیتا ہے۔ درج ذیل کوڈ کی آؤٹ پٹ 5.5 ہے۔

قطار<تیرنا>کہ؛
کہ.دھکا(1.1۔)؛کہ.دھکا(2.2۔)؛کہ.دھکا(3.3۔)؛کہ.دھکا(4.4۔)؛کہ.دھکا(5.5۔)؛
لاگت<<کہ.پیچھے() << 'n'؛

back () const

جب قطار کی تعمیر const سے پہلے ہوتی ہے تو ، اظہار back () const کو back () کے بجائے پھانسی دی جاتی ہے۔ یہ مندرجہ ذیل کوڈ میں استعمال ہوتا ہے ، مثال کے طور پر۔

constقطار<تیرنا>کہ({1.1۔، 2.2۔، 3.3۔، 4.4۔، 5.5۔})؛
لاگت<<کہ.پیچھے() << 'n'؛

ایک مستقل حوالہ واپس کیا جاتا ہے۔ عنصر کو قطار سے نہیں ہٹایا گیا ہے۔ قطار کی تعمیر کے لیے سابقہ ​​کانسٹ کے ساتھ ، قطار کے عناصر کو تبدیل نہیں کیا جا سکتا۔

قطار کی گنجائش۔

سائز () const

- اوپر ملاحظہ کریں

خالی () const

اگر قطار میں کوئی عنصر نہ ہو تو یہ سچ کے لیے 1 لوٹاتا ہے ، یا قطار خالی ہونے پر 0 غلط کے لیے۔ مندرجہ ذیل کوڈ اس کی وضاحت کرتا ہے:

قطار<تیرنا>وہ 1({1.1۔، 2.2۔، 3.3۔، 4.4۔، 5.5۔})؛
لاگت<<وہ 1.خالی() << 'n'؛
قطار<تیرنا>وہ 2؛
لاگت<<وہ 2.خالی() << 'n'؛

پیداوار یہ ہے:


قطار میں ترمیم کرنے والے۔

پاپ ()

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

قطار<تیرنا>کہ({1.1۔، 2.2۔، 3.3۔، 4.4۔، 5.5۔})؛
لاگت<<کہ.سامنے() << 'n'؛
کہ.پاپ()؛
لاگت<<کہ.سائز() << 'n'؛

پیداوار یہ ہے:

1.1۔

a. تبادلہ (b)

دو قطاروں کو تبدیل کیا جاسکتا ہے ، جیسا کہ اس کوڈ کے حصے میں واضح کیا گیا ہے:

قطار<تیرنا>وہ 1({1.1۔، 2.2۔، 3.3۔، 4.4۔، 5.5۔})؛
قطار<تیرنا>وہ 2({10۔، بیس})؛
وہ 1.تبادلہ(وہ 2)؛
لاگت<< 'que1 کا پہلا عنصر اور سائز:
'
<<وہ 1.سامنے() <<'،'<<وہ 1.سائز() << 'n'؛
لاگت<< 'کیو 2 کا پہلا عنصر اور سائز'<<
وہ 2.سامنے() <<'،'<<وہ 2.سائز() << 'n'؛

پیداوار یہ ہے:

que1 کا پہلا عنصر اور سائز: 10 ، 2۔

que2 کا پہلا عنصر اور سائز: 1.1 ، 5۔

نوٹ کریں کہ اگر ضروری ہو تو قطار کی لمبائی بڑھا دی جاتی ہے۔ نیز ، وہ اقدار جن کی تبدیلی نہیں تھی ، کو کچھ ڈیفالٹ ویلیو سے بدل دیا جاتا ہے۔ ڈیٹا کی اقسام ایک ہی قسم کی ہونی چاہئیں۔

قطاروں کے لیے مساوات اور رشتہ دار آپریٹرز۔

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

مساوات آپریٹرز

سچ کے لیے 1 اور غلط کے لیے 0 لوٹاتا ہے۔

== آپریٹر۔

1 لوٹتا ہے اگر دونوں قطاریں ایک جیسی ہوں اور متعلقہ عناصر برابر ہوں بصورت دیگر یہ 0 واپس کرتا ہے۔ مثال:

قطار<const چار*>وہ 1({'قسم'، 'اس کے علاوہ کچھ اور'})؛
قطار<const چار*>وہ 2({'بدکار'})؛
intایک پر=وہ 1==وہ 2؛
لاگت<<ایک پر<< 'n'؛

آؤٹ پٹ ہے: 0۔

=! آپریٹر

- اوپر کے برعکس مثال:

قطار<const چار*>وہ 1({'قسم'، 'اس کے علاوہ کچھ اور'})؛
قطار<const چار*>وہ 2({'بدکار'})؛
intایک پر=وہ 1! =وہ 2؛
لاگت<<ایک پر<< 'n'؛

آؤٹ پٹ ہے: 1۔

متعلقہ آپریٹرز۔

سچ کے لیے 1 اور غلط کے لیے 0 لوٹاتا ہے۔

کی

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

قطار<const چار*>وہ 1({'قسم'، 'اس کے علاوہ کچھ اور'})؛
قطار<const چار*>وہ 2({'بدکار'})؛
intایک پر=وہ 1<وہ 2؛
لاگت<<ایک پر<< 'n'؛

پیداوار 1 ہے۔

> آپریٹر۔

- اوپر کے برعکس مثال:

قطار<const چار*>وہ 1({'قسم'، 'اس کے علاوہ کچھ اور'})؛
قطار<const چار*>وہ 2({'بدکار'})؛
intایک پر=وہ 1>وہ 2؛
لاگت<<ایک پر<< 'n'؛

آؤٹ پٹ: 0۔

کی<= Operator

- ایسا ہی قطار<const چار*>وہ 1({'قسم'، 'اس کے علاوہ کچھ اور'})؛
قطار<const چار*>وہ 2({'بدکار'})؛
intایک پر=وہ 1<=وہ 2؛
لاگت<<ایک پر<< 'n'؛

آؤٹ پٹ: 1۔

> = آپریٹر۔

- اوپر کے برعکس مثال:

قطار<const چار*>وہ 1({'قسم'، 'اس کے علاوہ کچھ اور'})؛
قطار<const چار*>وہ 2({'بدکار'})؛
intایک پر=وہ 1> =وہ 2؛
لاگت<<ایک پر<< 'n'؛

آؤٹ پٹ: 0۔

کلاس اور اس کی فوری اشیاء

ایک قدر ایک ڈیٹا ٹائپ کی ہوتی ہے ، جیسا کہ ایک فوری چیز کسی کلاس کی ہوتی ہے۔ قطار کی تعمیر ایک کلاس کو ڈیٹا ٹائپ کے طور پر بھی قبول کر سکتی ہے۔ مندرجہ ذیل پروگرام اس کی وضاحت کرتا ہے:

#شامل کریں
#شامل کریں
نام کی جگہ کا استعمال کرتے ہوئے std؛
کلاس دی کلاس۔
{
عوام:
intایک پر؛
جامد چارچودھری؛
باطلفنکشن(چارنہیں، const چار *p)
{
لاگت<< 'وہاں ہے ' <<ایک پر<< کتابوں کی قیمت <<نہیں<<p<< 'اسٹور میں۔' << 'n'؛
}
جامد باطلمزہ(چارچودھری)
{
اگر (چودھری== 'سے')
لاگت<< 'سرکاری جامد رکن کی تقریب' << 'n'؛
}
}؛
intمرکزی()
{
TheCla obj1۔؛TheCla obj2۔؛TheCla obj3۔؛TheCla obj4۔؛TheCla obj5۔؛
قطار<TheCla>کہ؛
کہ.دھکا(obj1)؛کہ.دھکا(obj2)؛کہ.دھکا(obj3)؛کہ.دھکا(obj4)؛کہ.دھکا(obj5)؛
لاگت<<کہ.سائز() << 'n'؛
واپسی ؛
}

آؤٹ پٹ 5 ہے۔

منسلک فہرست۔

قطار کی فہرست کو تکنیکی طور پر منسلک فہرست کہا جاتا ہے۔ قطار کے لیے دو قسم کی لنکڈ لسٹیں ہیں: سنگل لنکڈ لسٹ اور ڈبل لنکڈ لسٹ۔

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

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

قطار کی درخواستیں۔

قطار فرسٹ ان فرسٹ آؤٹ ڈیٹا سٹرکچر ہے۔ کمپیوٹنگ میں ایسے حالات ہوتے ہیں جب ڈیٹا قطار کی شکل میں آتا ہے ، جس میں پہلے سب سے پہلے رویے کی ضرورت ہوتی ہے۔

کمپیوٹر کے وسائل کا اشتراک

کمپیوٹر میں موجود وسائل محدود دستیابی کا کوئی جسمانی یا ورچوئل جزو ہوتا ہے۔ ان میں سی پی یو ، ویڈیو کارڈ ، ہارڈ ڈرائیو اور میموری شامل ہیں۔ اس طرح کے وسائل کا اشتراک ایک قطار کی ضرورت ہے۔

رکاوٹوں کو سنبھالنا۔

کمپیوٹر پیری فیرلز کو وقتا فوقتا کمپیوٹر میں خلل ڈالنے کی ضرورت ہوتی ہے۔ رکاوٹوں کو اسی طرح سنبھالنا ہوگا جس طرح وہ پہنچے تھے۔ اس کے لیے قطار درکار ہے۔

معلومات کا انتظام کریں۔

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

نتیجہ

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

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

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

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

کریس