روب Bowden: ہیلو. میں روب ہوں، اور لشکر طیبہ کی ہیش اس حل سے باہر. لہذا ہم یہاں لاگو کرنے کے لئے جا رہے ہیں ایک عام ہیش کی میز. ہم دیکھتے ہیں کہ ہماری ہیش کی struct نوڈ ٹیبل اس طرح نظر آئے جا رہا ہے. تو یہ ایک چار لفظ ہے جا رہا ہے سائز لمبائی کے علاوہ 1 کی صف. زیادہ سے زیادہ 1 نہیں بھولنا لغت میں لفظ 45 حروف، اور پھر ہم جا رہے ہیں کے لئے ایک اضافی کردار کی ضرورت الٹا سلیش 0. اور پھر ہر میں ہمارے ہیش کی میز بالٹی ذخیرہ کرنے کے لئے کی جا رہی ہے ایک نوڈس کے لنک کی فہرست. ہم یہاں کی تحقیقات لکیری نہیں کر رہے ہیں. اور اس حکم میں اگلے سے منسلک کرنے کی بالٹی میں عنصر، ہم ایک کی ضرورت ہے struct نوڈ * اگلا، دوسرا. تو ہے کہ ایک نوڈ کی طرح لگتا ہے ہے. اب، یہاں اعلان ہے ہماری ہیش ٹیبل کے. یہ 16.384 بالٹیاں کر جا رہا ہے، لیکن ہے یہ تعداد واقعی کوئی فرق نہیں پڑتا. اور آخر میں، ہم جا رہے ہیں عالمی متغیر hashtable_size، جس 0 طور پر شروع کرنے کے لئے جا رہا ہے، اور یہ ہے کا ٹریک رکھنے کے لئے کی جا رہی ہے کہ کس طرح بہت سے الفاظ ہماری لغت میں تھے. ٹھیک ہے. تو لوڈ میں ایک نظر ڈالیں. تو اس کا بوجھ محسوس، یہ ایک bool واپس. اس کامیابی کے ساتھ تھا تو آپ حقیقی واپس دوسری صورت میں بھاری بھرکم اور جھوٹے. اور یہ ایک CONST چار * سٹار لیتا ہے ڈکشنری ہے جو لغت، ہم کو کھولنے کے لئے چاہتے ہیں. تو ہے کہ سب سے پہلی چیز ہے ہم کیا کرنے جا رہے ہیں. ہم لغت fopen کی جا رہے ہیں پڑھنے، اور ہم جا رہے ہیں یہ اگر ایسا ہے تو کامیاب ہو اس بات کو یقینی بنانے کے لئے یہ نل واپس، پھر ہم نے نہیں کیا کامیابی کے ساتھ ڈکشنری کھولنے اور ہم جھوٹے واپس کرنے کی ضرورت ہے. لیکن اس کامیابی کے ساتھ کیا ہے کہ سنبھالنے کھولیں، تو ہم پڑھنے کے لئے چاہتے ہیں، ڈکشنری. ہم نے کچھ جب تک تو looping کے رکھنے کے اس سے باہر کو توڑنے کے لئے کی وجہ سے ہم دیکھیں گے جس میں لوپ. تو looping کے رکھنے کے، اور اب ہم جا رہے ہیں ایک نوڈ malloc پر. اور ظاہر کی، ہم چیک غلطی کرنے کی ضرورت ہے پھر mallocing کامیاب نہیں اگر ایسا ہے تو اور ہم ہے کہ ہم کسی بھی نوڈ اتارنا کرنا چاہتے ہیں پہلے malloc پر ہوا، بند لغت اور جھوٹے واپس. لیکن اس کو نظر انداز، سنبھالنے ہم کامیاب، تو ہم fscanf استعمال کرنا چاہتے ہیں کی طرف سے ایک ایک لفظ پڑھنے کے لئے ہمارے ہمارے نوڈ ڈکشنری. تو اس اندراج> لفظ یاد چار لفظ سائز لمبائی کے بفر کے علاوہ ہم جا رہے ہیں کہ ایک اندر لفظ کی دکان تو fscanf 1 کے طور پر طویل عرصے سے واپس جا رہا ہے اس کامیابی کے ساتھ ایک پڑھنے کے قابل تھا فائل سے لفظ. ایک غلطی یا تو ہوتا ہے یا ہم تک پہنچ جائیں تو فائل کے آخر میں، یہ نہیں کریں گے اگر ایسا نہیں ہوتا جس صورت میں واپس 1 1 واپس، ہم آخر میں کو توڑنے کے لئے جا رہے ہیں اس دیر لوپ سے باہر. تو ہم دیکھتے ہیں کہ ہم کامیابی کے ساتھ ایک بار میں ایک لفظ پڑھا ہے اندراج> لفظ، پھر ہم ہیش کرنے جا رہے ہیں ہماری ہیش تقریب کا استعمال کرتے ہوئے ہے کہ لفظ. کی پر ایک نظر ڈالیں ہیش تقریب. تو کیا تم واقعی ضرورت نہیں ہے اس کو سمجھنے کے لئے. اور اصل میں، ہم صرف اس کو نکالا انٹرنیٹ سے تقریب ہیش. آپ کی شناخت کرنے کی ضرورت ہے صرف ایک ہی چیز ہے یہ ایک CONST چار * لفظ لیتا ہے، تو یہ ان پٹ کے طور پر ایک تار لینے اور ہے پیداوار کے طور پر ایک int اہستاکشرت واپس لوٹنے کے. تو یہ سب ایک ہیش تقریب ہے، یہ ہے ایک ان پٹ میں لیتا ہے، یہ آپ کو ایک دیتا ہے ہیش ٹیبل میں انڈیکس. ہم NUM_BUCKETS کی طرف سے modding کر رہے ہیں تو ہیش قیمت واپس اصل میں ہیش ٹیبل میں ایک انڈیکس ہے اور کرتا ہے سے باہر نہیں انڈیکس صف کی حد. تو ہیش تقریب، ہم جا رہے ہیں کہ دی ہم نے پڑھا ہے کہ لفظ ہیش لغت سے اور پھر ہم جا رہے ہیں کہ استعمال کرنے کے لئے شامل کرنے کے لئے ہے ہیش ٹیبل میں اندراج. اب، hashtable ہیش موجودہ ہے منسلک ہیش ٹیبل میں فہرست، اور یہ صرف نل ہے کہ بہت ممکن ہے. ہم پر ہماری اندراج داخل کرنا چاہتے ہیں اس سے منسلک فہرست کے آغاز، اور تو ہم اپنے موجودہ اندراج لئے جا رہے ہیں فی الحال کیا ہیش کی میز کی طرف اشارہ پوائنٹس اور پھر ہم ذخیرہ کرنے کے لئے جا رہے ہیں ہیش میں ہیش ٹیبل میں موجودہ اندراج. تو یہ دو لائنوں کی کامیابی کے ساتھ داخل کے آغاز میں اندراج کہ انڈیکس میں منسلک فہرست ہیش ٹیبل میں. ہم نے اس کے ساتھ کیا کر رہے ہیں ایک بار، ہم جانتے ہیں ہم میں ایک لفظ پایا جاتا ہے لغت اور ہم ایک بار پھر اضافہ. تو ہم کیا کر رکھیں کہ fscanf تک آخر میں غیر کچھ 1 واپس جس نقطہ ہم کرنے کی ضرورت ہے یاد ہے کہ مفت انٹری، تو یہاں، ہم نے ایک malloced اندراج اور ہم کچھ پڑھنے کے لئے کی کوشش کی لغت سے. اور ہم کامیابی کے ساتھ نہیں پڑھا ڈکشنری سے کچھ جس میں کیس ہم کہ ہم اندراج آزاد کرنے کی ضرورت اصل میں ہیش ٹیبل میں ڈال کبھی نہیں اور آخر میں توڑ. ہم باہر کو توڑنے کے بعد، ہم، ٹھیک ہے، یہ دیکھنے کی ضرورت ہم کیونکہ وہاں توڑا ایک خرابی فائل سے پڑھنے، یا کیا گیا ہم تک پہنچ گئی کیونکہ ہم باہر توڑ دیا فائل کے آخر؟ ایک خامی تھی، تو ہم کرنا چاہتے ہیں لوڈ نہیں کیا کیونکہ جھوٹے واپس کامیاب، اور اس عمل میں، ہم چاہتے ہیں ہم نے پڑھا ہے کہ تمام الفاظ اتارنا اور ڈکشنری فائل بند. ہم کامیاب کیا سمجھتے ہوئے، تو ہم صرف اب بھی لغت کو بند کرنے کی ضرورت ہے فائل، اور آخر کے بعد سے حقیقی واپس ہم کامیابی کے ساتھ بھری ہوئی ہے ڈکشنری. اور یہ کہ لوڈ کے لئے ہے. تو اب ایک بھاری بھرکم ہیش ٹیبل دیا، چیک، اس طرح نظر آئے جا رہا ہے. لہذا، یہ ایک bool واپس، چیک کرنے کے لیے جس اس بات کی نشاندہی کی جا رہی ہے کہ آیا ایوان میں چار * لفظ، چاہے ایوان میں سٹرنگ ہماری لغت میں ہے. لغت میں ہے اگر ایسا ہے تو، اگر یہ ہے ہماری ہیش ٹیبل میں، ہم واپس آ جائیں گے یہ سچ ہے، اور اگر یہ نہیں ہے، ہم جھوٹے واپس آ جائیں گے. اس ایوان میں لفظ کو دیکھتے ہوئے، ہم لفظ ہیش کرنے کے لئے جا. اب، کو تسلیم کرنے کے لئے ایک اہم بات یہ ہے لوڈ میں، ہم جانتے تھے کہ اس کے تمام الفاظ کم کیس ہو جا رہے تھے، لیکن یہاں، ہم نے اس بات کا یقین نہیں کر رہے ہیں. ہم اپنے ہیش تقریب پر ایک نظر ڈالیں تو، اصل میں ہمارے ہیش تقریب ہر کردار lowercasing ہے لفظ کے. تو اس سے قطع نظر کے بڑے حروف تہجی کے لفظ، ہماری ہیش تقریب کی جا رہی ہے جو کچھ بھی کے لئے ایک ہی انڈیکس واپس بڑے حروف تہجی یہ ہو گا کے طور پر ہے ایک مکمل طور پر چھوٹے کے لئے واپس لفظ کے ورژن. ٹھیک ہے. جس سے کہ ہماری انڈیکس ہے. یہ اس لفظ کے لئے ہیش کی میز ہے. اب، لوپ کے لئے اس کی جا رہی ہے منسلک فہرست پر کرنے کے لئے کہ انڈیکس میں تھا. تو ہم اندراج ابتدا کر رہے ہیں نوٹس اس انڈیکس کی طرف اشارہ. ہم اندراج کرتا ہے جاری رکھنے کے لئے جا رہے ہیں نہیں برابر نل، اور یاد رکھیں کہ ہمارے منسلک فہرست میں پوائنٹر کو اپ ڈیٹ اندراج اگلا اندراج> کے برابر، تو ہے ہماری موجودہ انٹری پوائنٹ منسلک فہرست میں اگلے آئٹم. ٹھیک ہے. تو منسلک فہرست میں ہر اندراج کے لئے، ہم strcasecmp استعمال کرنے کے لئے جا رہے ہیں. یہ strcmp نہیں ہے کیونکہ ایک بار پھر، ہم insensitively چیزوں کیس کرنا چاہتے ہیں. تو ہم نے لفظ موازنہ کرنے strcasecmp استعمال کہ اس تقریب میں منظور کیا گیا تھا لفظ کے خلاف اس اندراج میں ہے. یہ 0 واپس تو، کہ تھا کا مطلب ہم چاہتے ہیں جس صورت میں ایک میچ، سچ واپس. ہم نے کامیابی مل گیا ہماری ہیش ٹیبل میں لفظ. ایک میچ وہاں نہیں تھا، تو ہم ہیں پھر لوپ پر جا کر اور پر نظر اگلا اندراج. اور ہم جبکہ وہاں looping کی جاری رکھیں گے اس سے منسلک فہرست میں اندراجات ہیں. ہم توڑ تو کیا ہوتا لوپ کے لئے اس سے باہر؟ کہ ہم ایک اندراج کو تلاش نہیں کیا مطلب ہے کہ جس صورت میں، اس لفظ کے ملاپ ہم اس بات کی نشاندہی کرنے کے لئے جھوٹے واپس کہ ہماری ہیش ٹیبل اس لفظ پر مشتمل نہیں تھا. اور اس چیک کے لئے ہے. ٹھیک ہے. تو سائز میں ایک نظر ڈالیں. اب، سائز بہت آسان ہو جا رہا ہے کے بعد سے ہر لفظ کے لئے، لوڈ میں یاد ہم ایک عالمی incremented کیا پایا متغیر hashtable_size. تو سائز تقریب صرف ہے عالمی واپس جا متغیر، اور یہ کہ یہ ہے. اب آخر میں، ہم خالی کرنے کی ضرورت ہے لغت میں سب کچھ کیا ہے ایک بار. تو ہم کس طرح ایسا کرنے کے لئے جا رہے ہیں؟ یہاں، ہم سب سے زیادہ looping کر رہے ہیں ہماری ہیش کی میز کی بالٹیاں. تو NUM_BUCKETS بالٹیاں ہیں. اور ہماری ہیش میں ایک لنک کی فہرست کے لئے میز، ہم لوپ کے لئے جا رہے ہیں لنک کی فہرست کے مکمل طور پر ہر عنصر آزاد. اب، ہم محتاط رہنے کی ضرورت، تو ہم یہاں ہے کہ ایک عارضی متغیر ہے اگلا پوائنٹر ذخیرہ کرنے منسلک فہرست میں عنصر. اور پھر ہم ڈاؤن لوڈ، اتارنا کرنے کے لئے جا رہے ہیں موجودہ عنصر. ہمیں کے بعد ایسا اس بات کا یقین کرنے کی ضرورت ہے صرف موجودہ عنصر کو آزاد نہیں کر سکتے ہیں اور پھر اگلے پوائنٹر تک رسائی حاصل کرنے کی کوشش کریں کے بعد ایک بار ہم نے اسے آزاد کر دیا میموری غلط ہو جاتا ہے. تو ہم پر ایک پوائنٹر کے ارد گرد رکھنے کی ضرورت ہے اگلے عنصر، پھر ہم آزاد کر سکتے ہیں موجودہ عنصر، اور پھر ہم کو اپ ڈیٹ کر سکتے ہیں، کی طرف اشارہ کرنے کے لئے ہماری موجودہ عنصر اگلے عنصر. ہم عناصر لوپ ہیں کریں گے جبکہ اس سے منسلک فہرست میں. ہم میں تمام منسلک کی فہرست لئے کیا کریں گے ہیش کی میز، اور ہم کیا کر رہے ہیں ایک بار اس کے ساتھ، ہم مکمل طور پر اتار دیا ہے ہیش کی میز، اور ہم کیا کر رہے ہیں. تو یہ unloads کے لئے کبھی بھی ناممکن ہے جھوٹے واپس، اور ہم کیا کر رہے ہیں، تو ہم صرف سچ واپس.