ازگر میں اسٹیک ڈیٹا سٹرکچر کیا ہیں؟



یہ مضمون آپ کو ازگر میں ڈھیر سارے ڈیٹا سٹرکچرز کے بارے میں بہت سی مثالوں کے ساتھ مفصل اور جامع معلومات فراہم کرے گا۔

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

ڈیٹا سٹرکچر کیوں؟

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





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

ڈیٹا سٹرکچر کی قسمیں

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



ڈیٹا سٹرکچر کی اقسام

اسٹیک ڈیٹا کا ڈھانچہ کیا ہے؟

کچھ حقیقی زندگی کی مثالوں پر غور کریں:

  • سامان میں کھیپ
  • ایک ٹرے پر پلیٹیں
  • سککوں کا اسٹیک
  • دراز کا اسٹیک
  • ریلوے یارڈ میں ٹرینوں کا تبادلہ

plates-stacks-data-structure



ان تمام مثالوں کی پیروی کرتے ہیں a آخری میں سب سے پہلے آؤٹ حکمت عملی. کسی ٹرے پر پلیٹوں پر غور کریں ، جب آپ پلیٹ منتخب کرنا چاہتے ہیں تو آپ کو اوپر سے پلیٹ لینے پر مجبور کیا جاتا ہے جب کہ جب پلیٹوں کو ٹرے پر رکھا جاتا تھا تو وہ لازمی طور پر الٹ ترتیب میں رہتے ہیں۔ مندرجہ بالا مثال کے طور پر آخری میں سب سے پہلے آؤٹ (LIFO) اصول کے طور پر جانا جاتا ہے اسٹیک .

تکمیلی کارروائیوں کے علاوہ ، میں یہ بھی کہہ سکتا ہوں کہ اسٹیک پر ممکنہ اہم آپریشنز یہ ہیں:

  1. اسٹیک کے اوپری حصے میں عنصر کو دبائیں یا ڈالیں
  2. اسٹیک کے اوپری حصے سے عنصر کو پاپ کریں یا ہٹائیں

اسٹیک ڈیٹا سٹرکچر بنانا

کلاس اسٹیک: ڈیف __init __ (خود ، زیادہ سے زیادہ_ سائز): خود ۔__ زیادہ سے زیادہ سائز = زیادہ سے زیادہ سائز خود ۔__ عناصر = [کوئی نہیں] * خود ۔__ زیادہ سے زیادہ سائز خود ۔__ ٹاپ = -1
  • زیادہ سے زیادہ سائز اسٹیک میں متوقع عناصر کی زیادہ سے زیادہ تعداد ہے۔
  • اسٹیک کے عنصر ازگر کی فہرست میں محفوظ ہیں۔
  • سب سے اوپر اسٹیک کے ٹاپسٹ انڈیکس کی نشاندہی کرتا ہے جو خالی اسٹیک کو نشان زد کرنے کیلئے ابتدائی طور پر -1 لیا جاتا ہے۔

اسٹیک کی ابتدائی صورتحال اعداد و شمار میں دیکھی جاسکتی ہے جہاں زیادہ سے زیادہ سائز = 5 ہے

اسٹیم میں عنصر کو دبائیں

اب ، اگر آپ اسٹیک میں عنصر داخل کرنا چاہتے ہیں یا آپ کو دبانا چاہتے ہیں تو آپ کو یہ یاد رکھنا ہوگا

  • سب سے اوپر اشاریہ کی نشاندہی کرے گا جس میں عنصر داخل کیا جائے گا۔
  • اور یہ کہ جب اسٹیک بھرا ہوا ہو تو کوئی عنصر داخل نہیں کیا جائے گا یعنی جب زیادہ سے زیادہ سائز = ٹاپ ہو۔

تو الگورتھم کیا ہونا چاہئے ؟؟

# اسٹیک ڈیف get_max_size (خود) کا زیادہ سے زیادہ سائز لوٹتا ہے: خود لوٹنا ۔__ زیادہ سے زیادہ # سائز واپس کرنا bool value چاہے اسٹیک بھرا ہوا ہے یا نہیں ، سچ ہے اگر مکمل اور غلط ہے ورنہ Def__full (خود): واپسی self.get_max_size () - 1 == خود .__ ٹاپ # اسٹیک ڈیف پش (خود ، ڈیٹا) کے اوپری حصے پر عنصر کو دباتا ہے: اگر (self.is_full ()): پرنٹ ('اسٹیک پہلے ہی بھرا ہوا ہے'): خود .__ ٹاپ = خود ۔__ ٹاپ + انٹ (1 ) خود .__ عناصر [خود .__ ٹاپ] = ڈیٹا # آپ ڈی ایس ڈیگٹ کرتے ہوئے ڈی ایس آبجیکٹ کے عناصر کو پرنٹ کرنے کے لئے نیچے __سٹر __ () کا استعمال کرسکتے ہیں: _ = [] انڈیکس = خود .__ ٹاپ جبکہ (انڈیکس> =) 0): msg.append ((str) (self .__ તત્વો [انڈیکس])) انڈیکس- = 1 msg = '' .join (msg) msg ​​= 'اسٹیک ڈیٹا (اوپر سے نیچے):' + msg

اب ، جب آپ درج ذیل کام کرتے ہیں:

اسٹیک 1 = اسٹیک (4)

# تمام مطلوبہ عنصر (ش) کو دبائیں۔

stack1.push ('A')

stack1.push ('B')

stack1.push ('C')

stack1.push ('E')

پرنٹ (stack1.is_full ())

پرنٹ (stack1)

آؤٹ پٹ:

اسٹیک پہلے ہی بھرا ہوا ہے
سچ ہے
اسٹیک ڈیٹا (اوپر سے نیچے): D C B A

اسٹیک سے عناصر پاپ کریں

اب ، جیسا کہ آپ نے عناصر کو اسٹیک میں داخل کیا ہے ، آپ ان کو پاپ کرنا چاہتے ہیں ، لہذا آپ کو درج ذیل کی دیکھ بھال کرنے کی ضرورت ہے۔

  • اسٹیک خالی نہیں ہے یعنی اوپر! = -1
  • جب آپ ڈیٹا کو حذف کرتے ہیں تو ، سب سے اوپر کو اسٹیک کے پچھلے اوپر کی طرف اشارہ کرنا چاہئے۔

تو ، الگورتھم کیا ہو گا؟

# دوبارہ اہمیت رکھتا ہے چاہے اسٹیک خالی ہو یا نہیں ، درست ہے اگر خالی اور غلط دوسری صورت میں Def__mp3 (خود): واپسی خود ۔__ ٹاپ == - 1 # پوپ ویلیو ڈیف پاپ (خود): اگر (self.is_empty ()): پرنٹ ('پاپ کرنے کے لئے کچھ بھی نہیں ، پہلے ہی خالی ہے') اور: a = خود ۔__ عناصر [خود ۔__ ٹاپ] خود ۔__ ٹاپ = خود ۔__ ٹاپ -1 واپس آکر # اسٹیک عناصر کو اوپر سے نیچے ڈیف ڈسپلے تک دکھائیں (خود) میرے لئے رینج میں (خود .__ اوپر ، -1 ، -1): پرنٹ (خود .__ عناصر [i] ، آخر = '') پرنٹ ()

اب ، پہلے تخلیق کردہ اسٹیک پر غور کریں ، عناصر کو پاپ کرنے کی کوشش کریں

پرنٹ (stack1.pop ())

C ++ میں صف ترتیب دیں

پرنٹ (stack1.pop ())

پرنٹ (stack1)

پرنٹ (stack1.pop ())

پرنٹ (stack1.pop ())

پرنٹ (stack1.pop ())

آؤٹ پٹ:

ڈی

سی

اسٹیک ڈیٹا (نیچے سے نیچے): B A

بی

TO

پاپ کرنے کے لئے کچھ نہیں ، پہلے ہی خالی ہے

اسٹیک ڈیٹا سٹرکچر کی ایپلی کیشنز

  • مثال 1:

ریاضی کے اظہار کی تشخیص کے ل and بریکٹ سے ملنے والی الگورتھم کے نفاذ کے ل and اور اسٹیک کالز کے نفاذ میں اسٹیک استعمال ہوتا ہے۔

جس کا جواب 5 ہے۔

  • مثال 2:

ونڈوز میں کلپ بورڈ ریڈو (سی ٹی آر ایل + زیڈ ، سی ٹی آر ایل + وائی) کارروائیوں کو نافذ کرنے کے لئے دو اسٹیکس کا استعمال کرتا ہے۔ آپ نے ونڈوز ورڈ ایڈیٹرز جیسے ایم ایس ورڈ ، نوٹ پیڈ ، وغیرہ پر کام کیا ہوگا۔ یہاں ایک متن ایم ایس ورڈ میں لکھا ہوا ہے۔ مشاہدہ کریں کہ Ctrl-Z اور Ctrl-Y کے کلک پر متن کیسے بدلا۔

یہ ایک ایسا کوڈ ہے جو دوبارہ عمل کو دوبارہ بناتا ہے۔ کوڈ کو دیکھیں اور دیکھیں کہ اس عمل میں اسٹیک کا استعمال کس طرح ہوتا ہے۔

# کریٹنگ کلاس اسٹیک کلاس اسٹیک: ڈیف __init __ (خود ، زیادہ سے زیادہ_ سائز): خود ۔__ زیادہ سے زیادہ سائز = زیادہ سے زیادہ سائز خود ۔__ عناصر = [کوئی نہیں] * خود ۔__ زیادہ سے زیادہ سائز خود ۔__ ٹاپ = -1 ڈیف ہے_ مکمل (خود): اگر (خود .__ ٹاپ == خود .__ max_size-1): واپسی حقیقی واپسی جھوٹی ڈیف is_empty (خود): اگر (خود .__ ٹاپ == - 1): واپسی سچی واپسی جھوٹی ڈیف پش (خود ، ڈیٹا): if (self.is_full ()): پرنٹ ('اسٹیک بھرا ہوا ہے!')) ورنہ: خود .__ ٹاپ + = 1 خود .__ عناصر [خود .__ ٹاپ] = ڈیٹا ڈیف پاپ (خود): اگر (سیلف آئی ایس_یمپٹی ()): پرنٹ ('اسٹیک خالی ہے! ! ') else: ڈیٹا = خود ۔__ عناصر [خود .__ ٹاپ] سیلف ۔__ ٹاپ- = 1 ریٹرن ڈیٹا ڈیف ڈسپلے (خود): اگر (سیلف آئس_یمپٹی ()) پرنٹ (' اسٹیک خالی ہے '): انڈیکس = خود .__ ٹاپ جبکہ (انڈیکس> = 0): پرنٹ کریں (خود .__ عناصر [انڈیکس]) انڈیکس- = 1 ڈیف get_max_size (خود): واپسی خود کریں ۔__ زیادہ سے زیادہ سائز # آپ مندرجہ ذیل عناصر کو پرنٹ کرنے کے لئے __سٹر __ () استعمال کرسکتے ہیں ڈی ایس آبجیکٹ کے دوران ڈیبگ کرتے ہوئے ڈیف __سٹر __ (خود): msg = [] انڈیکس = خود ۔__ ٹاپ جبکہ (انڈیکس> = 0): msg.append ((str) (سیلف .__ عنصر [انڈیکس])) انڈکس- = 1 msg = ' '.join (msg) msg ​​=' اسٹیک ڈیٹا (اوپر سے نیچے): '+ msg ms ہٹانے یا بیک اسپیس آپریشن ڈیف ہٹ () کو لاگو کرنے کے لئے g # فنکشن: عالمی کلپ بورڈ ، Undo_stack ڈیٹا = کلپ بورڈ [لین (کلپ بورڈ) -1] clipboard.remove (ڈیٹا) undo_stack.push (ڈیٹا) پرنٹ ('ہٹائیں:' ، کلپ بورڈ) Undo آپریشن Defo Undo () کو نافذ کرنے کے لئے # فنکشن: گلوبل کلپ بورڈ ، undo_stack ، redo_stack if (undo_stack.is_empty ()): پرنٹ کریں ('کو کالعدم کرنے کے لئے کوئی ڈیٹا نہیں ہے'):: ڈیٹا = undo_stack.pop () clipboard.append ( ڈیٹا) redo_stack.push (ڈیٹا) پرنٹ ('کالعدم:' ، کلپ بورڈ) # افعال کو دوبارہ عمل میں لانے کے لئے Def redo (): عالمی کلپ بورڈ ، undo_stack ، redo_stack if (redo_stack.is_empty ()): پرنٹ ('کوئی ڈیٹا نہیں ہے to redo '): ڈیٹا = redo_stack.pop () اگر (ڈیٹا کلپ بورڈ میں نہیں ہے): پرنٹ کریں (' دوبارہ کرنے کے لئے کوئی ڈیٹا نہیں ہے ') redo_stack.push (ڈیٹا) اور: کلپ بورڈ.ریومو (ڈیٹا) undo_stack.push ( ڈیٹا) پرنٹ ('دوبارہ کریں:' ، کلپ بورڈ) کلپ بورڈ = ['A'، 'B'، 'C'، 'D'، 'E'، 'F'] undo_stack = اسٹیک (لین (کلپ بورڈ)) redo_stack = اسٹیک (لین (کلپ بورڈ)) کو ہٹا دیں () واپس کریں () دوبارہ کریں ()

آؤٹ پٹ:

حذف کریں: ['A'، 'B'، 'C'، 'D'، 'E']

کالعدم: ['A'، 'B'، 'C'، 'D'، 'E'، 'F']

دوبارہ کریں: ['A'، 'B'، 'C'، 'D'، 'E']

اس کے ساتھ ، ہم ازگر آرٹیکل میں اسٹیک ڈیٹا سٹرکچر کا اختتام کرتے ہیں۔ اگر آپ کامیابی کے ساتھ اپنے آپ کوڈ کو سمجھ گئے اور چلاتے رہے تو ، آپ اسٹیکس ڈیٹا سٹرکچر کے لئے اب نیا نیا نہیں بن پائیں گے۔

ہمارے لئے ایک سوال ہے؟ برائےکرم اس مضمون کے تبصرے والے حصے میں اس کا ذکر کریں اور ہم جلد از جلد آپ کے پاس مل جائیں گے۔

اس کی مختلف ایپلیکیشنز کے ساتھ ازگر میں گہرائی سے آگاہی حاصل کرنے کے ل you ، آپ براہ راست داخلہ لے سکتے ہیں 24/7 کی حمایت اور زندگی بھر تک رسائی کے ساتھ۔