[Powered by Google Translate] [অনুচ্ছেদ 6] [আরো আরামদায়ক] [Rob Bowden] [হার্ভার্ড বিশ্ববিদ্যালয়] [এটি CS50.] [CS50.TV] আমরা আমাদের প্রশ্নের অধ্যায় আগাইয়া করতে পারেন. আমি স্থান আগে জন্য URL পাঠানো হয়. প্রশ্নের বিভাগে প্রথম বলতে- দৃশ্যত আমি সম্পূর্ণরূপে unsick-একটি খুব সহজ প্রশ্ন না সারাংশ শুধু valgrind হয়? Valgrind কি করবেন? কেউ কি আছে valgrind বলতে চান? [ছাত্র] চেক মেমরি তথ্য ফাঁসের. হাঁ, valgrind একটি সাধারণ মেমরি পরীক্ষক. শেষে বলা যায়, আপনি বলে যদি আপনার কোন মেমরি তথ্য ফাঁসের আছে, যা বেশীর ভাগই আমরা কি কারণ জন্য এটি ব্যবহার করছেন আপনি চাইলে সমস্যা সেট অথবা আপনি যদি চান ভাল করতে বড় জাহাজে পাওয়ার জন্য, আপনার সবটা কোন মেমরি তথ্য ফাঁসের প্রয়োজন আছে, এবং যদি আপনি একটি মেমরি লিক যে আপনি খুঁজে পাওয়া যায়, মন যে যখনই আপনি একটি ফাইল খোলার জন্য রাখা এবং যদি আপনি এটি বন্ধ না, যে একটি মেমরি লিক. মানুষ অনেক কিছু নোডের জন্য যে তারা freeing করছি না হয় যখন সত্যিই, তারা খুব অভিধান প্রথম ধাপে বন্ধ করে থাকেন না. এটা আপনাকে বলে যদি আপনি কোনো অবৈধ আছে সার্চ বা লিখছে, যার মানে হচ্ছে যদি আপনি চেষ্টা এবং একটি মান সেট যে গাদা শেষে এর পরেও এবং এটি seg ফল্ট না ঘটতে না কিন্তু valgrind ক্যাচ এটি, হিসাবে আপনি আসলে লেখা উচিত হইনি আছে, এবং তাই আপনি স্পষ্টভাবে হয় যারা কোনো না থাকা উচিত. আপনি কিভাবে ব্যবহার valgrind? আপনি কিভাবে ব্যবহার valgrind? এটা একটা সাধারণ প্রশ্ন মত এবং এটি চালানোর আউটপুট তাকান. আউটপুট বার অনেক হয় অপ্রতিরোধ্য. এর রয়েছে মজা ত্রুটি যেখানে আপনি যদি কিছু ভুল ভয়ঙ্কর জিনিস আছে একটি লুপ ঘটছে, তারপর অবশেষে বলে, পথ অনেক ত্রুটি "হবে. আমি যাও গণনা এখন থামবে না. করছি " এটি মূলত এর পাঠগত আউটপুট যে আপনি পার্স করতে আছে. শেষ পর্যন্ত, এটি কোনো মেমরির তথ্য ফাঁসের যে আপনি আপনাকে বলতে হবে, কতগুলি ব্লক, যা উপযোগী হতে পারে কারণ যদি এটা এক ব্লক unfreed তারপর, এটা সাধারণত সহজে সেটি খুঁজে পেতে তুলনায় 1,000 ব্লক unfreed. 1,000 unfreed ব্লক সম্ভবত মানে আপনি freeing করছি না আপনার লিঙ্ক তালিকা সুসংগত বা কিছু বলেছিলাম. যে valgrind না. এখন আমরা প্রশ্ন আমাদের অধ্যায় আছে, যা আপনাকে ডাউনলোড করতে হবে না. আপনি আমার নামের উপর এবং তাদের বৈঠাচালনা স্থান আপ ক্লিক করতে পারেন. সম্পর্কে এখন ক্লিক করুন. পরিবর্ধন ও পরিবর্তন তালিকা 1 স্ট্যাকের, যা প্রথম আমরা করছেন হতে হবে. পরিবর্ধন ও পরিবর্তন তালিকা 2 কিউ, পরিবর্ধন ও পরিবর্তন করা এবং 3 একেলা লিঙ্ক তালিকা হবে. আমাদের স্ট্যাকের সঙ্গে শুরু হয়. হিসাবে এটা এখানে বলছেন, একটি স্ট্যাক সবচেয়ে মৌলিক এক, মৌলিক কম্পিউটার বিজ্ঞানের তথ্য কাঠামোকে সমৃদ্ধ করা. খুব prototypical উদাহরণ হল ভোজনশালা মধ্যে ট্রে এর স্তুপ. এটি মূলত এর যখনই আপনি একটি স্ট্যাকে ব্যবহার করা হয়, কেউ বলে, যাচ্ছে "ট্রে একটি স্ট্যাক ভালো ওহ,." হয় আপনি ট্রে আপ গাদা. তারপর আপনি যখন একটি ট্রে বৈঠাচালনা যান, প্রথম ট্রে যে টানা এর শুরু হয় গত এক যে স্ট্যাক করা হয়. এটি মত স্ট্যাকের এখানে-বলছেন আমরা মেমরির অংশ বলা স্ট্যাকের আছে. এবং কেন তা বলা হয় স্ট্যাকের? কারণ মত একটি স্ট্যাক ডাটা স্ট্রাকচার, এটি push কর্মের এবং স্ট্যাক স্ট্যাকের ফ্রেম পপ, যেখানে স্ট্যাকের ফ্রেম একটি নির্দিষ্ট একটি ফাংশন কল এর মত. এবং একটি স্ট্যাক ভালো, আপনি সবসময় ফিরে থাকবে একটি ফাংশন কল থেকে আপনি আগে নিম্ন স্ট্যাকের মধ্যে ফ্রেম পেতে আবার বাড়তেও পারে. আপনি প্রধান কল কল foo বিন্যাস এবং বার বার ফিরে যাও প্রধান সরাসরি থাকতে পারে না. এটা সবসময় এর সঠিক স্ট্যাকের ঠেলাঠেলি এবং পপিং অনুসরণ না. দুটি অপারেশন, যেমন আমি তাকে বললাম, হয় ধাক্কা এবং পপ. সেগুলো হল বিশ্বজনীন পরিভাষা. আপনি stacks কোনো ব্যাপার শর্তাবলী ধাক্কা এবং পপ জানা উচিত. আমরা queues বিভিন্ন ধরনের দেখতে পাবেন. এটি একটি সার্বজনীন শব্দটি সত্যিই নেই, কিন্তু ধাক্কা এবং পপ হয় stacks জন্য সার্বজনীন. স্ট্যাকের মধ্যে push করা হয় এবং মাত্র রাখে. পপ হয় স্ট্যাকের নিতে হবে. এবং আমরা এখানে দেখতে আমরা আমাদের typedef struct স্ট্যাকের আছে, তাই আমরা গৃহস্থালি ** স্ট্রিং আছে. কোন ** দ্বারা ভয় না পান. এই পর্যন্ত শেষ হচ্ছে স্ট্রিং একটি অ্যারের যাচ্ছে বা পয়েন্টার একটি অক্ষর অ্যারে, যেখানে পয়েন্টার অক্ষর যাও যাও স্ট্রিং হতে থাকে. এটি স্ট্রিং হতে, না আছে কিন্তু এখানে, তারা স্ট্রিং হবে করছি. আমরা স্ট্রিং একটি অ্যারে আছে. আমরা একটি আকার, যা প্রতিনিধিত্ব কতগুলি উপাদান স্ট্যাক বর্তমানে আছে, এবং তারপর আমরা ক্ষমতা, যা কতগুলি উপাদান স্ট্যাক হতে পারে আছে. ক্ষমতা কিছু 1 অধিক হিসাবে আরম্ভ বন্ধ করা উচিত, কিন্তু আকার 0 হিসাবে চলতে শুরু করতে যাচ্ছে. এখন, হয় সেখানে মূলত তিনটি ভিন্ন উপায়ে আপনি একটি স্ট্যাকের মনে করতে পারেন. ভাল, হয় সম্ভবত আরও অনেক বেশি, কিন্তু দুটি প্রধান উপায় আছে আপনি কি এটা বাস্তবায়নের জন্য একটি অ্যারে ব্যবহার করে, বা করতে পারেন, এটি কার্যকরী করার জন্য একটি লিঙ্ক তালিকা ব্যবহার করতে পারেন. লিঙ্ক তালিকাগুলি ধরনের থেকে stacks করা তুচ্ছ. এটা খুবই সহজ একটি স্ট্যাক সংযুক্ত তালিকা ব্যবহার করে না, এখানে তাই, আমরা একটি স্ট্যাক অ্যারে ব্যবহার করতে যাচ্ছেন, এবং তারপর অ্যারে ব্যবহার করে, এর রয়েছে দুটি উপায়ে আপনি এটি সম্পর্কে মনে করতে পারেন. পূর্বে, যখন আমি তাকে বললাম আমরা স্ট্যাকের জন্য একটি ক্ষমতা আছে, তাই আমরা স্ট্যাক একটি উপাদান ফিট করতে পারে. এক উপায় এটি ঘটতে পারে শীঘ্র আপনি 10 উপাদানের আঘাত, তাহলে আপনি কাজ সম্পন্ন হয়. আপনি যে একটি ঊর্ধ্ব বিশ্বের 10 জিনিস আবদ্ধ হয় চিনতে আপনি যে আপনার স্ট্যাকের অধিক 10 জিনিষ কখনও করতে হবে, সেক্ষেত্রেও আপনি একটি ঊর্ধ্ব আপনার স্ট্যাকের আকার আবদ্ধ থাকতে পারে না. অথবা আপনি আপনার স্ট্যাকের সীমাবদ্ধ করা হত, কিন্তু আপনি যদি একটি অ্যারের করছেন, তার মানে তাদের প্রতি একক সময় আপনি 10 উপাদানের আঘাত, তাহলে 20 উপাদানের ক্ষমতা বৃদ্ধি করতে যাচ্ছে, এবং সেটি যখন আপনি 20 উপাদানের আঘাত, আপনি 30 উপাদান বা 40 উপাদানগুলি আপনার অ্যারের grow আছে চালু করছি. আপনি ক্ষমতা, যা আমরা কি এখানে করতে যাচ্ছেন বৃদ্ধি প্রয়োজন চালু করছি. প্রতি একক সময় আমরা আমাদের স্ট্যাকের সর্বোচ্চ আকার পৌঁছানোর, যখন আমরা অন্য কিছু চলিতে থাকা, আমরা ক্ষমতা বৃদ্ধি প্রয়োজন চালু করছি. এখানে, আমরা ধাক্কা bool ধাক্কা (গৃহস্থালি * str) হিসেবে ঘোষণা করেন. চর * str হয় স্ট্রিং যে আমরা স্ট্যাকের সম্মুখের দিকে ঠেলে দেওয়া হয়, এবং শুধুমাত্র bool বলেছেন কিনা আমরা সফল বা ব্যর্থ হয়েছে. কিভাবে আমরা ব্যর্থ হতে পারে? শুধুমাত্র circumstance যে আপনি মনে করতে পারেন কি যেখানে আমরা মিথ্যা প্রত্যাবর্তন করতে হবে? হাঁ. [ছাত্র] যদি এটি সম্পূর্ণ এবং আমরা একটি বেষ্টিত বাস্তবায়ন ব্যবহার করছেন. হ্যাঁ, তাই কিভাবে আমরা-সংজ্ঞায়িত তিনি উত্তর যদি এটা সম্পূর্ণ এবং আমরা একটি বেষ্টিত বাস্তবায়ন ব্যবহার করছেন. তারপর আমরা স্পষ্টভাবে ফিরে মিথ্যা হবে. আমরা যত শীঘ্র অ্যারের মধ্যে 10 জিনিষ আঘাত, আমরা 11 ফিট করতে পারে না, তাই আমরা ফিরে মিথ্যা. যদি এটি সীমাবদ্ধ নয়? হাঁ. আপনি যদি কোনো কারণে অ্যারের না প্রসারিত করতে পারেন. হ্যাঁ, তাই মেমরির একটি সীমিত সম্পদ, এবং অবশেষে, যদি আমরা সম্মুখের এবং স্ট্যাকের উপর আবার ঠেলে জিনিস রাখা, আমরা চেষ্টা এবং একটি বড় অ্যারে বরাদ্দ মাপসই চলুন বৃহত্তর ক্ষমতা, এবং malloc বা যাই হোক না কেন আমরা ব্যবহার করছি মিথ্যা ফিরে যাচ্ছে. ভাল, malloc নাল ফিরে আসবে. উল্লেখ্য, প্রতি একক সময় আপনি কি কখনও malloc কল, আপনি চেক করে দেখতে হবে যদি এটি নাল অথবা অন্য যে ফেরৎ একটি শুদ্ধি সিদ্ধান্তগ্রহণ. যেহেতু আমরা একটি অনন্ত স্ট্যাকের করাতে চাই, শুধুমাত্র ক্ষেত্রে আমরা করা মিথ্যা ফিরে যাচ্ছে সেটি যদি আমরা চেষ্টা যাও ক্ষমতা এবং malloc বৃদ্ধি বা যাই হোক না কেন ফেরৎ মিথ্যা. তারপর পপ কোনো আর্গুমেন্ট লাগে, এবং এটি স্ট্রিং স্ট্যাকের উপর যা ফিরিয়ে দেয়. যাই স্ট্যাক ছিল অতি সম্প্রতি ধাক্কা কি পপ ফিরে না, এবং এটা স্ট্যাকের থেকে মুছে যাবে. নোটিশ এবং এটি ফিরিয়ে নাল যদি স্ট্যাকের উপর কিছুই আছে. এটা সবসময় সম্ভব যে স্ট্যাকের খালি. ইন জাভা, যদি আপনি যে, বা অন্যান্য ভাষার ব্যবহার করতেন, একটি খালি স্ট্যাকের থেকে পপ চেষ্টা ব্যতিক্রম বা কিছু হতে পারে. কিন্তু সি, নাল হয় ক্ষেত্রে কিভাবে আমরা এই সমস্যার হ্যান্ডেল অনেক দয়া. নাল রিটার্নিং হয় কিভাবে আমরা এই স্ট্যাকের খালি বোঝান চালু করছি. আমরা যে কোড আপনার স্ট্যাকের এর কার্যকারিতা পরীক্ষা করতে হবে সরবরাহ করেছি, এবং ধাক্কা পপ বাস্তবায়নের জন্য. এই কোড অনেকটা হবে না. আমি আসলে করবে, আগে আমরা যে, ইঙ্গিতটি, ইঙ্গিতটি- যদি আপনি এটি দেখা যায় না, malloc শুধুমাত্র ফাংশন নয় আপনি যে গাদা জন্য মেমরি বরাদ্দ করা. Alloc কর্ম একটি পরিবার আছে. প্রথম malloc হয়, যা আপনি ব্যবহার করতেন. তারপর calloc, যা malloc হিসাবে একই জিনিস আছে আছে, কিন্তু এটি আপনার জন্য সব কিছু শূন্য হবে. যদি কখনও কোন কিছু mallocing পরে করেছি সবকিছু যাও নাল সেট চেয়েছিলেন আপনি শুধু লেখার পরিবর্তে প্রথম স্থানে আছে উচিত calloc ব্যবহৃত লুপ যাও মেমরির সম্পূর্ণ ব্লক Zero আউট জন্য একটি. Malloc ভালো Realloc হয় এবং বিশেষ ক্ষেত্রে অনেক আছে, কিন্তু মূলত what realloc আছে হয় এটি একটি পয়েন্টার যে ইতিমধ্যেই বরাদ্দ করা হয়েছে প্রদর্শিত হয়. Realloc হয় ফাংশন করতে চান এখানে গভীর মনযোগ প্রদান করা হবে. এটি একটি পয়েন্টার যে ইতিমধ্যেই malloc থেকে ফিরে হয়েছে লাগে. চলুন শুরু করা যাক বলতে malloc থেকে আপনি 10 বাইট একটি পয়েন্টার অনুরোধ করুন. তারপর পরে আপনি বোঝেন যে আপনি 20 বাইট চেয়েছিলেন, তাই আপনি 20 বাইট সঙ্গে যে পয়েন্টার on realloc কল, এবং স্বয়ংক্রিয়ভাবে realloc জন্য আপনি সবকিছু উপর কপি হবে. আপনি যদি শুধু malloc আবার বলা, মত আমি 10 বাইট একটি ব্লক আছে. এখন আমি 20 বাইট একটি ব্লক প্রয়োজন, সুতরাং যদি আমি 20 বাইট malloc তারপর, আমি নিজে প্রথম জিনিস থেকে 10 বাইট কপি উপর আছে মধ্যে দ্বিতীয় জিনিস এবং তারপর বিনামূল্যে প্রথম জিনিস. Realloc জন্য আপনি যে হ্যান্ডেল করতে হবে. উল্লেখ্য, স্বাক্ষর অকার্যকর * হবে, যা ঠিক না মেমরি ব্লক একটি পয়েন্টার ফিরে, তারপর শূন্যস্থান * ptr. আপনি শূন্যস্থান * একটি জেনেরিক পয়েন্টার হিসাবে মনে করতে পারেন. সাধারণত, আপনি কারবার অকার্যকর * সঙ্গে না, কিন্তু malloc একটি অকার্যকর * ফেরত হয়, এবং তারপর এটি ঠিক মত ব্যবহৃত হচ্ছে এই প্রকৃতপক্ষে একটি গৃহস্থালি * হতে যাচ্ছে. আগের অকার্যকর * যে malloc দ্বারা তিনি ফিরে হয়েছে না এখন going to realloc প্রেরণ করা হবে, এবং তারপর আকার বাইট হয় আপনি ধার্য করতে ইচ্ছুক নতুন সংখ্যা, তাই আপনার নতুন ক্ষমতা. আমি কয়েক মিনিট আপনাকে, এবং আমাদের মধ্যে এটি স্থান দেব. পরিবর্ধন ও পরিবর্তন তালিকা 1 সঙ্গে শুরু. আমি যথেষ্ট সময় ধাক্কা বাস্তবায়ন সম্পর্কে আপনার থামাতে পর আশা করব, এবং তারপর আমি পপ না আপনি অন্য বিরতি দেব. কিন্তু সত্যিই এটা সব সময়ে যে অনেক কোড হইনি. অধিকাংশ কোড সম্ভবত বিস্তার স্টাফ, ক্ষমতা করতে হবে. ঠিক আছে, কোনো চাপ সম্পূর্ণ করা সম্ভব, কিন্তু যতদিন না পর্যন্ত আপনি মনে করছি আপনি সঠিক পথ, যে ভাল. কারো কাছে কি কোন কোড তারা মনে সম্পর্কে কাছে আপ সঙ্গে আরামদায়ক আছে? হাঁ, আমি কিন্তু আছে, কোনো ব্যক্তি কোনো কোড আমি থামা করতে হবে? ঠিক আছে, আপনি শুরু, তা সংরক্ষণ করতে পারেন, যাই হোক না কেন এটা হয়? আমি সবসময় যে পদক্ষেপ ভুলবেন না. ঠিক আছে, ধাক্কা দিকে তাকিয়ে আছে, না আপনার কোড ব্যাখ্যা করতে চান? [ছাত্র] প্রথম সব, আমি মাপ বৃদ্ধি করেছে. আমি অনুমান হয়তো আমি যে-যাইহোক থাকা উচিত, আমি মাপ বৃদ্ধি, এবং আমি দেখতে যদি ক্ষমতা কম হয়ে থাকে. এবং যদি সামর্থ কম, আমি অ্যারে যে ইতিমধ্যে আমরা যোগ করুন. এবং যদি এটা না, আমি 2 দ্বারা ক্ষমতা সংখ্যাবৃদ্ধি, এবং আমি কিছু স্ট্রিং অ্যারের reallocate এখন একটি বড় ক্ষমতা আকার সঙ্গে. এবং তারপর যদি ব্যর্থ হয় যে, আমি ব্যবহারকারী বলতে এবং মিথ্যা ফিরে, এবং যদি সূক্ষ্ম তারপর, আমি নতুন স্থান মধ্যে স্ট্রিং রাখে. এছাড়াও [রব বি] বিজ্ঞপ্তি যে আমরা একটা চমৎকার bitwise অপারেটর এখানে ব্যবহৃত 2 দ্বারা গুন করা হয়. মনে রাখবেন, সবসময় বাম স্থানান্তর যাচ্ছে যাও 2 দ্বারা গুন করা হয়. রাইট শিফ্ট 2 দ্বারা দীর্ঘ হিসাবে বিভক্ত হিসাবে আপনি মনে রাখবেন যে এটি উপায় একটি পূর্ণসংখ্যা 2 দ্বারা বিভক্ত হিসাবে 2 দ্বারা বিভক্ত করা. এটি একটি বা 1 এখানে সেখানে অগ্রভাগ ছাঁটিয়া দেত্তয়া পারে. কিন্তু সবসময় স্থানান্তর 1 দ্বারা বাম যাচ্ছে যাও 2 দ্বারা গুন করা হবে, যদি না আপনি পূর্ণসংখ্যা এর সীমার ওভারফ্লো, এবং তারপর এটি করা হবে. একটি সাইড মন্তব্য. আমি চাই এই বিক্ষোভ কোন উপায় সবটা কোডিং পরিবর্তন হবে না, কিন্তু আমি এই মত কিছু করতে চান. এটা আসলে এটা সামান্য বেশি দীর্ঘ করা যাচ্ছে. হয়তো এই নিখুঁত ক্ষেত্রে এই দেখানোর জন্য না, কিন্তু সেগমেন্ট যাও আমি এই ব্লকের মধ্যে এটি পছন্দ ঠিক যদি এই যদি এরকম ঘটে, তাহলে আমি কিছু করতে যাচ্ছি, এবং তারপর ফাংশন হয়. আমি তারপর ফাংশন নিচে স্ক্রল সমস্ত পথ আমার চোখ করার প্রয়োজন হবে না দেখতে else করার পর হবে. এটা যদি এই যদি এরকম ঘটে, তাহলে আমি ঠিক ফিরে আসবেন. এটি চমৎকার এই অতিক্রম সবকিছু যোগ বেনিফিট আছে এখন হয় একবার বাম হাতে চলে যায়. আমি আর যদি কখনও আপনার কাছাকাছি ridiculously দীর্ঘ লাইন প্রয়োজন, তারপর ঐ 4 বাইট, এবং আমাদের সহায়তা করতে আরো বাম কিছু করতে পারেন, কম সমাচ্ছন্ন আপনি কেমন বোধ করবে যদি মত ঠিক আমি মনে আছে আমি একটি একটি অন্য একটি লুপ জন্য ভিতরে ভিতরে যখন লুপ বর্তমানে না. কোথাও আপনি এই রিটার্ন অবিলম্বে না, আমি ধরনের ভালো করতে পারেন. এটা সম্পূর্ণই ঐচ্ছিক এবং প্রত্যাশিত কোনো ভাবে না. [ছাত্র] সেখানে একটি আকার হবে - বিফল অবস্থায়? এখানে আমরা ব্যর্থ condition হয় realloc ব্যর্থ হয়েছে, তাই হ্যাঁ. ব্যর্থ অবস্থায় কিভাবে, সম্ভবতঃ লক্ষ্য করুন, আমরা বিনামূল্যে স্টাফ পরে যদি না, সবসময় আমরা নারা করছি যাচ্ছে কোন ব্যাপার কতবার আমরা কিছু ধাক্কা চেষ্টা করুন. যদি আমরা রাখতে ঠেলে নিয়ে যায়, আমরা বৃদ্ধিশীল আকার বজায় রাখুন, যদিও আমরা কিছু নির্বাণ হয় স্ট্যাকের মধ্যে হইনি. সাধারণত আমরা মাপ পর্যন্ত না বাড়ায় না পরে আমরা সফলভাবে স্ট্যাক আছে লাগাতে হবে. আমরা না, বলতে হবে এবং এখানে হয় না. এবং তারপর পরিবর্তে বলছে ≤ ক্ষমতা s.size, এটা ক্ষমতা কম, কারণ আমরা যেখানে সবকিছু শুধুমাত্র পাঠানো হয়. এবং মনে রাখবেন একমাত্র স্থান, যে সম্ভবত আমরা ফিরে মিথ্যা হতে পারে এখানে, যেখানে realloc ফিরে নাল, এবং আপনি যদি মান ত্রুটি ঘটেছে মনে রাখবেন, আপনি হয়তো এই একটি ক্ষেত্রে বিবেচনা যেখানে আপনি একটি প্রমিত ত্রুটি মুদ্রণ করতে পারেন, পরিবর্তে একটা মানসম্মত আউট সরাসরি মুদ্রণ তাই fprintf stderr. আবার, যে, কিন্তু একটি প্রত্যাশা না যদি এটা একটা ত্রুটি, printf টাইপ করুন, তাহলে এটি পরিবর্তে আউট প্রমিত মান ত্রুটির মুদ্রণ করতে চাইবেন. কেউ কিছু মনে রাখবেন অন্য আছে? হ্যাঁ. [ছাত্র] আপনি [শ্রবণাতীত] উপর যেতে পারি? [বি Rob] হ্যাঁ, এটি প্রকৃত binariness বা ঠিক কি? [ছাত্র] সুতরাং আপনি 2 দ্বারা এটি সংখ্যাবৃদ্ধি? [বি Rob] হ্যাঁ, মূলত. বাইনারি জমি ইন, সবসময় আমরা আমাদের সংখ্যা নির্ধারণ করুন. 1 দ্বারা এই বাম নড়ন মূলত টিপে ডাইন এখানে না. ফিরুন এই মাত্র, বাইনারি যে সবকিছু মনে 2 একটি ক্ষমতা, তাই এই 0 2 প্রতিনিধিত্ব করে, এই 1 2, এই 2 2. ডাইন যাও 0 থেকে এখন প্রবেশ, আমরা সবকিছু উপর স্থানান্তরিত করুন. কি 0 2 ব্যবহার করা হয়, এখন হয় 2 1, 2 2 হয়. ডান দিকে যে আমরা ঢোকানো অগত্যা হয় 0 হবে, যা বিষয়টি যুক্তিযুক্ত হবে. যদি কখনও আপনার 2 দ্বারা একটি সংখ্যা গুণ করা, এটি এবং শেষ বিজোড় যাচ্ছে না, তাই 0 2 0 জায়গা হওয়া উচিত, এবং এই কি আমি অর্ধেক আগে সম্পর্কে সতর্ক যদি আপনি নামান ঘটতে না বহুদূরে বিটের একটি পূর্ণসংখ্যা সংখ্যা, তারপর এই 1 এবং শেষ যাওয়া বন্ধ করতে যাচ্ছে. এটা শুধুমাত্র চিন্তা করবেন না, যদি আপনি বৃহৎ ধারণক্ষমতা সাথে ডিল করা ঘটেছে. কিন্তু যে স্থানে থাকে, তাহলে আপনি জিনিষ বিলিয়ান একটি অ্যারের সাথে আচরণ করছেন, যা মেমরির মধ্যে মাপসই পারে যাইহোক হইনি. এখন আমরা পপ, যা আরও সহজ করতে পারেন. আপনি এটা যদি আপনি একটি আভা পপ ঘটতে পছন্দ না হতে পারে, এবং এখন আপনি অর্ধেক ক্ষমতা আবার আছেন. আপনি মেমরির পরিমাণ আপনার সঙ্কুচিত realloc পারে, কিন্তু আপনি যে চিন্তা করতে হবে না, যাতে শুধুমাত্র realloc ক্ষেত্রে হবে ক্রমবর্ধমান মেমরি, মেমরি হ্রাস না, যা পপ সুপার সহজ করতে হবে. এখন queues, যা stacks মত হতে যাচ্ছে, কিন্তু যাতে আপনি সেটা নিতে বিপরীত. এই সারির মধ্যে prototypical যেমন একটি লাইন, তাই আমি অনুমান যদি আপনি ছিল ইংরাজি, আমি বলেন না একটি সারিতে prototypical এর উদাহরণ হল সারিতে. সুতরাং মত একটি পংক্তি, যদি আপনি প্রথম লাইন ব্যক্তি, আপনি লাইন আউট প্রথম ব্যক্তি হতে আশা করছি. যদি আপনি লাইন অন্তিম ব্যক্তি, আপনি শেষ ব্যক্তির সার্ভিসিং হতে যাচ্ছি. আমরা যে FIFO প্যাটার্ন কল, যেহেতু স্ট্যাকের ছিল LIFO প্যাটার্ন. যারা শব্দ হয় চমত্কার সার্বজনীন. ভালো লেগেছে stacks এবং অ্যারে অসদৃশ, সাধারণত queues মাঝখানে উপাদান ব্যবহারের অনুমতি দেওয়া হয় না. এখানে, একটি স্ট্যাক, আমরা ধাক্কা এবং পপ আছে. এখানে, আমরা এরকম বলা আছে সারিবদ্ধ এবং dequeue পারবেন. আমি এ কথা শুনে তাদের স্থানান্তর এবং unshift বলা হয়. আমি মানুষ বলে ধাক্কা এবং পপ queues যাও যাও এছাড়াও শোনা আবেদন করেছি. আমি, সন্নিবেশ অপসারণ শুনে থাকেন, তাই এবং ধাক্কা, পপ যদি আপনি stacks সম্পর্কে কথা, আপনি এবং ঠেলে পপিং হয়. আপনি যদি queues বিষয়ে কথা বলছি, আপনি শব্দ আপনি ব্যবহার করতে চান সেগুলি নির্বাচন হতে পারে সন্নিবেশ এবং অপসারণের জন্য, এবং সেটাকে কি বলা উচিত কোন ঐক্যমত্য নেই. কিন্তু এখানে, আমরা সারিবদ্ধ এবং dequeue আছে. এখন, struct দেখায় স্ট্যাকের struct প্রায় অভিন্ন. কিন্তু আমরা মাথা ট্র্যাক রাখা আছে. আমি অনুমান করে বলেছেন নিচে এখানে, কিন্তু কেন আমরা মাথা প্রয়োজন? এগুলির নমুনা হয় মূলত যাও এবং ধাক্কা পপ অভিন্ন. আপনি এটা ধাক্কা এবং পপ হিসাবে মনে করতে পারেন. শুধু পার্থক্য হল পপ শেষ ফিরে-এর পরিবর্তে, এটি এর প্রথম ফেরত দিচ্ছে. 2, 1, 3, 4, বা কিছু বলেছিলাম. এবং এখানে শুরু করা হয়. আমাদের সারি সম্পূর্ণরূপে পূর্ণ, তাই এটি মধ্যে চারটি উপাদান আছে. আমাদের কিউ শেষে বর্তমানে 2, এবং এখন আমরা অন্য কিছু সন্নিবেশ যান. যখন আমরা স্ট্যাকের সংস্করণের জন্য যে অন্য কিছু, আমরা কি কি সন্নিবেশ করতে চান হয় আমরা আমাদের মেমরি ব্লক প্রসারিত হয়েছে. এই সমস্যা কি? [ছাত্র] আপনি 2 সরানো. আগে আমি কি বলেন কিউ শেষে সম্পর্কে, এই 1 এ আছে অর্থে যে আমরা শুরু করতে না, তারপর আমরা dequeue 1 চান, তাহলে dequeue 3 তারপর, dequeue 4, তারপর dequeue 2 পরে, এই এক dequeue. আমরা এখন realloc ব্যবহার না করতে পারেন, অথবা খুব অন্তত, একটি ভিন্ন উপায়ে realloc ব্যবহার আছে. কিন্তু সম্ভবত আপনি ঠিক realloc ব্যবহার করা উচিত নয়. আপনি ম্যানুয়ালি আপনার মেমরি কপি আছে যাচ্ছি. দুই ফাংশান মেমরি কপি আছে. Memcopy এবং memmove আছে. আমি বর্তমানে করছি man পৃষ্ঠা আছে যা আপনি ব্যবহার করতে চান তাহলে চলুন দেখতে পড়া. Okay memcopy,, পার্থক্য হল যে memcopy এবং memmove, এক ক্ষেত্রে সঠিকভাবে হ্যান্ডলগুলি যেখানে আপনি একটি অঞ্চলের যে কোন অঞ্চলের মধ্যে ওভারল্যাপ ঘটে অনুলিপি করছি আপনার কাছ থেকে অনুলিপি করছি. Memcopy এটা হ্যান্ডেল হইনি. Memmove আছে. আপনি-সমস্যা হিসাবে মনে করতে পারেন এর দেওয়া বলতে আমি এই লোক কপি করতে চান, এই লোক উপর এইসব চার. শেষে কি, অ্যারে মত হওয়া উচিত পরে কপি থাকে 2, 1, 2, 1, 3, 4, এবং তারপর শেষে কিছু জিনিস. কিন্তু এই অর্ডার যা আসলে আমরা কপি উপর নির্ভরশীল, থেকে যদি আমরা যে কোন অঞ্চলের মধ্যে অনুলিপি আমরা বিবেচনা করছি না ওভারল্যাপ আমরা এক থেকে অনুলিপি করছি, তারপর আমরা এখানে শুরুর ভালো, না জায়গায় আমরা যেতে চাই মধ্যে 2 কপি হতে পারে, তারপর এগিয়ে আমাদের পয়েন্টার সরানো. এখন আমরা এখানে এবং এখানে হবে, এবং সেটি এখন আমরা কপি করতে চান এই লোক উপর এই লোক এবং ফরওয়ার্ড আমাদের পয়েন্টার সরানো. আমরা কি শেষ পর্যন্ত পেয়ে যাচ্ছে সেটি 2, 1, 2, 1, 2, 1 পরিবর্তে উপযুক্ত 2, 1, 2, 1, 3, 4 কারণ 2, 1 আসল 3, 4 overrode. Memmove যে সঠিকভাবে পরিচালনা করে. এই ক্ষেত্রে, মূলত শুধু সবসময় memmove ব্যবহার কারণ তা সঠিকভাবে পরিচালনা করে. এতে সাধারণত কোনো খারাপ সঞ্চালন করা হয় না. ধারণা পরিবর্তে শুরু শুরুতে থেকে এবং এই পথ অনুলিপি হয় ভালো আমরা কি এখানে, এটি শেষ থেকে শুরু হয় এবং মধ্যে কপি করা, এবং যে ক্ষেত্রে, আপনার কোন সমস্যা না থাকতে পারে. না এখন পর্যন্ত কোন কর্মক্ষমতা হারিয়ে গেছে. সর্বদা memmove ব্যবহার করুন. Memcopy সম্পর্কে চিন্তা করবেন না. এবং যে যেখানে আপনি আলাদাভাবে memmove আছে চলুন আপনার সারিতে wrapped-এর কাছাকাছি অংশ. কোন উদ্বেগ সম্পূর্ণভাবে যদি না শেষ. এই স্ট্যাকের, ধাক্কা, এবং পপ চেয়ে আরো কঠিন. কেউ কোনো কোড আমরা সঙ্গে কাজ করতে আছে? এমনকি যদি সম্পূর্ণরূপে অসম্পূর্ণ? [ছাত্র] হ্যাঁ, এটি সম্পূর্ণ অসম্পূর্ণ, যদিও. সম্পূর্ণরূপে অসম্পূর্ণ দীর্ঘ হিসাবে জরিমানা হিসাবে আমরা-পুনর্বিবেচনা আপনি সংরক্ষণ করতে পারেন? আমি ভুলে যেতে পারে যে প্রতি একক সময়. Okay, কি উপেক্ষা ঘটনা যখন আমরা জিনিষ মাপ পরিবর্তন করতে হবে. পুনরায় মাপ সম্পূর্ণভাবে উপেক্ষা করুন. এই কোড ব্যাখ্যা করুন. আমি প্রথমে সব চেক যদি আকার অনুলিপি সমস্ত প্রথম কম করছি যে পরে এবং তারপর, আমি-সন্নিবেশ আমি মাথা + আকার নিতে, এবং আমি নিশ্চিত হোন যে, এটি অ্যারের ক্ষমতার কাছাকাছি গোপন করে, এবং আমি যে অবস্থানে এ নতুন স্ট্রিং সন্নিবেশ করুন. তারপর আমি মাপ বৃদ্ধি এবং সত্য ফিরে আসুন. [বি Rob] এই স্পষ্টভাবে তাদের ক্ষেত্রে যেখানে আপনি mod ব্যবহার করা চাই চলুন এক. মামলার কোন ধরনের কাছাকাছি যেখানে আপনি মোড়কে, যদি আপনি কাছাকাছি মোড়কে মনে আছে, অবিলম্বে চিন্তার mod হওয়া উচিত. একটি দ্রুত অপ্টিমাইজেশান হিসাবে / আপনার এক লাইন কোড খাটো করা, আপনি নোটিশ অবিলম্বে এই এক লাইন অনুসরণ শুধু আকার + +, তাই আপনি মার্জ করে এই যে রেখা, আকার + +. এখানে এখন ডাউন, আমরা কেস আছে যেখানে আমরা পর্যাপ্ত মেমরি নেই, তাই আমরা আমাদের সামর্থ্য 2 দ্বারা হয় চলেছে. আমি অনুমান করতে এখানে একই সমস্যা হতে পারে, কিন্তু আমরা এখন উপেক্ষা করতে পারেন, যেখানে আপনি যদি আপনার ক্ষমতা বৃদ্ধি করতে ব্যর্থ হয়েছে, তারপর আপনি আবার আপনার 2 দ্বারা ক্ষমতা হ্রাস করতে চান চালু করছি. অন্য একটি সংক্ষিপ্ত নোট ঠিক মত আপনি কি করতে পারেন + =, এছাড়াও আপনি << = করতে পারেন. কিছু আগে প্রায় সমান যেতে পারেন + =, | =, =, = <<. চর * নতুন আমাদের মেমরি নতুন ব্লক. ওহ, আর ধরে না. লোকেরা আমাদের মেমরি নতুন ব্লক ধরণ সম্পর্কে মনে করেন? [ছাত্র] এটা ** গৃহস্থালির কাজ করা উচিত. আমাদের struct ফিরে চিন্তা আপ এখানে, স্ট্রিং কি আমরা reallocating হয়. আমরা সারিতে উপাদানের জন্য একটি সম্পূর্ণ নতুন ডাইনামিক স্টোরেজ না. আমরা কি আপনার স্ট্রিং যাও বরাদ্দ করা যাচ্ছে সেটি কি আমরা এখন অধিকার mallocing করছি, এবং তাই নতুন একটি গৃহস্থালি ** করা হচ্ছে. এটি স্ট্রিং একটি অ্যারের হবে না. তারপর কি কেস অধীন যা আমরা মিথ্যা ফিরে যাচ্ছেন? [ছাত্র] আমরা কি করা * গৃহস্থালির কাজ করছেন? [বি Rob] হ্যাঁ, ভাল কল করা হচ্ছে. [ছাত্র] যে কী ছিল? [বি Rob] আমরা গৃহস্থালি * মাপ কারণ আমরা কোন চেয়েচিলাম দীর্ঘ আসলে এই একটি খুব বড় সমস্যার কারণ sizeof (গৃহস্থালির কাজ করা) 1 হতে হবে. Sizeof গৃহস্থালির কাজ করা * 4 হবে, তাই বার যখন আপনি ints সঙ্গে লেনদেন করছেন অনেক, আপনি এটি দিয়ে পার পেতে ঝোঁক কারণ int-* int-র মাপ এবং আকার একটি 32 বিট সিস্টেমে একই জিনিস হতে যাচ্ছি. কিন্তু এখানে, sizeof (গৃহস্থালির কাজ করা) এবং sizeof (গৃহস্থালি *) এখন একই জিনিস হতে হয় না. Circumstance যেখানে আমরা ফিরে মিথ্যা কি? [ছাত্র] গেম নাল হয়. হাঁ, যদি নতুন হয় নাল, আমরা ফিরে মিথ্যা, এবং আমি অস্বীকার করা যাচ্ছে না এখানে- [ছাত্র] [শ্রবণাতীত] [বি Rob] হ্যাঁ, এটা পরিষ্কার হয়. আপনি হয় 2 বার ক্ষমতা বা ক্ষমতার স্থানান্তর 1 এবং তখন শুধুমাত্র ডাউন সেট এখানে বা যাই হোক না কেন যেত না. আমরা এটা করতে হিসাবে আমরা এটি ছিল করব. ক্যাপাসিটি >> = 1. এবং আপনি 1 এর জায়গা হারিয়ে যাওয়ার বিষয়ে উদ্বিগ্ন হতে যাচ্ছেন না কারণ আপনি বাকি 1 দ্বারা স্থানান্তরিত, তাই 1 এর জায়গা অগত্যা 0, 1 দ্বারা যাতে ডান নড়ন, এখনও আপনি ঠিক করছি না. [ছাত্র] আপনি কি রিটার্ন করার আগে করতে হবে কি? [বি Rob] হ্যাঁ, এই একেবারে কোন মানে তোলে. এখন অনুমান আমরা শেষ পর্যন্ত ফিরে যাওয়া সত্য করছি. আমাদের এইসব memmoves করতে যাচ্ছেন, আমরা কিভাবে আমরা তাদের সঙ্গে কাজ করলে যথেষ্ট সতর্কতা অবলম্বন করা প্রয়োজন. কেউ কি কিভাবে আমরা তাদের জন্য কি কোন পরামর্শ আছে? এখানে আমাদের শুরু করা হয়. অবশ্যম্ভাবীভাবেই, আমরা শুরুতে আবার শুরু করতে চান এবং সেখানে থেকে কপি জিনিস, 1, 3, 4, 2. কি করব? প্রথমত, আমি man পৃষ্ঠা memmove এ জন্য আবার চেহারা আছে. Memmove, আর্গুমেন্ট আদেশ সবসময় তা গুরুত্বপূর্ণ. আমরা আমাদের প্রথম গন্তব্য চান, উৎস দ্বিতীয়, তৃতীয় আকার. ফাংশন যা উত্স ও গন্তব্য বিপরীত অনেক আছে. গন্তব্য, উৎস কিছুটা সামঞ্জস্যপূর্ণ হতে থাকে. সরান, কি ফিরে? এটা গন্তব্য একটি পয়েন্টার ফেরৎ কারণ যাই হোক আপনি যা চাইবেন জন্য. আমি এটি ছবি, পড়তে পারেন, কিন্তু আমরা আমাদের গন্তব্য সরাতে চাই. কি আমাদের গন্তব্য মুখোমুখি করা হবে? [ছাত্র] পরিচিতি. [বি Rob] হ্যাঁ, এবং যেখানে আমরা থেকে অনুলিপি করা হয়? প্রথম জিনিস আমরা অনুলিপি হয় এই 1, 3, 4. -1 এই কি, 3, 4. এই 1 ঠিকানা কি? যে 1 ঠিকানা কি? [ছাত্র] [শ্রবণাতীত] [বি Rob] হেড + প্রথম উপাদান এর ঠিকানা. কিভাবে আমরা অ্যারের মধ্যে প্রথম উপাদান পেতে পারি? [ছাত্র] সারি. [বি Rob] হ্যাঁ, q.strings. মনে রাখবেন, এখানে, আমাদের মাথা হল 1. এটি মেরামত করা. আমি মনে করি magically- এখানে, আমাদের মাথা হল 1. আমি খুব আমার রঙ পরিবর্তন করতে যাচ্ছেন না. এবং এখানে একটি পংক্তি. এই, আমরা এটি হয়ত হিসাবে আমরা কি এখানে উপর লিখতে পারেন সঙ্গে মাথা + q.strings. মানুষ অনেক এছাড়াও এটি লিখুন & q.strings [মাথা]. এটি সত্যিই কোনো দক্ষ কম না. আপনি এটা হিসাবে আপনি এটি dereferencing হয় এবং তারপর এর ঠিকানা পেয়ে মনে হতে পারে, কিন্তু কম্পাইলার কি আমরা আগে এটি অনুবাদ যেকোন উপায়ে যাচ্ছে, হয় q.strings + করেন. উভয় ক্ষেত্রেই আপনি মনে করতে চান. এবং কত বাইট আমরা কপি করতে চান? [ছাত্র] ক্যাপাসিটি - মাথা. ক্যাপাসিটি - করেন. এবং তারপর আপনি সবসময় লিখে একটি উদাহরণ হতে পারে আউট যাও যদি চিন্তা করা যে অধিকার আছে. [ছাত্র] এটা প্রয়োজন 2 তারপর দ্বারা বিভক্ত করা হবে. হ্যাঁ, তাই আমি অনুমান আমরা আকার ব্যবহার করতে পারেন. আমরা এখনও আকার আছে হচ্ছে- আকার ব্যবহার করে, আমরা মাপ সমান 4 যাও আছে. আমাদের আকার 4. আমাদের মাথা হল 1. আমরা এইসব উপাদান 3 কপি করতে চান. এটা মানসিক সুস্থতা যে আকার চেক - প্রধান সঠিকভাবে 3. এবং এখানে ফিরে আসছে, যেমন আমরা পূর্বে বলেন, যদি আমরা ক্ষমতা ব্যবহৃত তারপর, আমরা 2 দ্বারা বিভক্ত করা আছে চাই কারণ ইতিমধ্যে আমরা আমাদের ক্ষমতা জন্মায় করেছি, তাই, আমরা মাপ ব্যবহার চালু করছি. যে যে অংশ কপি. এখন, আমরা অন্যান্য অংশ, যে অংশ শুরুর ছেড়ে দেওয়া হয় কপি করা আবশ্যক. যে কি অবস্থা মধ্যে memmove যাও করছেন? [ছাত্র] প্লাস আকার - করেন. হ্যাঁ, তাই আমরা আকার ইতিমধ্যে কপি - মাথা বাইট, এবং তাই যেখানে আমরা অবশিষ্ট বাইট কপি করতে চান নতুন এবং তারপর আকার বিয়োগ ভালভাবে, বাইট সংখ্যা ইতিমধ্যে আমরা কপি করেছি ইন এবং তারপর যেখানে আমরা থেকে অনুলিপি করা হয়? [ছাত্র] Q.strings [0]. [বি Rob] হ্যাঁ, q.strings. আমরা না হয় & q.strings [0]. পারে এটি উল্লেখযোগ্যভাবে এই তুলনায় কম প্রচলিত. যদি এটা 0 হতে যাচ্ছে, তাহলে q.strings ঝোঁক দেখতে পাবেন. যে যেখানে আমরা থেকে অনুলিপি করছি. কত বাইট আমরা কপি বাকি? আছে >> [ছাত্র] 10. রাইট. [ছাত্র] আমরা 5 গুণ করা আছে কি - 10 বার বাইট বা কিছু মাপ? হ্যাঁ, তাই এই হল যেখানে-what ঠিক আমরা অনুলিপি করা হয়? [ছাত্র] [শ্রবণাতীত] জিনিস আমরা অনুলিপি করছেন টাইপ কি? [ছাত্র] [শ্রবণাতীত] হাঁ, গৃহস্থালির কাজ * গুলি যে আমরা অনুলিপি করছি, তাই আমরা যেখানে তাদের থেকে আসা হয় না জানি. ওয়েল, যেখানে স্ট্রিং মত তারা প্রতি নির্দেশ করছেন,, আমরা শেষ কিউ 'র মধ্যে এটি ঠেলাঠেলি কিউ সম্মুখের বা enqueuing. কোথা থেকে আসছে, আমরা কোন ধারণা আছে. আমরা শুধু * গৃহস্থালির কাজ গুলি নিজেদের খবরাখবর রাখা আবশ্যক. মাথা বাইট - আমরা আকার কপি করতে না চান. মাথা গৃহস্থালি * গুলি, - আমরা আকার কপি করতে চান তাই আমরা sizeof (গৃহস্থালি *) দ্বারা এই সংখ্যাবৃদ্ধি করা যাচ্ছে করছি. একই নিচে এখানে, মাথা * sizeof (গৃহস্থালি *). [ছাত্র] কি [শ্রবণাতীত]? এখানে ডান? [ছাত্র] না, নীচের যে, আকার - করেন. [বি Rob] এখানে ডান? পয়েন্টার পাটিগণিত. কিভাবে পয়েন্টার এরিথমেটিক কাজ চালু হয় এটি স্বয়ংক্রিয়ভাবে টাইপ যে আমরা মোকাবেলা করছি মাপ multiplies. ঠিক এখানে চান, নতুন + (আকার - মাথা) হয় নতুন [আকার - মাথা] যথাযথভাবে সমতুল্য যতক্ষণ না আমরা যে সঠিকভাবে কাজ করবে, থেকে যদি আমরা একটি int-এ অ্যারে সঙ্গে লেনদেন করছেন, তাহলে আমরা কি int-দ্বারা সূচী অথবা যদি 5 এর আকারের এবং আপনি 4th উপাদান চান, তাহলে আমরা মধ্যে সূচক int-এ অ্যারে [4]. আপনি-don't [4] int-র * মাপ. যে এটি স্বয়ংক্রিয়ভাবে হ্যান্ডলগুলি, এবং এই ক্ষেত্রে আক্ষরিক সমতুল্য হয়, তাই বন্ধনী শব্দবিন্যাস না করছি এই রূপান্তরিত হিসাবে আপনি শীঘ্রই হিসাবে কম্পাইল করা হয়. যে কোন কিছু যা আপনি যে সচেতন হওয়া প্রয়োজন যখন আপনি মাপ যোগ করা হয় - মাথা আপনি না হয় এক বাইট যোগ করা আবশ্যক. আপনি এক গৃহস্থালি * যোগ করছি, যা এক বাইট বা যাই হোক না কেন হতে পারে. অন্য প্রশ্ন? ঠিক আছে, যাও dequeue সহজ হবে. আমি প্রয়োগ একটি মিনিট দেব. ওহ, এবং আমি অনুমান এই একই অবস্থা যেখানে what সারিবদ্ধ ক্ষেত্রে, যদি আমরা নাল enqueuing করছি, হয়তো আমরা একে হ্যান্ডেল করতে চান হয়তো, আমরা হইনি. আমরা আবার একই কাজ না হয়, এখানে হবে কিন্তু আমাদের স্ট্যাকের কেস হিসাবে একই. যদি আমরা নাল সারিবদ্ধ, আমরা উপেক্ষা করতে পারেন. কেউ কিছু কোড আমি থামা করতে পারেন? [ছাত্র] আমি dequeue আছে. সংস্করণ 2 হল-okay. আপনি ব্যাখ্যা করতে চান? [ছাত্র] প্রথম, নিশ্চিত কিউ 'র মধ্যে কিছু আছে এবং যে মাপ 1 দ্বারা হবে না. আপনাকে যা করতে হবে, এবং তারপর আপনি মাথা প্রত্যাবর্তন এবং তারপর 1 আপ মাথা সরানো. Okay, তাই কোণার ক্ষেত্রে আমরা বিবেচনা আছে আছে. হাঁ. [ছাত্র] যদি আপনার মাথা শেষ উপাদান থাকে, তারপর আপনার অ্যারের বাইরে মাথা নির্দেশ দিতে চান না. হ্যাঁ, তাই যত তাড়াতাড়ি মাথা আমাদের অ্যারের শেষ হিট, যখন আমরা dequeue, আমাদের মাথা 0 ফিরে modded করা উচিত. দুর্ভাগ্যবশত, আমরা এক ধাপ যে করতে পারবেন না. আমি উপায় আমি সম্ভবত ঠিক করতে চাই এটা অনুমান এই একটি গৃহস্থালি * হবে, আমরা কি ফিরে করছেন, যাই হোক না কেন আপনার পরিবর্তনশীল নামের হতে চায়. তারপর আমরা আমাদের ক্ষমতা দ্বারা মাথা Mod চান এবং তারপর পচান ফিরে আসুন. মানুষ তার একটি এখানে তারা অনেক কাজ করতে পারে এই হল-you'll ক্ষেত্রে দেখতে মানুষ না যদি মাথা হয় ক্ষমতার তুলনায়, মাথা না - ক্ষমতা. এবং যে শুধু mod প্রায় এর কাজ করে যাচ্ছে. হেড mod = ক্ষমতা অনেক ক্লিনার এর চেয়ে যদি ক্ষমতা মাথা তুলনায় মাথা বেশী কাছাকাছি একটি মোড়ানো - ক্ষমতা. প্রশ্ন? ঠিক আছে, শেষ জিনিস আমরা বাকি আছে আমাদের সংযুক্ত তালিকা. আপনি লিঙ্ক তালিকা আচরণ কিছু যদি আপনি কি ব্যবহার করা হতে পারে আপনার হ্যাশ টেবিল তালিকাটি লিঙ্ক, যদি আপনি একটি হ্যাশ টেবিল না. আমি দৃঢ়ভাবে একটি হ্যাশ টেবিল করছেন সুপারিশ. আপনার কাছে ইতিমধ্যেই একটি trie হতে হয়, কিন্তু চেষ্টা আছে আরো কঠিন. তত্ত্ব, তারা asymptotically করছি ভালো. তবে বড় বোর্ড তাকান, এবং ভাল করার চেষ্টা করে না, এবং তারা আরো মেমরি নিতে হয়. সবকিছু সম্পর্কে চেষ্টা করে শেষ পর্যন্ত কাজের জন্য আরো খারাপ হচ্ছে. এটা কি সবসময় ডেভিড Malan এর সমাধান তিনি সবসময় তার trie সমাধান পোস্ট, এবং এর যেখানে বর্তমানে তিনি দেখুন. What অধীন ছিল সে, ডেভিড জে? সে # 18, যাতে ভয়ঙ্কর খারাপ না, এবং যে শ্রেষ্ঠ একজন হতে যাচ্ছে চেষ্টা আপনি মনে করতে পারেন শ্রেষ্ঠ বা এক একটি trie এর চেষ্টা. এটা এমনকি তার আসল সমাধান না? আমি মনে trie সমাধান উপস্থিত RAM-র ব্যবহার সংক্রান্ত তথ্য এই সীমার মধ্যে আরো হতে থাকে. খুব উপরে নিচে যান, উপস্থিত RAM-র ব্যবহার এবং একক সংখ্যায় হয়. নিচ দিকে নিচে যান, এবং তারপর আপনি শুরু এইজন্য চেষ্টা যেখানে আপনি একেবারে বৃহদায়তন উপস্থিত RAM-র ব্যবহার পেতে, এবং চেষ্টা আছে আরো কঠিন. . সম্পূর্ণভাবে মূল্য এটি কিন্তু একটি শিক্ষাগত অভিজ্ঞতা যদি কেউ কি নেই শেষ জিনিষ আমাদের যুক্ত তালিকা, এবং এই তিনটি বিষয়, stacks, queues, এবং সংযুক্ত তালিকা, ভবিষ্যতে কোনো জিনিস আপনি কি কখনও কম্পিউটার বিজ্ঞান আপনি এই জিনিষ সঙ্গে ঘনিষ্ঠতা আছে অনুমান করা হবে. তারা ঠিক তাই সবকিছু যাও মৌলিক. তালিকা লিঙ্ক, এবং এখানে আমরা এককভাবে লিঙ্ক তালিকায় আমাদের বাস্তবায়ন হতে যাচ্ছে আছে না. What একেলা জন্য মানে লিঙ্ক দোকর লিঙ্ক হিসাবে বিরোধিতা? হ্যাঁ. [ছাত্র] এটা কেবল পরের পয়েন্টার বরং পয়েন্টার পয়েন্ট, মত এটি এবং এটি পরে এক গেলা. হ্যাঁ, তাই এ ছবি বিন্যাস কি, আমি ঠিক কি করব? আমি দুটি জিনিস আছে. আমি ছবি এবং ছবি আছে. ইন ছবি বিন্যাস, আমাদের একেলা লিঙ্ক তালিকা, অবশ্যম্ভাবী, আমরা আমাদের তালিকা মাথার পয়েন্টার কিছু আছে, আমাদের মধ্যে তালিকা এবং তারপর, আমরা শুধু পয়েন্টার আছে, এবং হয়ত এই পয়েন্ট নাল না. এটি আপনার একটি একেলা লিঙ্ক তালিকা আদর্শ অঙ্কন করা যাচ্ছে না. একটি দোকর লিঙ্ক তালিকা, ফিরিয়া আপনি যেতে পারেন. যদি আমি আপনার তালিকার যে কোনো নোডের দিতে, তাহলে অগত্যা পেতে পারেন অন্য কোনো নোডের তালিকায় যদি এটি একটি দোকর লিঙ্ক তালিকা. কিন্তু যদি আমি পেতে তালিকা নোডের মধ্যে তৃতীয় এবং আপনি এটি একটি একেলা লিঙ্ক তালিকা, কোন উপায় নাই আপনি কি কখনও করছি প্রথম এবং দ্বিতীয় নোড পেতে যাচ্ছে. এবং বেনিফিট এবং detriments, এবং এক সুস্পষ্ট এক আছে হয় আপনি আরো মাপ অবধি সময় ব্যয় হওয়া, এবং আপনি যেখানে এখন এইসব জিনিসের প্রতি নির্দেশ করা হয় ট্র্যাক রাখা আছে. কিন্তু আমরা কেবল সম্পর্কে একেলা লিঙ্ক যত্নশীল. কয়েকটি জিনিস আমরা প্রয়োগ আছে চালু করছি. তোমার typedef struct নোড, int আমি: struct নোড * পরবর্তী; নোড. যে typedef আপনার মন মধ্যে করা উচিত পুড়িয়ে ফেলা হয়েছিল. ক্যুইজ 1 একটি লিঙ্ক তালিকা নোডের একটি typedef দিতে হবে, এবং আপনি অবিলম্বে যে ডাউন রচনা করতে সক্ষম হওয়া উচিত এমনকি ছাড়া এটা সম্পর্কে চিন্তা করল. আমি একটি দম্পতি অনুমান প্রশ্ন, কেন আমরা এখানে struct দরকার হবে? কেন আমরা নোড * বলতে পারেন না? [ছাত্র] [শ্রবণাতীত] হাঁ. শুধু যে একটা জিনিষ হিসাবে একটি নোড সংজ্ঞায়িত হয় typedef নিজেই. কিন্তু এই বিন্দু থেকে, যখন আমরা এই struct নোড সংজ্ঞা দিয়ে থাকেন পার্সিং ধরনের, আমরা এখনো আমাদের typedef সমাপ্ত করেন নি, তাই থেকে typedef সমাপ্ত না করেনি, নোডের মধ্যে বিদ্যমান নেই. কিন্তু struct নোড আছে, এখানে এবং, এই নোডের এই এছাড়াও করা যেতে পারে অন্য কিছু বলা হয়. এই নামে অভিহিত করা হতে পারে. এটা বলা যুক্ত তালিকা নোডের করা হতে পারে. এটি যে কোনো নামে অভিহিত করা হতে পারে. কিন্তু এই struct নোড প্রয়োজন এই struct নোড হিসাবে একই জিনিস বলা হবে না. আপনি কি এটাকে এখানে উল্লেখ করা হয়েছে, এবং তাই যে প্রশ্নের উত্তর দ্বিতীয় বিন্দু যা কেন-বার যখন আপনি structs এবং structs এর typedefs দেখতে অনেক, আপনি বেনামী structs দেখতে যেখানে আপনি শুধু typedef struct দেখতে পাবেন পাবেন, struct, অভিধান, বা যাই হোক না কেন বাস্তবায়ন. কেন আমরা এখানে যাও নোড বলে প্রয়োজন? কেন এটি একটি বেনামী struct হতে পারে না? প্রায় একই উত্তর. [ছাত্র] আপনি এটা struct মধ্যে পড়ুন প্রয়োজন. Struct মধ্যে হাঁ,, আপনি নিজেই struct পড়ুন প্রয়োজন. আপনি যদি একটি নাম struct কি না, যদি এটি একটি বেনামী struct, তাহলে পড়ুন করতে পারবেন না. এবং শেষ কিন্তু-অন্তত এই সব করা উচিত কিছুটা না সহজবোধ্য, এবং তারা আপনাকে বুঝতে যদি আপনি এই লেখার নিচে সাহায্য করা উচিত আপনি যে কিছু ভুল করছেন যদি জিনিষ এই প্রকারের ইন্দ্রিয় করা হবে না. কিন্তু শেষ না অন্তত, কেন এই যাও struct নোড * করা আছে? কেন এটা করা যাবে না নোড struct পরের? [ছাত্র] পরের struct যাও পয়েন্টার. অবশ্যম্ভাবী যে আমরা কি চাই. কেন এটা হতে পারে না struct নোড পরের? কেন এটা struct নোড * পরবর্তী করা আছে? হাঁ. [ছাত্র] এটি একটি অসীম লুপ মত. হাঁ. [ছাত্র] সমস্ত একটা হবে. হাঁ, কিভাবে আমরা মাপ বা কিছু করতে হবে, ঠিক মনে করি. একটি struct আকার মূলত হল + বা - কিছু প্যাটার্ন বা এখানে আছে. এটি মূলত এর যাও struct অনেক কিছু মাপ যোগফল হতে যাচ্ছে. কিছু পরিবর্তন ছাড়া এখানে ডান,, মাপ সহজ করা হচ্ছে. Struct নোডের মধ্যে ফাইলের আকার যাও তোমার পরের + আকার মাপ হতে হবে. তোমার আকার যাও 4 হবে. পরের ফাইলের আকার 4 হবে. Struct নোডের মধ্যে ফাইলের আকার যাও 8 হবে. * আমরা যদি না থেকে থাকে sizeof, চিন্তা, তারপর sizeof (ঝ) 4 হবে. Struct নোডের মধ্যে ফাইলের আকার পরের যাও তোমার মাপ হতে struct নোড পরবর্তী + আকার যাচ্ছে তোমার struct নোড পরবর্তী + আকার + আকার. এটি একটি নোড সীমাহীন recursion হবে. এটি কেন হয় কিভাবে এই জিনিষ আছে. আবার স্পষ্টভাবে, যে মুখস্থ করা, বা অন্তত যথেষ্ট এটা বুঝি যে আপনি করতে পারবেন এটা কি হওয়া উচিত মাধ্যমে কারণে. জিনিষ আমরা প্রয়োগ করতে চান চলুন. যদি দৈর্ঘ্যের তালিকা- আপনি এবং একটি কাছাকাছি রাখতে পারে ঠকাই বিশ্বব্যাপী দ্বারা বা কিছু, কিন্তু আমরা কি সেটা যাচ্ছেন না. আমরা তালিকার দ্বারা গণনা চলুন. আমরা উপস্থিত আছে, যাতে মূলত একটি অনুসন্ধান করার মত, তাই আমরা একটি পূর্ণসংখ্যার থেকে যদি এই পূর্ণসংখ্যা লিঙ্ক তালিকায় দেখুন লিঙ্ক তালিকা আছে. শুরুতে যোগ তালিকা প্রারম্ভে সন্নিবেশ যাচ্ছে. পরিশেষে শেষে সন্নিবেশ যাচ্ছে. Insert_sorted তালিকায় স্থান অনুসারে সাজানো মধ্যে সন্নিবেশ যাচ্ছে. এর Insert_sorted ধরনের অনুমান করে যে আপনার ব্যবহার করা বা শুরুতে যোগ কখনও খারাপ উপায়ে লিখবেন. Insert_sorted যখন আপনি insert_sorted-রূপায়ণকারী করছি এর যাক বলতে আমরা আমাদের লিঙ্ক তালিকা আছে. এটা কি এটি বর্তমানে, ভালো 2, 4, 5 দেখায়. আমি 3, সন্নিবেশ তাই যতদিন ইতিমধ্যে তালিকা অনুসারে সাজানো হয় নিজেই করতে চান, এটা যাও যেখানে 3 জন্যে খুঁজে সহজ. আমি 2 আরম্ভ হয়. ঠিক আছে, 3 2 হয় তার চেয়ে অনেক বেশী, তাই আমি যাব রাখতে চান. ওহ, 4 অত্যন্ত বড়, তাই আমি জানি 2 3 এবং 4 এর মধ্যে যেতে হবে, এবং আমি পয়েন্টার এবং যে সব উপাদান ঠিক করা আছে. কিন্তু আমরা যদি insert_sorted ব্যবহার কঠোরভাবে না করে থাকেন, যাক এর চান সেটা আমি 6 পূর্বে লিখুন, তারপর আমার এই তালিকায় সংযুক্ত হতে হয়. এটা এখন কোন মানে তোলে, তাই insert_sorted জন্য, শুধুমাত্র আপনি অনুমান করতে পারেন যে তালিকা, সাজানো যদিও অপারেশন বিদ্যমান হয় তা না অনুসারে বাছাই করা, কারণ যে এটি করতে পারেন. একটি সহায়ক সন্নিবেশ-তাই যারা প্রধান বিষয় আপনাকে প্রয়োগ আছে চলুন খুঁজুন. এখন জন্য, একটি মিনিট দৈর্ঘ্যের না নিতে এবং রয়েছে, এবং যারা অপেক্ষাকৃত দ্রুত করা উচিত. বন্ধের সময় কাছাকাছি, যাতে কারও দ্বারা জন্য কিছু আছে বা রয়েছে? তারা প্রায় অভিন্ন হতে যাচ্ছেন. [ছাত্র] দৈর্ঘ্য. এর চলুন দেখা যাক পুনর্বিবেচনা,. ঠিক আছে. আপনি ব্যাখ্যা করতে চান? [ছাত্র] আমি একটি পয়েন্টার নোড নির্মাণ এবং প্রথম, যা আমাদের বিশ্বব্যাপী পরিবর্তনশীল এটি আরম্ভ করা, এবং তারপরে আমি যদি এটা নাল তাই আমি এবং পেতে কোনো দোষ না seg 0 যদি যে কেস ফিরে দেখুন. অন্যথা, আমি মাধ্যমে লুপ, মধ্যে পূর্ণসংখ্যা সম্পর্কে অবগত থাকার কতবার আমি তালিকার পরবর্তী উপাদান ব্যবহার করেছি এবং একই মুনাফা কার্যপ্রণালীতে যে প্রকৃত উপাদান অ্যাক্সেস, এবং তারপর আমি একটানা চেক যদি নাল দেখতে করা, এবং যদি এটা নাল, তারপর aborts এবং মাত্র উপাদান আমি ব্যবহার করেছি নম্বর ফেরৎ. [বি Rob] কেউ কি কিছু কোনো মন্তব্য আছে? এই দেখায় সূক্ষ্ম শুদ্ধি জ্ঞানময়. [ছাত্র] আমি আপনাকে নোড == নাল প্রয়োজন মনে করি না. হ্যাঁ, তাই যদি নোড == নাল রিটার্ন 0. কিন্তু যদি পরে নোড == নাল এই-উহু, একটি শুদ্ধি সমস্যা আছে. এটা ঠিক আপনি আমি ফিরে করছেন, কিন্তু এটি সঠিক সুযোগ এখন না. আপনি শুধুমাত্র int তোমার প্রয়োজন, তাই আমি = 0. কিন্তু যদি নোড হল নাল তারপর, আমি এখনও 0 হতে যাচ্ছে, এবং আমরা 0 ফিরে যাচ্ছেন, তাই এই ক্ষেত্রে অভিন্ন. আরেকটি সাধারণ জিনিস যাও ঘোষণা রাখা হয় এর জন্য লুপ এর নোডের ভিতর. আপনি বলতে-উহু পারে, কোন. চলুন এটি এই হিসাবে রাখা. আমি সম্ভবত করা int i = 0 এখানে হবে, তারপর নোড * নোড = এখানে প্রথম. এবং সম্ভবত এই ভাবে-পেয়ে এখন এই পরিত্রাণ. এটা সম্ভবত আমি কিভাবে এটি করা হবে. আপনি কি এটা ভালো এছাড়াও-খুঁজছেন পারে. এই লুপ গঠন জন্য এখানে ডান প্রায় হিসাবে আপনার জন্য int i = 0 হিসাবে প্রাকৃতিক হওয়া উচিত হল অ্যারের দৈর্গের তোমার +. যদি যে কিভাবে আপনি একটি অ্যারের উপর বারবার, এই ভাবে আপনি একটি লিঙ্ক তালিকা উপর বারবার. এই কিছু সময়ে দ্বিতীয় প্রকৃতি হওয়া উচিত. মন যে, এই প্রায় একই জিনিস হবে. আপনি একটি তালিকা সংযুক্ত করতে চান পুনরুক্তি উপর চলুন. যদি নোড-আমি কোন ধারণা কি মূল্য বলা হয় আছে. তোমার নোড. যদি যে নোড এ মান = আমি ফিরে সত্য, এবং যে এটি. উল্লেখ্য যে আমরা কখনও মিথ্যা প্রত্যাবর্তন যদি সমগ্র লিঙ্ক তালিকা উপর আমরা বারবার করা এবং সত্য না ফিরে, যাতে এর কি এই আছে. হিসাবে একটি সাইড নোট-আমরা হয়ত বা লিখবেন পূর্বে লিখুন পেতে হবে না. দ্রুত শেষ নোট. আপনি যদি স্ট্যাটিক কিওয়ার্ড দেখতে, তাই কিছু বলতে স্ট্যাটিক int-গণনা ঃ = 0, তারপর আমরা গণনা না +, আপনি এটি মূলত একটি বিশ্বব্যাপী পরিবর্তনশীল হিসাবে মনে করতে পারেন, যদিও আমি এই বলেন কিভাবে আমরা দ্বারা বাস্তবায়ন করতে যাচ্ছেন না. আমি এই করছি এখানে করছেন, এবং তারপর + গণনা. কোন ভাবেই আমরা আমাদের যুক্ত তালিকা আমরা আমাদের গণনা করা হয় বৃদ্ধিশীল একটি নোডের মধ্যে লিখতে পারেন. এই বিন্দু কি স্ট্যাটিক কিওয়ার্ড মানে. যদি আমি int-গণনা ঃ = 0 ছিল যে একটি নিয়মিত পুরানো বিশ্বব্যাপী পরিবর্তনশীল হবে. কি স্ট্যাটিক int-গণনা ঃ মানে হল যে এই একটি ফাইল জন্য বিশ্বব্যাপী পরিবর্তনশীল. এটা অন্য কোনো ফাইল জন্য অসম্ভব, pset 5 মনে চাই, যদি আপনি শুরু করেছেন. উভয় speller.c আছে, এবং আপনি dictionary.c আছে, এবং আপনি যদি শুধুমাত্র একটি জিনিস বিশ্বব্যাপী, ডিক্লেয়ার speller.c তারপর কিছু dictionary.c এবং তদ্বিপরীত মধ্যে ব্যবহার করা যাবে. গ্লোবাল ভেরিয়েবল কোনো. গ দ্বারা ব্যবহারযোগ্য ফাইল, কিন্তু স্ট্যাটিক ভেরিয়েবেলগুলো মধ্যে ফাইল নিজেই থেকে শুধু, যাতে ভিতর থেকেই বানান পরীক্ষক ভিতরে বা dictionary.c মধ্যে, এই ভাবে আমি আমার অ্যারের জন্য আমার মাপ পরিবর্তনশীল ডিক্লেয়ার করে ধরনের অভিধান বা শব্দের আমার নম্বর মাপ. যেহেতু আমি একটি বিশ্বব্যাপী পরিবর্তনশীল যে কেউ করেনি ডিক্লেয়ার অ্যাক্সেস করতে না চান, আমি এটা সম্পর্কে সত্যিই শুধুমাত্র আমার নিজের কাজের জন্য যত্ন. এই সম্পর্কে ভালো এছাড়াও পুরো নাম সংঘর্ষের উপাদান. যদি কিছু ফাইল অন্য একটি বিশ্বব্যাপী পরিবর্তনশীল নামক গণনা ব্যবহার করার চেষ্টা করে, বিপরীত দিকে খুব খুব, ভুল, তাই সুন্দরভাবে এই জিনিষ নিরাপদ রাখে, এবং শুধুমাত্র আপনি এটি ব্যবহার করতে পারেন, এবং কোন কেউ এবং, যদি কারোর একটি বিশ্বব্যাপী পরিবর্তনশীল নামক গণনা ঘোষণা করে, করতে পারেন তাহলে আপনার স্ট্যাটিক পরিবর্তনশীল নামক গণনা হস্তক্ষেপ করবে না. এটা কি স্ট্যাটিক হয়. এটি একটি ফাইল বিশ্বব্যাপী পরিবর্তনশীল. কিছু প্রশ্ন? সমস্ত সেট. Bye. [CS50.TV]