[Powered by Google Translate] [6 دفعہ] [مزید آرام دہ اور پرسکون] [روب Bowden] [ہارورڈ یونیورسٹی] [یہ CS50 ہے.] [CS50.TV] ہم نے ہمارے سوالات کے سیکشن کی قیادت کر سکتے ہیں. میں سے پہلے جگہ کے لئے یو آر ایل بھیج دیا گیا. سوالات کے سیکشن کے آغاز کا کہنا ہے کہ بظاہر میں مکمل طور پر نہیں ہوں ایک بہت آسان سوال unsick ہے کیا valgrind ہے؟ valgrind کیا کرتا ہے؟ کا کہنا ہے کہ کوئی بھی valgrind ہے کرنا چاہتے ہیں؟ [Student کی] چیک میموری لیک. جی ہاں، valgrind ایک عام میموری چیکر ہے. یہ آخر میں، آپ کو بتاتا ہے اگر آپ کے ذہن میں کوئی میموری لیک، جس میں زیادہ تر ہے جو ہم نے اس کی وجہ کے لئے استعمال کر رہے ہیں، اگر تم چاہو تو مسئلہ سیٹ میں یا اگر آپ کرنا چاہتے ہیں کرنا بڑے بورڈ پر حاصل، آپ میموری لیک کو جو کچھ کرنے کی ضرورت کی ضرورت ہے، اور آپ کو مقدمے میں ایک میموری لیک ہے کہ آپ کو نہیں تلاش کر سکتے ہیں ہے، بھی یاد رکھیں کہ جب بھی آپ کو ایک فائل کو کھولنے اور یہ کہ اگر آپ اسے بند نہیں ہے، یہ ایک میموری لیک ہے. بہت سے لوگ کچھ نوڈ لئے لگ رہا ہے کہ وہ نہیں آزاد رہے ہیں واقعی جب وہ بہت پہلا قدم میں لغت بند نہیں کیا. یہ بھی آپ کو بتاتا ہے اگر آپ کے ذہن میں کوئی جعلی ہے پڑھتا یا لکھتے ہیں، جس کا مطلب ہے کہ اگر آپ ایک قیمت مقرر کرنے کی کوشش ڈھیر کے اختتام سے باہر ہے اور یہ seg غلطی نہیں ہوتا ہے لیکن valgrind پائے، جیسا کہ آپ واقعی نہیں کرنا چاہئے وہاں لکھنے، اور آپ کو یقینی طور پر یا تو ان میں سے کوئی بھی نہیں ہونا چاہئے. آپ استعمال valgrind کیسے کرتے ہیں؟ آپ استعمال valgrind کیسے کرتے ہیں؟ یہ ایک عام سوال ہے کی قسم اسے چلائیں اور پیداوار کو دیکھو. پیداوار وقت کی ایک بہت بھاری ہے. بھی تفریح ​​غلطیاں ہیں جہاں اگر آپ کو کچھ بہت غلط بات ہے ایک لوپ میں ہو رہا ہے، تو اسے بالآخر "بہت زیادہ غلطیاں کہیں گے. میں اب گنتی کو روکنے کے لئے جا رہا ہوں. " یہ بنیادی طور پر متن کی پیداوار ہے کہ آپ کا تجزیہ ہے. آخر میں، یہ آپ کو کسی بھی میموری لیک میں کہا گیا ہے کہ آپ نے بتائیں گے، کتنے بلاکس، جو مفید ہو سکتا ہے کیونکہ اگر یہ ایک بلاک unfreed ہے، تو یہ عام طور پر ہے تلاش کرنے کے لئے آسان سے 1،000 بلاکس unfreed. 1،000 unfreed بلاکس شاید کا مطلب ہے کہ آپ کو آزاد نہیں کر رہے ہیں آپ کے منسلک مناسب طریقے سے یا کچھ اور کی فہرست. یہ valgrind ہے. اب ہم ہمارے سوالات کے سیکشن ہے، جس سے آپ کو ڈاؤن لوڈ کرنے کی ضرورت نہیں ہے. تم نے میرے نام پر کلک کریں اور انہیں خلا میں اوپر ھیںچو کر سکتے ہیں. اب مجھ پر کلک کریں. 1 نظر ثانی اسٹیک ہو جائے گا، جو ہم پہلی بار کر رہے ہیں. 2 نظر ثانی کی قطار، اور 3 نظر ثانی اکیلے منسلک فہرست ہو جائے گا. ہمارے اسٹیک کے ساتھ شروع ہو رہا ہے. جیسا کہ اسے یہاں کہتے ہیں، ایک اسٹیک سب سے بنیادی میں سے ایک ہے، کمپیوٹر سائنس کے بنیادی ڈیٹا کے ڈھانچے. بہت prototypical مثال ہے کھانے کے ہال میں ٹرے کے اسٹیک. یہ بنیادی طور پر ہے جب بھی آپ کو ایک اسٹیک سے متعارف کرایا جا رہے ہیں، کوئی، کہنا جا رہا ہے "ٹرے کے اسٹیک کی طرح اوہ،." آپ ٹرے کتابیں رکھی. پھر جب آپ کو ایک ٹرے ھیںچو جاؤ، پہلے ٹرے نکالا ہو رہی ہے گزشتہ ایک ہے جو کہ آپ نے اسٹیک پر پیش کیا گیا ہے وہ یہ کہ یہ ہے. یہاں یہ بھی طرح اسٹیک کا کہنا ہے کہ ہم میموری کا طبقہ بلایا اسٹیک ہے. اور کیوں کہا جاتا ہے اسٹیک؟ کیونکہ ایک اسٹیک آنکڑا ڈھانچہ کی طرح، pushes اور ٹمٹمانے اسٹیک پر اسٹیک فریم، اسٹیک فریم ایک تقریب کا ایک مخصوص کال کی طرح کہاں ہیں. اور ایک اسٹیک کی طرح، آپ ہمیشہ پر واپس کرنا پڑے گا ایک تقریب کال سے قبل اس کے کہ آپ کم اسٹیک فریم میں دوبارہ حاصل کر سکتے ہیں. آپ مرکزی کال FOO کال بار اور بار مرکزی براہ راست واپسی نہیں ہو سکتی. یہ ہمیشہ صحیح آگے بڑھانے اور پوپ آؤٹ اسٹیک پر عمل ہے. دو آپریشن، جیسا کہ میں نے کہا، دھکا اور پاپ ہے. وہ عالمگیر شرائط ہیں. آپ stacks کوئی بات نہیں جو کی شرائط میں دھکا اور پاپ کا پتہ ہونا چاہیئے. ہم دیکھ قطار مختلف قسم کا ہے گے. یہ ایک عالمگیر اصطلاح اصل میں نہیں ہے، لیکن دھکا اور پاپ stacks کی آفاقی ہیں. پش صرف اسٹیک پر لگایا جاتا ہے. پاپ ہے اسٹیک لے. اور ہم یہاں دیکھو، ہم ہمارے typedef struct اسٹیک ہے، تو ہم چار ** ڈور ہے. کیا کسی بھی ** کی طرف سے نہیں ڈرتی. یہ ڈور کی ایک صف ہونے کو ختم کرنے جا رہا ہے اشارہ یا حروف صف، جہاں حروف اشارہ ڈور ہیں. یہ ڈور نہیں ہے، لیکن یہاں وہ ڈور کے لئے جا رہے ہیں. ہم ڈور کی ایک صف ہے. ہم نے ایک لوڈ، جس کی نمائندگی کرتا ہے کس طرح بہت سے عناصر پر اسٹیک پر ہیں ہے، اور پھر ہم نے صلاحیت، جس میں اسٹیک پر کس طرح بہت سے عناصر پر ہو سکتا ہے ہے. صلاحیت 1 سے بڑا کچھ کے طور پر شروع کر دینا چاہئے، لیکن سائز 0 طور پر شروع کی جا رہی ہے. اب، وہاں بنیادی طور پر تین مختلف طریقوں سے آپ ایک اسٹیک کے بارے میں سوچ کر سکتے ہیں. ٹھیک ہے، شاید، لیکن دو اہم طریقے ہیں تم نے عمل ایک صف کا استعمال کرتے ہوئے، یا آپ اس کے نفاذ کے ایک لنک کی فہرست کا استعمال کرتے ہوئے کر سکتے ہیں کر سکتے ہیں. لنک کی فہرست کے قسم سے stacks بنانے کی چھوٹی سی ہے. یہ بہت آسان ہے منسلک کی فہرست کا استعمال کرتے ہوئے اسٹیک کو بنانے کے لئے، یہاں ایسا ہے، تو ہم نے اسٹیک arrays کا استعمال کرتے ہوئے کرنے جا رہے ہیں، اور پھر arrays کا استعمال کرتے ہوئے، وہاں بھی دو طریقے ہیں آپ اس کے بارے میں سوچ سکتے ہیں. سے پہلے، جب میں نے کہا کہ ہم نے اسٹیک کے لئے ایک صلاحیت ہے، تو ہم نے اسٹیک پر ایک عنصر فٹ کر سکتے ہیں. ایک طریقہ یہ ہو سکتا ہے جیسے ہی کے طور پر آپ کو 10 عناصر مارا، اور پھر تم نے کیا کیا کر رہے ہیں ہے. آپ کو پتہ ہے کہ دنیا میں 10 چیزوں کے بالائی پابند ہے ہے کہ آپ اپنے اسٹیک پر 10 سے زیادہ چیزیں کبھی نہیں کروں گا، اس صورت میں آپ کو ایک آپ کے اسٹیک کے سائز پر پابند بالائی کر سکتے ہیں. آپ کے پاس یا آپ کے اسٹیک اسیم رکھا جائے سکتا ہے، لیکن اگر آپ کو ایک صف کر رہے ہیں، اس کا مطلب یہ ہے کہ ہر وقت آپ کو 10 عناصر مارا، تو آپ کو 20 عناصر میں اضافہ ہو رہا ہے، کر رہے ہیں اور جب تم نے 20 عناصر مارا، آپ 30 عناصر یا 40 عناصر صف میں اضافہ کی ضرورت کے لئے جا رہے ہیں. صلاحیت، جس میں ہے جو ہم یہاں کیا کرنے جا رہے ہیں میں اضافہ کرنے کی ضرورت کے لئے جا رہے ہیں. ہر وقت ہے کہ ہم ہمارے اسٹیک کا زیادہ سے زیادہ سائز تک پہنچ جاتے ہیں، جب ہم اور کچھ دھکا، ہم صلاحیت میں اضافہ کرنے کی ضرورت کے لئے جا رہے ہیں. یہاں، ہم دھکا bool دھکا (چار * STR) کے طور پر اعلان کر دیا ہے. چار * STR سٹرنگ ہے کہ ہم نے اسٹیک پر ارہے ہیں، bool صرف کہتے ہیں کہ کیا ہم کامیاب یا ناکام رہے. ہم ناکام کیسے ہو سکتا ہے؟ ایک ہی صورت حال ہے کہ آپ کے بارے میں سوچ کر سکتے ہیں کیا ہے ہم جھوٹے واپس کہاں کی ضرورت ہو گی؟ جی ہاں. [] Student کی اگر یہ مکمل ہے اور ہم جکڑے ہوئے عملدرآمد کا استعمال کرتے ہوئے کر رہے ہیں. جی ہاں، تو ہم کس طرح جواب دیا کرتے ہیں وہ وضاحت اگر یہ مکمل ہے اور ہم جکڑے ہوئے عملدرآمد کا استعمال کرتے ہوئے کر رہے ہیں. پھر ہم جھوٹے ضرور واپس آ جائیں گے. تاکہ جیسے ہی ہم صف میں 10 چیزوں کو مارا، ہم 11 فٹ نہیں کر سکتے ہیں، ہم جھوٹے واپس. اگر یہ اسیم ہے؟ جی ہاں. اگر آپ کسی وجہ کے لئے صف توسیع نہیں کر سکتے ہیں. جی ہاں، اس لئے میموری محدود وسائل ہے، اور آخر میں، اگر ہم سے زیادہ بار بار اسٹیک پر آگے بڑھانے چیزوں رہو ہم مختص ایک بڑی سرنی کرنے کی کوشش فٹ جا رہے ہیں بڑی صلاحیت، malloc اور یا جو کچھ بھی ہم استعمال کر رہے ہیں جھوٹے واپس جا رہا ہے. ، malloc شہوت انگیز null واپس آ جائیں گے. یاد رکھیں، ہر وقت تم نے کبھی malloc فون، آپ کو دیکھنا رکھا جائے جانچ پڑتال کرنا چاہئے اگر وہ شہوت انگیز null یا کوئی اور واپس کہ ایک درست کٹوتی ہے. چونکہ ہم ایک اسیم اسٹیک کرنا چاہتے ہیں، صرف کیس ہے ہم جھوٹے واپس لوٹنے پر جا رہے ہیں اگر ہم کوشش کرتے ہیں صلاحیت اور malloc میں اضافہ کریں یا جو جھوٹے واپس. اس کے بعد پاپ میں کوئی بحث نہیں لگتا ہے، اور اس سٹرنگ ہے کہ اسٹیک کے سب سے اوپر پر ہے واپس. جو بھی سب سے زیادہ حال ہی میں اسٹیک پر دھکیل دیا گیا ہے پاپ جو آ رہا ہے، اور اسٹیک سے بھی اس کو ہٹاتا ہے. نوٹس اور یہ کہ یہ شہوت انگیز null واپس اگر اسٹیک پر کچھ بھی نہیں ہے. یہ ہمیشہ ممکن ہے کہ اسٹیک خالی ہے. جاوا میں، اگر آپ کہ یا دیگر زبانوں میں استعمال کرتے رہے ہیں، ایک خالی اسٹیک سے پاپ کرنے کی کوشش سے ایک رعایت یا کچھ اور کی وجہ سے ہو سکتا ہے. لیکن C، شہوت انگیز null مقدمات کہ ہم کس طرح ان مسائل سے نمٹنے کا ایک بہت ہے. شہوت انگیز null واپس آ رہا ہے کہ ہم کس طرح کی نشاندہی ہے کہ اسٹیک خالی تھا جا رہے ہیں. ہم نے کوڈ ہے کہ آپ کے اسٹیک فعالیت کی جانچ کرے گا فراہم کیا ہے، اور POP دھکا لاگو کرتے ہیں. یہ کوڈ کا ایک بہت نہیں ہوگا. میں اصل میں ہوجائے گا، اس سے پہلے کہ ہم ایسا اشارہ کے اشارے اگر آپ نے اسے نہیں دیکھا ہے، malloc صرف تقریب نہیں ہے جو آپ کے لئے ڈھیر پر میموری مختص ہے. alloc کے افعال میں سے ایک خاندان ہیں. سب سے پہلے malloc، جو آپ استعمال کرتے رہے ہیں ہے. پھر calloc ہے، جس malloc کے طور پر ایک ہی بات کرتا ہے، لیکن یہ سب کچھ آپ کے لئے صفر گا. اگر تم نے کبھی کچھ mallocing کے بعد سب کچھ اتارنا null قائم کرنے کے لئے کرنا چاہتا تھا تم صرف لکھنے کی بجائے پہلے جگہ میں calloc استعمال کیا میموری کے پورے بلاک صفر لوپ کے لئے ایک. Realloc malloc کی طرح ہے اور خصوصی مقدمات کی ایک بہت ہے، لیکن بنیادی طور پر کیا realloc کرتا ہے ہے یہ پوائنٹر جو پہلے ہی کیا گیا تھا مختص لیتا ہے. Realloc تقریب ہے تم یہاں پر توجہ ادا کرنے کا خواہاں ہے. یہ پوائنٹر جو پہلے ہی کیا گیا تھا malloc سے واپس لیتا ہے. چلو کا کہنا ہے کہ آپ malloc سے 10 بائٹس کی ایک پوائنٹر کی درخواست ہے. پھر بعد میں تمہیں احساس ہے آپ کو 20 بائٹس چاہتے تھے، تو آپ کو 20 بائٹس کے ساتھ اس پوائنٹر realloc کہتے ہیں، اور realloc کو آپ کے لئے سب کچھ پر خود کار طریقے سے کاپی گا. اگر آپ نے ابھی malloc پھر کہا جاتا ہے، جیسا کہ میں نے 10 بائٹس کا ایک بلاک ہے. اب میں 20 بائٹس کی ایک بلاک کی ضرورت ہے، اگر ایسا ہے تو میں 20 بائٹس malloc، تو میں دستی طور پر ختم کرنے کی پہلی بات سے 10 بائٹس کاپی ہے دوسری بات میں اور پھر پہلی بات. Realloc آپ کے لیے وہ سنبھال لیں گے. نوٹس دستخط باطل * کی جا رہی ہے، جو میموری کی بلاک ایک پوائنٹر آرہے ہیں، تو باطل * ptr. باطل * تم ایک کلی پوائنٹر کے طور پر سوچ سکتے ہیں. عام طور پر، آپ کو باطل کے ساتھ * کی علامت کبھی نہیں سودا لیکن malloc کے لئے ناقابل * آرہے ہیں، ہے اور اس وقت یہ صرف کی طرح استعمال کیا جاتا ہے یہ اصل میں ایک چار * جا رہا ہے. گزشتہ باطل * کہ malloc کی طرف سے واپس اب realloc منظور ہو رہا ہے، اور پھر سائز بائٹس مختص کرنا چاہتے نیا نمبر ہے، تو اپنے نئے صلاحیت ہے. میں آپ کو ایک دو منٹ دے، اور ہمارے خلا میں ایسا کریں گے. 1 نظر ثانی کے ساتھ شروع کریں. میں نے آپ کو دھکا کو لاگو کرنے کے کے لئے کافی وقت کے بارے میں امید کے بعد روک دیں گے، اور پھر میں آپ کو ایک پاپ کو توڑنے دے دونگا. لیکن یہ واقعی میں اتنا کوڈ نہیں ہے. شاید سب سے زیادہ کوڈ توسیع سامان ہے، صلاحیت کی توسیع ہے. ٹھیک ہے، مکمل طور پر کیا جائے گا دباؤ لیکن جب تک کے طور پر آپ کو لگتا ہے جیسے تم صحیح راستے پر ہیں، یہ اچھی بات ہے. کیا کسی کوڈ ہے وہ آپ کے وزٹرز کا ریکارڈ رکھا ھیںچ کے ساتھ آرام دہ اور پرسکون محسوس کر رہا ہوں ہے؟ جی ہاں، میں، کیا کسی کو بھی کسی بھی کوڈ میں اوپر ھیںچو کر سکتے ہیں ہے؟ ٹھیک ہے، آپ اس کو بچانے شروع، جو بھی ہو سکتے ہیں؟ میں نے ہمیشہ اس قدم کو بھولنا. ٹھیک ہے، دھکا دیکھ کیا آپ اپنے کوڈ کی وضاحت کرنا چاہتے ہیں؟ [Student کی] سب سے پہلے، میں نے حجم میں اضافہ ہوا ہے. مجھے لگتا ہے کہ ہو سکتا ہے کہ میں ویسے بھی ہونا چاہئے، میں سائز میں اضافہ ہوا، اور میں دیکھ رہا ہوں اگر یہ صلاحیت سے کم ہے. اور اگر یہ صلاحیت سے بھی کم ہے، میں صف ہے کہ ہم نے پہلے سے ہی ہے. اور اگر ایسا نہیں ہے، میں 2 کی طرف سے صلاحیت کو ضرب، اور میں نے ایک بڑی صلاحیت کی سائز کے ساتھ کچھ ڈور صف اب reallocate. اور پھر اگر یہ ناکام ہو جاتا ہے، میں صارف بتا اور جھوٹے واپس، اور اگر یہ ٹھیک ہے، تو میں نئی ​​جگہ پر سٹرنگ رکھ دیا. [روب B.] یہ بھی دیکھیں گے کہ ہم نے ایک اچھا bitwise آپریٹر یہاں استعمال کیا 2 کی طرف سے ضرب ہے. یاد رکھیں، بائیں تبدیلی ہمیشہ 2 سے ضرب ہونے جا رہا ہے. دائیں تبدیلی اس وقت تک 2 کی طرف سے تقسیم کیا گیا ہے جیسا کہ آپ کو یاد ہے کہ اس کا مطلب یہ ہے 2 کی طرف سے 2 سے تقسیم عددی میں تقسیم کریں. یہ ایک یہاں یا وہاں 1 تراش سکتی ہے. لیکن 1 کی طرف سے چھوڑ تبدیلی ہمیشہ 2 سے ضرب ہونے جا رہا ہے، جب تک آپ عددی کی حد اتپرواہ، اور پھر یہ نہیں ہو گا. ایک جانب تبصرہ. میں اس پر تبدیل کسی بھی طرح جو کوڈنگ نہیں ہے پسند، لیکن میں اس طرح کچھ کرنا اچھا لگتا ہے. یہ اصل میں یہ تھوڑا طویل بنانے کے لئے کی جا رہی ہے. شاید یہ ظاہر کرنے کے لئے کے لئے یہ بہترین معاملہ نہیں ہے، لیکن میں طبقہ پسند کے ان بلاکوں میں ٹھیک ہے، اگر یہ اگر ہوتا، تو میں کچھ کرنے کے لئے جا رہا ہوں، اور پھر تقریب میں کیا جاتا ہے. میں تقریب نیچے تو میری آنکھوں پورے راستے میں سکرال کرنے کی ضرورت نہیں ہے دیکھتے ہیں کہ کسی اور کے بعد کیا ہوتا ہے. یہ ہے اگر یہ اگر ہوتا، تو میں ابھی آیا. یہ بھی اس سے باہر سب کچھ اچھا شامل فائدہ ہے اب ایک بار چھوڑ منتقل کر دیا گیا. میں اب اگر تم نے کبھی قریب مضحکہ خیز طویل لائنوں کی ضرورت ہے، تو ان 4 بائٹس کی مدد، اور بھی زیادہ بائیں کچھ ہے کر سکتے ہیں، کم ابیبھوت کیا آپ کو لگتا ہے کہ اگر ٹھیک پسند ہے، مجھے یاد ہے میں فی الحال ایک لوپ کے لئے کسی اور کے اندر اندر ایک جبکہ لوپ میں ہوں. جہاں کہیں بھی آپ کو فوری طور پر اس کی واپسی کرتے ہیں، کر سکتے ہیں میں قسم کی طرح ہے. یہ مکمل طور پر اختیاری ہے اور کسی بھی طرح کی توقع نہیں ہے. [Student کی] ایک سائز وہاں ہونا چاہیئے - میں ناکام رہتے حالت میں؟ میں ناکام رہتے یہاں حالت ہم realloc پر میں ناکام رہا ہے، تو جی ہاں. ناکام حالت میں نوٹس، کس طرح ممکن ہے، ہم آزاد چیزیں بعد جب تک، ہم نے ہمیشہ ناکام جا رہے ہیں کوئی بات نہیں کتنی بار ہم کچھ کو آگے بڑھانے کی کوشش کرتے ہیں. اگر ہم آگے بڑھانے رہو، ہم incrementing سائز رہو، اگرچہ ہم کچھ اسٹیک پر نہیں ڈال رہے ہیں. عام طور پر جب تک ہم فونز اضافہ نہیں کے بعد ہم نے اسٹیک پر کامیابی سے ڈال دیا ہے. ہم ایسا، کا کہنا ہے کہ یا تو یہاں اور یہاں گی. اور پھر کہا کہ ≤ صلاحیت s.size کی بجائے، یہ صلاحیت سے بھی کم ہے، صرف اس لیے کہ ہم نے منتقل کر دیا گیا جہاں سب کچھ تھا. اور یاد رکھو، صرف جگہ ہے کہ ہم جھوٹے ممکنہ طور پر واپس کر سکتے ہیں یہاں ہے، جہاں realloc شہوت انگیز null واپس، اور اگر آپ کو معیاری غلطی یاد ہو، ہو سکتا ہے کہ آپ اس معاملے پر غور جہاں آپ کو ایک معیاری غلطی کو پرنٹ کرنے کے لئے کرنا چاہتے ہیں کر سکتے ہیں، بجائے صرف معیار باہر سے براہ راست پرنٹ اتنی fprintf stderr. ایک بار پھر، یہ ایک امید نہیں ہے، لیکن اگر یہ ایک خامی ہے، printf ٹائپ کریں، تو آپ کو معیاری باہر کی بجائے معیاری غلطی پرنٹ کر سکتے ہیں. کوئی بھی اور کچھ نوٹ ہے؟ جی ہاں. [Student کی] آپ [اشراوی] پر جا سکتے ہیں؟ [روب B.] جی ہاں، اس کی اصل binariness یا صرف یہ کیا ہے؟ [Student کی] تو آپ 2 سے گنا؟ [روب B.] جی ہاں، بنیادی طور پر. بائنری زمین میں، ہم ہمیشہ ہندسے کی ہماری مجموعہ ہے. 1 کی طرف سے اس کے بائیں منتقل بنیادی طور پر دائیں جانب میں اضافہ. پیچھے اس بائنری میں سب کچھ یاد 2 ایک طاقت ہے، تو یہ 0 2 کی نمائندگی کرتا ہے، 1 2، یہ 2 2. اب دائیں جانب 0 داخل کر، ہم صرف سب کچھ ختم ہو جاتے ہیں. 0 2 1 سے 2، 2 2. دائیں جانب ہے کہ ہم ڈالا ہے ضروری 0 ہو جائے گا، جو سمجھ میں آتا ہے. اگر آپ 2 کی طرف سے کبھی بھی ایک نمبر ضرب، یہ عجیب ختم نہیں ہے، 0 جگہ 2 0 ہونا چاہئے، اور یہ ہے جو میں نصف سے پہلے ہے کے بارے میں خبردار کیا ہے اگر آپ منتقل ہو ایک عددی میں بٹس کی تعداد سے باہر تو اس 1 جا کو ختم کرنے جا رہی ہے. وہ صرف فکر ہے اگر تم واقعی بڑی صلاحیت سے نمٹنے ہو. لیکن اس وقت، اس کے بعد آپ چیزوں کی کروڑوں کی ایک سرنی کے ساتھ کام کر رہے ہو، جو میموری میں فٹ نہیں ویسے بھی ہو سکتا ہے. اب ہم پاپ، جو بھی آسان ہے حاصل کرنے کے لئے کر سکتے ہیں. تمہیں یہ کرنا چاہتے ہیں کر سکتے ہیں اگر آپ ایک مکمل جھوبڈ پاپ ہو، اور اب تم نصف صلاحیت میں دوبارہ ہو. آپ کو میموری کی وہ رقم ہے جو آپ کو چھوٹا کرنے realloc سکتا ہے، لیکن آپ نے اس کے بارے میں فکر کرنے کی ضرورت نہیں ہے، لہذا صرف realloc کیس جا رہا ہے میموری بڑھتی ہوئی، میموری کبھی نہیں سکڑ، جو پاپ سپر کو آسان بنانے کے لئے کی جا رہی ہے. اب قطار، جو stacks طرح جا رہے ہیں، بلکہ اس لئے کہ آپ نے چیزوں کو باہر لے جانا الٹ ہے. ایک قطار کی prototypical مثال ایک سطر ہے، تو مجھے لگتا ہے کہ اگر آپ انگریزی تھے، میں نے کہا ہوتا کیا ایک قطار کی prototypical مثال قطار ہے. تو ایک لائن کی طرح، اگر آپ کو لائن میں پہلے شخص ہیں، آپ کو لائن سے باہر پہلا شخص کو ہونے کی توقع ہے. اگر آپ کو لائن میں آخری شخص ہیں، تو آپ کو گذشتہ سروس شخص کے لئے جا رہے ہیں. ہم اس FIFO پیٹرن، جبکہ اسٹیک LIFO پیٹرن تھا. ان الفاظ کافی آفاقی ہیں. stacks کی طرح اور arrays کے برعکس، قطار عام طور پر درمیان میں عناصر تک رسائی کی اجازت نہیں ہے. اسٹیک یہاں، ہم دھکا اور پاپ ہے. یہاں، ہم ان enqueue اور dequeue کے لیے بلایا ہے ہو. میں نے یہ بھی سنا ہے ان شفٹ اور unshift بلایا ہے. میں نے سنا ہے لوگوں کا کہنا ہے کہ دھکا اور پاپ بھی قطار پر لاگو ہے. میں نے سنا داخل، ہٹانے، اور پاپ، اگر آپ stacks کے بارے میں بات کر رہے ہیں، آپ کو آگے بڑھانے اور پوپ آؤٹ کر رہے ہیں دھکا. اگر آپ قطار کے بارے میں بات کر رہے ہیں، آپ الفاظ کو استعمال کرنے کے لئے کرنا چاہتے ہیں منتخب کر سکتا ہے اندراج اور ہٹانے کے لئے، اور اسے کیا کہتے رکھا جائے چاہیے پر کوئی اتفاق رائے نہیں ہے. لیکن یہاں، ہم enqueue اور dequeue ہے. اب، struct تقریبا اسٹیک struct جیسا لگ رہا ہے. لیکن ہم سر کا ٹریک رکھنے کے لئے ہے. مجھے لگتا ہے کہ یہ نیچے یہاں کہتے ہیں، لیکن ہم کیوں سر کی ضرورت ہے؟ prototypes پر زور اور پاپ کے لئے بنیادی طور پر ایک جیسی ہیں. اس سے آپ دھکا اور پاپ کے طور پر سوچ سکتے ہیں. فرق صرف اتنا پاپ ہے واپس لوٹنے کی بجائے-آخری ہے، یہ پہلے واپس لوٹنے. 2، 1، 3، 4، یا کچھ اور. اور یہاں آغاز ہے. ہمارے قطار مکمل طور پر بھرا ہوا ہے، لہذا اس میں چار عناصر. ہمارے قطار کے آخر میں فی الحال 2 ہے، اور اب ہم کچھ اور شامل کرنے کے لئے جانا. ہم اسٹیک ورژن کے لئے کچھ اور، ہم نے کیا کیا جب داخل کرنا چاہتے ہیں ہے ہم نے میموری ہمارے بلاک دی. اس کے ساتھ کیا مسئلہ ہے؟ [Student کی] آپ 2 منتقل. کیا پہلے میں قطار کے آخر کے بارے میں انہوں نے کہا کہ، 1 یعنی وہ اس طرح کہ ہم نے شروع نہیں کرتا، تو ہم dequeue 1 کرنا چاہتے ہیں، تو dequeue 3، تو dequeue 4، ، پھر dequeue تو 2 یہ ایک dequeue. اب ہم realloc استعمال نہیں کر سکتے ہیں، یا کم از کم، آپ کو ایک مختلف طریقے سے realloc استعمال کرنے کی ضرورت ہے. لیکن آپ شاید realloc نہیں استعمال کرنا چاہئے. آپ کو دستی طور پر آپ کی میموری میں کاپی کرنے جا رہے ہیں. میموری کی کاپی کرنے کے دو افعال ہیں. آمدید memcopy اور memmove ہے. میں فی الحال انسان صفحات پڑھ رہا ہوں جو ایک آپ استعمال کرنا چاہتے ہیں کے لئے جا رہے ہیں. ٹھیک ہے، memcopy، فرق ہے کہ memcopy اور memmove، ایک معاملہ صحیح طریقے سے ہینڈل آپ کو ایک ایسے خطے میں اس علاقے وورلیپ ہوتا ہے میں جہاں کاپی کر رہے ہیں تم سے کاپی کر رہے ہیں. Memcopy اسے سنبھال نہیں کرتا. Memmove ہے. آپ کے طور پر مسئلہ کے بارے میں سوچ کر سکتے ہیں چلو کا کہنا ہے کہ میں نے اس آدمی کو کاپی کرنے کے لئے چاہتے ہیں، اس سے زیادہ آدمی ان چار. آخر میں، جو صف جیسا نظر آنا چاہیئے بعد نقل 2، 1، 2، 1، 3، 4، اور پھر آخر میں کچھ سامان ہے. لیکن اس کے لئے ہے جس میں ہم اصل کاپی پر منحصر ہے، اگر ہم اس حقیقت کہ اس خطے ہم میں کاپی کرنے کی کر رہے ہیں کے بارے میں غور نہیں کرتے کے بعد overlaps، ایک ہم سے کاپی کر رہے ہیں تو ہم شروع طرح یہاں کیا، جگہ ہم جانا چاہتے ہیں میں 2 کاپی کر سکتے ہیں، تو ہمارا اشارہ آگے بڑھنے. اب ہم یہاں اور یہاں چل رہا ہے، کر رہے ہیں اور اب ہم پر کاپی کرنا چاہتے ہیں اس آدمی پر اس آدمی کو اور ہمارے اشارہ آگے بڑھنے. کیا ہم اٹھنے کو ختم کرنے جا رہے ہیں 2 ہے، 1، 2، 1، 2، 1 بجائے مناسب 2 کی وجہ سے، 1، 2، 1، 3، 4 1 2، اصل 3، 4 overrode. Memmove ہے کہ صحیح طریقے سے ہینڈل. اس صورت میں، بنیادی طور پر صرف ہمیشہ memmove استعمال کیونکہ یہ درست طریقے سے سنبالتی ہے. عام طور پر یہ کسی بھی برا انجام نہیں ہے. خیال بجائے آغاز سے شروع ہونے والے ہیں اور اس طرح کاپی ہے جیسا کہ ہم یہاں صرف کیا، اس نے آخر سے شروع ہوتا ہے اور میں نقل کرتا ہے، اور اس صورت میں، آپ ایک مسئلہ کبھی نہیں کر سکتے ہیں. کوئی کارکردگی کھو گیا ہے. ہمیشہ memmove کا استعمال کریں. memcopy کے بارے میں کبھی فکر ہوتی ہے. اور یہ ہے جہاں آپ کو الگ الگ memmove جا رہے ہیں آپ کی قطار کے حصہ لپیٹ کے ارد گرد کے. کوئی تشویش نہیں ہے اگر مکمل طور پر کیا ہے. یہ اسٹیک، دھکا، پاپ اور سے زیادہ مشکل ہے. کوئی بھی کسی بھی کوڈ کے ساتھ مل کر کام کر سکتے ہیں؟ اگر مکمل طور پر نامکمل ہے؟ [Student کی] جی ہاں، یہ مکمل طور پر نامکمل ہے، اگرچہ. پوری طرح سے نامکمل جب تک ٹھیک ہے کیونکہ ہم کر سکتے ہیں آپ پر نظر ثانی کو بچا؟ میں بھول جاتے ہیں کہ ہر ایک وقت. ٹھیک ہے، کیا کو نظر انداز ہوتا ہے جب ہم چیزوں کا سائز تبدیل کرنے کی ضرورت ہے. بازسائز پوری طرح نظر انداز. اس کوڈ کو سمجھاو. میں سب سے پہلے جانچ پڑتال اگر کا سائز سب سے پہلے نقل سے کم ہے. اور پھر اس کے بعد، میں داخل میں سر + سائز لیتے ہیں، اور میں اس بات کا یقین کر لیں کہ یہ صف کی صلاحیت کے ارد گرد wraps اور میں اس پوزیشن میں نئی ​​سٹرنگ ڈالیں. پھر میں حجم میں اضافہ اور حقیقی واپس. [روب B.] یہ ضرور ان حالات میں جہاں آپ MOD کا استعمال کرتے ہوئے کرنا چاہتے ہیں جا رہے ہیں میں سے ایک ہے. کیس کی کسی بھی قسم کی ہے جہاں آپ کے ارد گرد ریپنگ کی ہے، اگر آپ کے ارد گرد ریپنگ کی سوچتے، فوری طور پر خیال جدید ہونا چاہئے. ایک فوری اصلاح کے کے طور پر / اپنے کوڈ کو ایک ہی لائن میں چھوٹا، آپ کو نوٹس ہے کہ لائن فوری طور پر اس کے بعد صرف سائز ہے + +، لہذا آپ کو ضم ہے کہ اس لائن میں، سائز + +. اب یہاں نیچے، ہم معاملہ ہے ہم کافی میموری کہاں نہیں ہے، تو ہم نے 2 کی طرف سے ہماری صلاحیت میں اضافہ کر رہے ہیں. مجھے لگتا ہے کہ آپ ایک ہی مسئلہ ہے یہاں کر سکتے ہیں، لیکن ہم اس کو نظر انداز کر سکتا ہے، جہاں اگر آپ کو آپ کی صلاحیت میں اضافہ کرنے میں ناکام رہے، تو آپ 2 کی طرف سے آپ کی صلاحیت پر پھر کم کرنا چاہتے ہیں جا رہے ہیں. ایک اور مختصر کا نوٹ کی ہے آپ نے ابھی طرح کر سکتے ہیں + =، آپ = << بھی کر سکتے ہیں. سے پہلے تقریبا کچھ برابر کر سکتے ہیں، + =، | =، & =، << = چار * نیا ہماری میموری کے نئے بلاک ہے. اوہ، یہاں. کیا لوگوں کو ہماری میموری کے نئے بلاک کی قسم کے بارے میں کیا خیال ہے؟ [Student کی] یہ چار ** ہونا چاہئے. ہمارے struct واپس سوچ رہے ہیں یہاں ڈور ہے جو ہم reallocating رہے ہیں. ہم قطار میں عناصر کے لئے ایک مکمل نیا متحرک ذخیرہ کر رہے ہیں. ہم اپنے ڈور بتائے جا رہے ہیں جو ہم اب mallocing رہے ہیں، اور اس نئے چار ** جا رہا ہے. تاروں کی ایک صف کو ہونے جا رہا ہے. تو پھر کیا معاملہ ہے جس کے تحت ہم جھوٹے واپس جا رہے ہیں ہے؟ [Student کی] ہم چار * کرنا چاہئے؟ [روب B.] جی ہاں، اچھی کال. [Student کی] وہ کیا تھا؟ [روب B.] ہم چار * کے سائز کی وجہ سے ہم نہیں ہیں کرنا چاہتا تھا اب یہ ایک بہت بڑا مسئلہ اصل میں ہو سکتا ہے کیونکہ sizeof (چار) 1 گے. Sizeof چار * 4 جا رہا ہے، تو، اوقات جب آپ ints کے ساتھ کام کر رہے ہو کی ایک بہت آپ کو اس سے دور حاصل کرنے کے لئے کرتے ہیں کیونکہ int * int اور سائز کا سائز 32 بٹ نظام پر ایک ہی بات کے لئے جا رہے ہیں. لیکن یہاں، (چار) sizeof اور sizeof (چار *) اب ایک ہی بات جا رہے ہیں. حالات جہاں ہم جھوٹے واپس کیا ہے؟ [Student کی] نیا null ہے. جی ہاں، اگر نیا null ہے، ہم جھوٹے واپس، اور میں نیچے پھینک جا رہا ہوں یہاں [Student کی] [اشراوی] [روب B.] جی ہاں، یہ ٹھیک ہے. آپ کو 2 مرتبہ صلاحیت یا صلاحیت 1 تبدیلی اور پھر ہی اسے رکھنا یا جو کچھ بھی یا تو کر سکتے ہیں. ہم ایسا کریں گے کے طور پر ہم یہ تھا. صلاحیت >> = 1. اور تم جا 1 جگہ کو کھونے کے بارے میں فکر کرنے کی ضرورت نہیں رہے ہیں کیونکہ تمہیں چھوڑ دیا 1 کی طرف سے منتقل کر دیا گیا ہے، تو 1 جگہ ضروری 0 ہے، اتنا درست 1 کی طرف سے منتقل، آپ اب بھی ٹھیک ہو جائے گا رہے ہیں. [Student کی] کیا آپ کو بدلے اس سے پہلے کرنے کی ضرورت ہے؟ [روب B.] جی ہاں، یہ بالکل نہیں سمجھ میں آتا ہے. اب فرض ہے ہم آخر پر سچا واپس لوٹنے کو ختم کرنے جا رہے ہیں. جس طرح سے ہم ان memmoves کیا کرنے جا رہے ہیں، ہم نے کہ ہم کس طرح ان کے ساتھ محتاط رہنے کی ضرورت ہے. کیا کسی کے پاس کہ ہم کس طرح ان سے کیا کسی بھی تجاویز ہیں؟ یہ ہمارا آغاز ہے. ناگزیر ہے، ہم نے شروع میں دوبارہ شروع کرنا چاہتے ہیں اور وہاں سے نقل چیزیں، 1، 3، 4، 2. تم ایسا کیسے کر سکتا ہوں؟ سب سے پہلے، میں memmove کے لئے مرد صفحہ دوبارہ نظر ہے. Memmove، دلائل کے حکم ہمیشہ ضروری ہے. ہم نے سب سے پہلے ہماری منزل چاہتے ہیں، ذرائع، دوسری، سائز تہائی. کے بہت سے افعال جو منبع اور منزل ریورس ہیں. منزل مقصود کے ذریعہ مطابق کسی حد تک جاتا ہے. منتقل کریں، کیا یہ واپس آ رہا ہے؟ اس منزل پر جو بھی وجہ سے کہ تم چاہتے ہو سکتا ہے کے لئے ایک پوائنٹر واپس،. میں یہ تصویر، پڑھ لیکن ہمیں ہماری منزل میں منتقل کرنے کے لئے کرنا چاہتے ہیں کر سکتے ہیں. ہماری منزل کیا ہے کیا جا رہا ہے؟ [Student کی]. [روب B.] جی ہاں، اور کہاں ہم سے کاپی کر رہے ہیں؟ پہلی بات ہم کاپی کر رہے ہیں یہ 1، 3، 4 ہے. کیا یہ 1، 3، 4. 1 اس کا ایڈریس کیا ہے؟ 1 اس بات کا پتہ کیا ہے؟ [Student کی] [اشراوی] [روب] B. ہیڈ + پہلے عنصر کا پتہ ہے. ہم صف میں پہلا عنصر کو کس طرح حاصل کرتے ہیں؟ [Student کی] قطار. [روب B.] جی ہاں q.strings،. یاد رکھیں، یہاں، ہمارے سر 1 ہے. ارے. میں صرف لگتا ہے جادوئی یہاں، ہمارے سر 1 ہے. میں نے اپنے رنگ کو بھی تبدیل کرنے جا رہا ہوں. اور یہاں تاروں ہے. یہ ہم اسے یا تو لکھنے کے طور پر ہم یہاں کیا کر سکتے ہیں کے ساتھ سر + q.strings. بہت سے لوگ بھی اسے لکھنے اور عمومی q.strings [کے سر]. یہ سچ نہیں ہے کوئی کم موثر ہے. آپ کو اس کے بارے میں سوچو ہو سکتا ہے جیسا کہ وہ محولہ لقب ضبطی اور پھر اس کا ایڈریس حاصل کرنے، لیکن سنکلک یہ جو ہم پہلے ترجمہ ویسے بھی جا رہا ہے، q.strings سر +. یا جس طرح تم نے اس کے بارے میں سوچو کرنا چاہتے ہیں. اور کتنے بائٹس ہم کاپی کرنا چاہتے ہیں؟ [Student کی] صلاحیت - سر. صلاحیت - سر. اور پھر آپ کو ہمیشہ ایک مثال لکھ سکتے تھے یہ اعداد و شمار اگر یہ درست ہے. [Student کی] یہ تو 2 کی طرف سے تقسیم کیا جائے گا کی ضرورت ہے. جی ہاں، تو مجھے لگتا ہے کہ ہم سائز کا استعمال کر سکتے ہیں. ہم اب بھی سائز ہے کیا جا رہا ہے سائز کا استعمال کرتے ہوئے، ہم 4 کے برابر سائز کی ہے. ہماری حجم 4 ہے. ہمارے سر 1 ہے. ہمیں ان 3 عناصر کی کاپی کرنا چاہتے ہیں. یہ وویک اس کے سائز کو چیک کرنے کے لیے - درست طریقے سے سر ہے 3. اور یہاں واپس آ رہا ہے، جیسا کہ ہم نے پہلے کہا، اگر ہم صلاحیت کا استعمال کیا ہے، تو پھر ہم 2 کی طرف سے تقسیم کرنے کی ضرورت ہے. کیونکہ ہم نے پہلے سے ہی ہماری صلاحیت کو بڑے ہو گئے ہو، تو بجائے، ہم فونز کو استعمال کرنے کے لئے جا رہے ہیں. یہ کاپیاں اس حصے. اب، ہم دوسرے حصہ حصہ ہے جو شروع سے رہ گیا ہے کو کاپی کرنے کی ضرورت ہے. یہ کس حالت میں memmove جا رہا ہے؟ [Student کی] پلس سائز - سر. جی ہاں، تو ہم نے پہلے سے ہی سائز میں کاپی کیا ہے - سر بائٹس، اور تو ہم کہاں باقی بائٹس کو کاپی کرنا چاہتے ہیں نیا ہے اور پھر سائز مائنس-ٹھیک ہے، ہم بائٹس کی تعداد پہلے ہی اندر کاپی ہے اور پھر جہاں ہم سے کاپی کر رہے ہیں؟ [Student کی] Q.strings [0]. [روب B.] جی ہاں q.strings،. ہمیں یا تو اور q.strings [0]. کر سکتے ہیں یہ نمایاں طور پر اس سے کم عام ہے. اگر یہ صرف 0 ہونے جا رہا ہے، تو آپ q.strings کو دیکھنے کے لئے کی دیکھ بھال کریں گے. یہ ہے جہاں ہم سے کاپی کر رہے ہیں. کتنے بائٹس ہم کرتے ہیں کاپی چھوڑ دیا ہے؟ >> 10 [Student کی]. ٹھیک ہے. [Student کی] ہم 5 ضرب ہے - 10 بار بائٹس یا کچھ کا سائز جی ہاں، تو یہ جہاں کیا بالکل ہم کاپی کر رہے ہیں ہے؟ [Student کی] [اشراوی] بات ہم کاپی کر رہے ہیں کی قسم کیا ہے؟ [Student کی] [اشراوی] جی ہاں، حروف کی * کہ ہم کاپی کر رہے ہیں، تو ہم جانتے ہیں کہ کہاں سے آ رہے ہیں نہیں ہے. تاروں کی طرح جہاں وہ کی طرف اشارہ کر رہے ہیں، ہم نے قطار پر آگے بڑھانے ختم یا قطار پر enqueuing. کہاں سے آ رہے ہیں، ہم نے کوئی اندازہ نہیں ہے. ہم صرف چار * کے خود کے ٹریک رکھنے کے لئے کی ضرورت ہے. سر بائٹس - ہم سائز کی کاپی کرنے کے لئے نہیں کرنا چاہتا. سر چار * S، - ہم فونز کاپی کرنا چاہتے ہیں تو ہم sizeof (چار *) کی طرف سے اس پر ضرب جا رہے ہیں. اسی یہاں ذیل، سر * sizeof (چار *). [Student کی] کے بارے میں [اشراوی] یہ صحیح ہے؟ [Student کی] نہیں، اس کے نیچے، سائز - سر. [روب B.] یہ ٹھیک ہے؟ پوائنٹر ریاضی. کس طرح پوائنٹر ریاضی کام پر جا رہا ہے قسم ہے کہ ہم کے ساتھ کام کر رہے ہو کے سائز کی طرف سے یہ خود کار طریقے سے multiplies ہے. بس یہاں پسند ہے، نیا + (سائز - سر) بالکل اور نئے [- سر سائز] کے برابر ہے جب تک ہم ہے کہ صحیح طریقے سے کام کرنے کی امید رکھتے ہیں، کے بعد اگر ہم ایک int صف کے ساتھ کام کر رہے ہو، تو پھر ہم انڈیکس int کی طرف سے نہیں یا اگر اس کا 5 سائز کی ہے اور آپ کو 4th عنصر چاہتے ہیں میں، پھر ہم انڈیکس int صف [4]. آپ کو مت پہنچاو [4] int * فونز. کہ یہ خود کار طریقے سے سنبالتی ہے، اور اس حالت لفظی کے برابر ہے، بریکٹ نحو ہے، ذرا اس پر تبدیل کرنے کے طور پر جلد ہی آپ کے طور پر مرتب کیا جا رہا ہے. یہ کچھ آپ کو اس سے ہوشیار رہنے کی ضرورت ہے ہے سر - جب آپ حجم انہوں نے مزید کہا کر رہے ہیں آپ کو ایک بائٹ شامل کر رہے ہیں. آپ ایک چار * انہوں نے کہا کہ رہے ہیں، جس میں ایک بائٹس یا جو کچھ بھی ہو سکتا ہے. دیگر سوال؟ ٹھیک ہے، dequeue آسان ہو جا رہا ہے. میں کو نافذ کرنے کے لئے آپ کو ایک منٹ دے دیں گے. اوہ، اور مجھے لگتا ہے کہ یہ وہی صورت حال ہے جہاں کیا enqueue کیس، اگر ہم شہوت انگیز null enqueuing کر رہے ہیں، شاید ہم اس سے نمٹنے کے لئے چاہتے ہیں، شاید ہم نہیں کرتے ہیں. ہم ایسا نہیں پھر یہاں گا، لیکن ہماری اسٹیک کیس کے طور پر ایک ہی ہے. اگر ہم شہوت انگیز null enqueue، ہم اسے نظرانداز کرنا چاہتے ہیں کر سکتے ہیں. کوئی بھی کچھ کوڈ میں اوپر ھیںچو کر سکتے ہیں ہے؟ [Student کی] میں صرف dequeue ہے. 2 ورژن یہ ٹھیک ہے. آپ کو اس بات کی وضاحت کرنا چاہتے ہیں؟ [Student کی] سب سے پہلے، آپ کو یقینی بنانا قطار میں کچھ ہے اور اس کا سائز 1 کی طرف سے نیچے جا رہا ہے. آپ کو یہ کرنے کی ضرورت ہے، اور پھر آپ سر واپس اور اس کے بعد 1 اپ سربراہ منتقل. ٹھیک ہے، تو ایک کونے ہمیں غور کرنا ہوگا ہے. جی ہاں. [Student کی] اگر اپنے سر آخری عنصر ہے، تو آپ سر صف سے باہر کی طرف اشارہ کرنے کی ضرورت نہیں ہے. جی ہاں، اس طرح جلد ہی سربراہ کے طور پر ہمارے صف کے آخر کے طور پر کام کرنے کے لئے ہوئے مار دیتی ہے، جب ہم dequeue، ہمارے سر واپس 0 modded ہونا چاہئے. بدقسمتی سے، ہم ایک قدم میں ایسا نہیں کر سکتا. میں راستے میں شاید اس کو ٹھیک تھا اندازہ ہے یہ ایک چار * جا رہا ہے، جو ہم واپس لوٹنے رہے ہیں، جو کچھ بھی آپ کے متغیرہ کا نام ہونا چاہتا ہے. پھر ہم ہماری صلاحیت کی طرف سے سر MOD کرنا چاہتے ہیں اور پھر ret واپس. لوگوں کی ایک بہت کچھ ان دونوں کے لیے کیا کر سکتے ہیں یہ you'll کی صورت ہے لوگ کرتے ہیں اگر سر صلاحیت سے زیادہ ہے، سر کرنا - کی صلاحیت ہے. اور اس میں بس جو جدید ہے کے ارد گرد کام کر رہا ہے. ہیڈ MOD = صلاحیت بہت صاف ہے صلاحیت -. سے اگر سر صلاحیت سر سے زیادہ کے ارد گرد ایک ریپنگ کی سوال؟ ٹھیک ہے، آخری بات ہم نے چھوڑ دیا ہے ہمارے منسلک کی فہرست میں ہے. آپ کو منسلک فہرست رویے کی کچھ استعمال کیا جا سکتا ہے اگر آپ نے آپ کے ہیش کے ٹیبل میں فہرست منسلک ہے، اگر آپ کو ایک ہیش میز کیا. مجھے پختہ ہیش میز کر مشورہ دیتے ہیں. آپ نے پہلے ہی ایک trie کیا ہو سکتا ہے، لیکن کوشش کرتا ہے زیادہ مشکل ہے. اصول میں، وہ asymptotically ہو بہتر ہے. لیکن صرف بڑے بورڈ پر دیکھو، کی کوشش کرتا ہے، اور اس سے بہتر کبھی نہیں، اور وہ زیادہ میموری لے. کے بارے میں سب کچھ کرنے کی کوشش کرتا مزید کام کے لئے برا ہونے کے ختم ہو جاتی ہے. ڈیوڈ Malan کا حل ہمیشہ یہ ہے کہ وہ ہمیشہ اپنے trie حل کے خطوط، اور دیکھتے ہیں وہ اس وقت کہاں ہے. کیا وہ میں تھا، ڈیوڈ J؟ تو وہ # 18 ہے، وہ بہت برا نہیں ہے، اور یہ کہ سب سے بہتر میں سے ایک ہونے جا رہا ہے کی کوشش کرتا ہے آپ کے بارے میں سوچ کر سکتے ہیں یا سب سے بہتر میں سے ایک trie کی کوشش کرتا ہے. کیا یہ ان کی اصل حل بھی نہیں ہے؟ مجھے لگتا ہے جیسے trie حل RAM استعمال کی اس حد میں زیادہ ہیں. بہت اوپر نیچے جاؤ، اور RAM استعمال ایک ہندسے میں ہے. نیچے کی طرف جاؤ، اور اس کے بعد آپ کو دیکھ کر کوشش کرتا ہے شروع ، جہاں آپ بالکل بڑے پیمانے پر RAM استعمال اور کوشش کرتا ہے زیادہ مشکل ہے. مکمل طور پر لیکن ایک تعلیمی تجربہ مالیت اگر آپ کو کسی نے نہیں. آخری چیز ہمارے منسلک فہرست ہے، اور ان تین چیزوں، stacks، قطار، اور منسلک کی فہرست کسی بھی مستقبل کی بات ہے تم نے کبھی کمپیوٹر سائنس میں کیا فرض آپ کو ان چیزوں سے واقف ہے. وہ صرف اس لئے سب کچھ بنیادی ہیں. فہرستوں لنک، اور یہاں ہم ایک اکیلے منسلک فہرست ہے ہمارے عملدرآمد ہو جائے گا. مطلب کیا اکیلے منسلک دوگنا منسلک کے خلاف ہے؟ جی ہاں. [Student کی] یہ صرف اگلے پوائنٹر بجائے اشارہ پر بتاتے ہیں، جس طرح اس سے پہلے اور اس کے بعد ایک ہے. جی ہاں، تو تصویر کی شکل میں، جو میں نے ابھی کیا؟ میں دو چیزیں ہیں. میں تصویر اور تصویر ہے. تصویر کی شکل میں، ہمارے اکیلے منسلک کی فہرست ناگزیر ہے، ہم ہماری فہرست کے سربراہ پوائنٹر کسی قسم ہے، اور پھر ہماری فہرست کے اندر اندر، ہم صرف اشارہ ہے، اور اس کے پوائنٹس شاید، شہوت انگیز null. یہ ایک اکیلے منسلک فہرست کی مخصوص ڈرائنگ جا رہا ہے. دوگنا منسلک کی فہرست، آپ کو پیچھے کی طرف جا سکتے ہیں. اگر میں آپ کو فہرست میں کسی بھی نوڈ دے، تو آپ کو لازمی طور پر حاصل کرنے کے لئے کر سکتے ہیں کسی دوسرے نوڈ فہرست میں اگر یہ دوگنا منسلک فہرست ہے. لیکن اگر میں آپ کو فہرست میں تیسرے نوڈ جاتے ہیں اور یہ ایک اکیلے منسلک فہرست ہے، کوئی راستہ نہیں ہے تم نے کبھی پہلے اور دوسرے نوڈس کے حاصل کرنے کے لئے جا رہے ہیں. اور اس کے فوائد اور detriments ہے اور ایک واضح ایک ہے آپ زیادہ سائز، اور آپ کو جہاں اب ان چیزوں کی طرف اشارہ کر رہے ہیں کی یاد رکھیں ہے. لیکن ہم صرف دیکھ بھال کے بارے میں اکیلے منسلک. کچھ چیزیں ہم کو نافذ کرنے کے لئے جا رہے ہیں. آپ کے typedef struct نوڈ، int میں: struct نوڈ * اگلے، نوڈ. آپ کے ذہن میں یہ typedef جل چاہئے. کوئز 1 منسلک فہرست نوڈ کے typedef دے کرنا چاہوں گا، اور آپ کو فوری طور پر اسے نیچے scribble کے قابل ہونا چاہئے بغیر یہاں تک کہ اس کے بارے میں سوچ رہا تھا. میں نے ایک دو سوال لگتا ہے، ہمیں ضرورت ہے یہاں struct کیوں؟ ہم نوڈ * کہہ سکتے ہیں کیوں نہیں؟ [Student کی] [اشراوی] جی ہاں. صرف ایک ہی چیز ہے جو کسی چیز کے طور پر ایک نوڈ کی وضاحت کرتا ہے typedef خود ہے. لیکن جیسا کہ اس بات، جب ہم اس struct نوڈ تعریف کے ذریعے کی تصریف کی طرح ہو، ہم اپنے typedef ختم نہیں ابھی تک کے بعد typedef ابھی ختم نہیں ہوا ہے، نوڈ کا کوئی وجود نہیں ہے. لیکن struct نوڈ کرتا ہے، اور یہاں میں اس نوڈ یہ بھی کچھ اور کہا جا سکتا ہے. یہ (ن) کہا جائے گا کیا جا سکتا ہے. یہ منسلک فہرست نوڈ کہا جا سکتا ہے. یہ کچھ کہا جا سکتا ہے. لیکن یہ struct نوڈ اس struct نوڈ کے طور پر ایک ہی بات کہتے جائے گا کی ضرورت ہے. ، آپ کیا کہتے ہیں یہ بھی یہاں ہے اور اسی طرح وہ بھی سوال کی دوسری بات کا جواب ہے یہی وجہ ہے کہ ایک، اوقات جب آپ structs اور structs کے typedefs دیکھ بہت آپ کو گمنام structs یہ دیکھنے کی ضرورت ہے جہاں آپ typedef struct صرف دیکھیں گے، کے نفاذ struct، لغت، یا جو کچھ بھی. ہم نوڈ کا کہنا ہے کہ میں یہاں کیوں ضرورت ہے؟ یہ ایک گمنام struct کیوں نہیں ہو سکتا؟ یہ تقریبا وہی جواب ہے. [Student کی] آپ struct کے اندر اندر اس سے رجوع کرنے کی ضرورت ہے. جی ہاں، struct کے اندر اندر، آپ struct خود سے رجوع کرنے کی ضرورت ہے. اگر آپ struct نہیں دیتے ایک کا نام، اگر یہ ایک گمنام struct ہے، آپ اس کا حوالہ نہیں کر سکتا. اور آخری لیکن کم از کم یہ نہیں ہونا چاہئے کسی حد تک براہ راست وہ مدد اور تمہیں احساس اگر آپ کو یہ لکھ رہے ہیں کہ آپ کچھ غلط کر رہی ہے اگر ان طرح کی چیزوں کی سمجھ میں نہیں رہے ہیں. آخری لیکن نہیں کم از کم یہ struct نوڈ * کیوں ہے؟ یہ صرف کیوں نہیں نوڈ آئندہ سکتے ہیں struct؟ [Student کی] اگلے struct اشارہ. یہ ناگزیر ہے جو ہم چاہتے ہیں. یہ کبھی نہیں کیوں struct اگلے نوڈ ہو سکتا ہے؟ struct اگلے * نوڈ کیوں ہے؟ جی ہاں. [Student کی] یہ ایک لامحدود لوپ کی طرح ہے. جی ہاں. [Student کی] یہ ایک میں سب ہو جائے گا. جی ہاں، صرف کے بارے میں سوچو کہ ہم کس طرح کے سائز یا کچھ کرنا ہوگا. struct کے سائز کو بنیادی طور پر ہے + یا - کچھ یا پیٹرن. یہ بنیادی طور پر struct میں چیزوں کے سائز کی رقم ہونے جا رہا ہے. یہ ٹھیک ہے، کچھ بھی تبدیل کرنے کے بغیر، سائز آسان ہو رہا ہے. struct نوڈ کے سائز میں اگلے + سائز کے سائز کی جا رہی ہے. میں کا سائز 4 بننے جا رہا ہے. اگلے کا حجم 4 بننے جا رہا ہے. struct نوڈ کا سائز 8 جا رہا ہے. اگر ہم * نہیں ہے، sizeof کے بارے میں سوچ رہا ہے، تو (میں) sizeof 4 بننے جا رہا ہے. struct نوڈ کے سائز اگلے میں کا سائز struct اگلے نوڈ کے + سائز کی جا رہی ہے + struct اگلے نوڈ کے + سائز کے فونز. یہ مراکز کی ایک لامحدود تکرار ہو جائے گی. یہی وجہ ہے کہ اس طرح چیزوں. ایک بار پھر، ضرور اس حفظ، یا کم از کم اس کے لئے کافی سمجھتے ہیں کہ آپ کو کرنے کے قابل ہو سکتا ہے کیا اس طرح نظر آنا چاہئے کے ذریعے کی وجہ سے ہے. چیزوں کو ہم پر عملدرآمد کرنا چاہتے ہیں جا رہے ہیں. اگر کی لمبائی کی فہرست آپ کو دھوکہ اور ایک کے ارد گرد رکھ سکتا عالمی لمبائی یا کچھ اور، لیکن ہم ایسا نہیں کر رہے ہیں. ہم فہرست کی لمبائی گننے جا رہے ہیں. تو ہم پر مشتمل ہے، جو کہ بنیادی طور پر تلاش کی طرح ہے، تو ہم integers کی ایک لنک کی فہرست اگر یہ عددی منسلک فہرست میں ہے دیکھنے کے لئے ہے. Prepend کی فہرست کے شروع میں شامل کرنے کے لئے کی جا رہی ہے. شامل آخر میں شامل کرنے کے لئے کی جا رہی ہے. Insert_sorted فہرست میں کے مطابق کی پوزیشن میں شامل کرنے کے لئے کی جا رہی ہے. کی طرح Insert_sorted سنبھالنے ہے کہ آپ prepend کبھی استعمال نہیں یا برے طریقے سے شامل ہے. جب تم insert_sorted Insert_sorted پر عملدرآمد کر رہے ہیں چلو کا کہنا ہے کہ ہم اپنے منسلک فہرست ہے. یہ وہی ہے جو اس وقت کی طرح، 2، 4، 5، لگتا ہے. میں 3 کو شامل کرنے کے لئے، تو جب تک کے طور پر فہرست میں خود کو پہلے ہی کے مطابق ہے کرنا چاہتے ہیں، جہاں 3 سے تعلق رکھتا ہے ہے تلاش کرنے کے لئے یہ آسان ہے. میں 2 بجے شروع ہو جاتے ہیں. ٹھیک ہے، 3 2 سے بڑا ہے، تو میں جا رہا ہوں رکھنے کے لئے چاہتے ہیں. اوہ، 4 بہت بڑا ہے، تو میں جانتا ہوں کہ 3 2 اور 4 کے درمیان میں جا رہا ہے، اور میں اشارہ اور یہ سب چیزیں ٹھیک ہے. لیکن اگر ہم insert_sorted سختی نہیں کیا استعمال کرتے ہیں، دو کی طرح کا کہنا ہے کہ میں 6 prepend تو میرا منسلک فہرست اس بننے جا رہا ہے. اب یہ کوئی احساس نہیں کرتا ہے، تو insert_sorted کے لئے، آپ کو صرف فرض کر سکتے ہیں اس فہرست کے مطابق، اگرچہ آپریشن موجود ہے جو اس کے مطابق نہیں رکھا جائے کی وجہ سے ہے، اور یہ کہ یہ کر سکتے ہیں. ایک مفید ڈالیں تو تلاش ان اہم چیزیں آپ کو نافذ کرنے کے لئے جا رہے ہیں ہیں. اب کے لیے، ایک منٹ لمبائی کرنا اور پر مشتمل ہے، اور ان کے نسبتا جلد ہونا چاہئے. اختتامی وقت قریب آ رہی ہے، تو کسی کی حد کے لئے کچھ بھی ہے یا پر مشتمل ہے؟ وہ تقریبا ایک جیسی ہو جا رہے ہیں. [Student کی] لمبائی. چلو دیکھتے ہیں، نظرثانی کی. ٹھیک ہے. آپ کو اس بات کی وضاحت کرنا چاہتے ہیں؟ [Student کی]، میں صرف ایک پوائنٹر نوڈ بنانے اور اسے سب سے پہلے ہے، جو ہمارے عالمی متغیر ہے ابتدا اور اس کے بعد میں اگر وہ شہوت انگیز null ہے اس لئے میں نے ایک غلطی seg حاصل نہیں ہے اور 0 اگر یہ بات ہے واپس دیکھنے کے چیک کرنے کے لیے. دوسری صورت میں، میں کے ذریعے لوپ، عددی کے اندر اندر کا ٹریک رکھنے کتنی بار میں نے فہرست کے اگلے عنصر کو حاصل کیا ہے اور ایک ہی اضافہ آپریشن میں بھی ہے کہ اصل عنصر تک رسائی حاصل کریں، اور پھر میں مسلسل چیک دیکھتے ہیں اگر یہ شہوت انگیز null ہے، اور اگر وہ شہوت انگیز null ہے، تو اس aborts اور صرف عناصر میں حاصل کیا ہے کی تعداد واپس. [روب B.] کسی کو کچھ پر کوئی تبصرہ ہے؟ اس کا لگتا ہے ٹھیک درست دانشمندانہ ہے. [Student کی] مجھے نہیں لگتا ہے کہ آپ نوڈ == شہوت انگیز null کی ضرورت ہے. جی ہاں، اگر نوڈ == شہوت انگیز null واپسی 0. لیکن اگر نوڈ، شہوت انگیز null == تو اس اوہ، وہاں ایک درست کا مسئلہ ہے. یہ صرف تم میں واپس لوٹنے کر رہے ہیں، لیکن اس کے دائرہ کار میں نہیں ہے ابھی. تم بس int مجھے اس کی ضرورت ہے، تو میں = 0. لیکن اگر نوڈ، شہوت انگیز null ہے، تو میں اب بھی 0 ہو جا رہا ہے، تو اور ہم 0 واپس جا رہے ہیں، اس صورت ایک جیسی ہے. اعلان رکھنے کے لئے ایک اور عام بات ہے لوپ کے لئے نوڈ کے اندر. آپ کہتے ہیں کہ اوہ کر سکتے ہیں، نہیں. چلو، اس کے طور پر رکھ. میں int میں = یہاں 0 شاید ڈال دیں گے، پھر نوڈ * نوڈ = یہاں پہلے. اور شاید یہ ہے اب اس سے چھٹکارا کیسے حاصل کرنے. شاید یہ ہے کہ میں اسے کس طرح لکھا کریں گے. آپ اس طرح اس میں بھی دیکھ سکتا ہے. لوپ ساخت کے لئے ٹھیک ہے یہاں یہ int میں 0 = تقریبا کے طور پر کے طور پر آپ کو قدرتی ہونا چاہئے میں صف کی لمبائی سے بھی کم وقت میں + +. اگر وہ ہے کہ آپ کس طرح ایک صف پر iterate، یہ ہے کہ آپ ایک لنک کی فہرست پر iterate. یہ کچھ نقطہ پر دوسری نوعیت کا ہونا چاہئے. ذہن میں اس کے ساتھ اس کے تقریبا ایک ہی بات کی جا رہی ہے. آپ کو ایک لنک فہرست iterate کرنا چاہتے ہیں جا رہے ہیں. نوڈ مجھے کوئی اندازہ نہیں ہے کیا قیمت کہا جاتا ہے ہے. اگر میں نوڈ. اگر اس نوڈ میں قدر = مجھے سچا واپس اور یہ کہ یہ ہے. کہ نوٹس ایک ہی راستہ ہے جس سے ہم نے کبھی بھی جھوٹے واپس اگر ہم پورے منسلک فہرست پر iterate اور سچ کبھی واپس نہیں ہے، تاکہ اس کا کیا. کی طرف براہ مہربانی نوٹ کریں شاید ہم ملحق یا prepend پر نہیں ملے گا. فوری آخری نوٹ. اگر آپ کو مستحکم مطلوبہ الفاظ کو دیکھ، تو چلو مستحکم int شمار = 0 کا کہنا ہے کہ، تو پھر ہم شمار کرتے ہیں +، +، آپ کو اس کا بنیادی طور پر ایک عالمی متغیر کے طور پر سوچ سکتے ہیں اگرچہ میں نے کہا کہ یہ نہیں ہے کہ ہم کس طرح کی حد کو لاگو کرنے کے لئے جا رہے ہیں. میں نے یہ یہاں کیا کر رہا ہوں، اور پھر + + شمار. کوئی راستہ ہے جس سے ہم ہمارے منسلک فہرست ہم ہماری شمار incrementing کر رہے ہیں میں ایک نوڈ داخل کر سکتے ہیں. اس کی بات یہ ہے کہ مستحکم مطلوبہ الفاظ کا مطلب ہے کہ. اگر میں صرف int شمار تھا = 0 ہے کہ ایک باقاعدہ پرانے عالمی متغیر ہو جائے گا. مستحکم int شمار کا مطلب یہ ہے کہ اس فائل کے لئے ایک عالمی متغیر ہے. یہ کسی اور فائل کے لئے ناممکن ہے، 5 pset کے بارے میں سوچو، اگر آپ کو شروع کر دیا ہے. تم دونوں speller.c ہے، اور آپ dictionary.c ہے، اور اگر آپ نے ابھی ایک عالمی چیز کا اعلان، speller.c میں تو کچھ dictionary.c اور اس کے برعکس میں حاصل کیا جا سکتا ہے. عالمی متغیر کسی بھی سی فائل. کی طرف سے قابل رسائی ہیں، لیکن مستحکم متغیر صرف فائل کے اندر اندر سے قابل رسائی ہیں، تو، اندر ہجے پڑتال کار یا dictionary.c کے اندر یہ کس طرح میں اپنے صف کے سائز کے لئے اپنی متغیر کا اعلان کریں گے قسم ہے یا لغت میں الفاظ کی تعداد کا سائز. چونکہ میں ایک عالمی متغیر کا اعلان ہے کہ کسی کو رسائی حاصل ہے نہیں کرنا چاہتے ہیں، میں نے اس کے بارے میں واقعی صرف اپنے اپنے مقاصد کے لئے دیکھ بھال. اس کے بارے میں اچھی بات بھی پورے نام کے تصادم کا سامان ہے. اگر کسی اور فائل نامی ایک عالمی شمار متغیر کو استعمال کرنے کے لئے کی کوشش کرتا ہے، چیزیں بہت، بہت غلط جاتے ہیں، تو یہ اچھی طرح سے چیزوں کو محفوظ رکھتا ہے، اور صرف تم اس تک رسائی حاصل کر سکتے ہیں، اور کوئی نہیں، اگر کسی اور نامی ایک عالمی شمار متغیر کی یہ وانی ہے، کر سکتے ہیں اور تو یہ اپنے مستحکم کہا جاتا شمار متغیر کے ساتھ مداخلت نہیں کرے گا. اس کا ہے جو مستحکم ہے. یہ ایک فائل عالمی متغیر ہے. کچھ پر سوال؟ سب تیار ہے. بای. [CS50.TV]