কোন অ্যারের পরিবর্তে লিঙ্কযুক্ত তালিকা ব্যবহারের জন্য কংক্রিটের নিয়ম কী?


18

আপনি যখন সস্তার সন্নিবেশ এবং উপাদানগুলি মুছতে চান এবং কোনও উপাদান যখন মেমরির ক্ষেত্রে একে অপরের পাশে না থাকে তখন কোনও লিঙ্কযুক্ত তালিকা ব্যবহার করা যেতে পারে।

এটি খুব বিমূর্ত এবং আমি কেন একটি অ্যারের পরিবর্তে লিঙ্কযুক্ত তালিকাটি ব্যবহার করা উচিত তার একটি নিবিড় ব্যাখ্যা চাই। আমি প্রোগ্রামিং নিয়ে খুব অভিজ্ঞ নই, তাই বাস্তব-জগতের অভিজ্ঞতা আমি খুব বেশি পাই নি।


3
সত্যিই, আমি মনে করি না উদাহরণগুলি আপনার কাছে এতটা অর্থ বোঝায় যতক্ষণ না আপনার কিছু লেখার অভিজ্ঞতা থাকে এবং তারপরে ডেটা স্ট্রাকচার পরিবর্তন করে আপনার কোডে কী প্রভাব পড়ে seeing হয় আপনার আগ্রহী এমন কিছু লেখার চেষ্টা করুন এবং ডেটা স্ট্রাকচার এবং পাত্রে কী উপযুক্ত তা সঠিকভাবে আবিষ্কার করুন বা কিছু বিদ্যমান কোড দেখুন এবং প্রতিটি পাত্রে কেন নির্বাচন করা হয়েছে, এবং এর কী কী পরিবর্তন হবে তা নিয়ে চিন্তা করুন।
অনর্থক

আমি কেবল মনে করি না যে এখানে যুক্তিসঙ্গত তুলনায় দীর্ঘকালীন কাজের উদাহরণ ছাড়াই ট্রেড-অফগুলি এবং ডেটা স্ট্রাকচার নির্বাচনের পার্শ্ব-প্রতিক্রিয়া (অনভিজ্ঞ) ওপিতে যোগাযোগ করা কার্যকরভাবে সম্ভব। উত্তর হিসাবে দেওয়া উদাহরণগুলি ভাল, এবং জিজ্ঞাসিত প্রশ্নের উত্তর দেয়, তবে (যা আমি পড়ি তাই) প্রকৃত বোঝার জন্য একটি নিবিড় অনুরোধ নয়।
অযথা

উত্তর:


37

উদাহরণ এবং সাদৃশ্যগুলির মধ্যে কিছু অংশ এখানে রয়েছে। আপনার কিছু করণীয় রয়েছে, তাই আপনি কাগজের টুকরোটি ধরুন এবং লিখুন:

  • ব্যাংক
  • মুদীখানার পণ্যদ্রব্য
  • শুকনো ছাড়ানো ছেড়ে দিন

তারপরে আপনি মনে রাখবেন যে আপনারও স্ট্যাম্প কিনতে হবে। আপনার শহরের ভূগোলের কারণে আপনার ব্যাঙ্কের পরে এটি করা দরকার। আপনি আপনার পুরো তালিকাটি একটি নতুন কাগজের টুকরোতে অনুলিপি করতে পারেন:

  • ব্যাংক
  • স্ট্যাম্পের
  • মুদীখানার পণ্যদ্রব্য
  • শুকনো ছাড়ানো ছেড়ে দিন

অথবা আপনি যা লিখেছিলেন তার উপরে আপনি লিখতে পারেন:

  • ব্যাংক ....... স্ট্যাম্পস
  • মুদীখানার পণ্যদ্রব্য
  • শুকনো ছাড়ানো ছেড়ে দিন

আপনি অন্যান্য কাজগুলির কথা ভেবেছিলেন, আপনি এগুলি তালিকার নীচে লিখতে পারেন, তবে তীরগুলি দিয়ে সেগুলিতে কী করা উচিত তা নিজেকে মনে করিয়ে দিচ্ছেন This এটি একটি লিঙ্কযুক্ত তালিকা। আপনি যখন কোনও কিছু যুক্ত করেন তখন পুরো তালিকাটি অনুলিপি করা আরও দ্রুত এবং সহজ।

তারপরে আপনার ব্যাঙ্কে থাকাকালীন আপনার সেল ফোন বেজে উঠল "আরে, আমি স্ট্যাম্পগুলি পেয়েছি, আর কোনও বাছাই করব না"। আপনি কেবল তালিকা থেকে স্ট্যাম্পসকে অতিক্রম করেছেন, আপনি এতে স্ট্যাম্পস ব্যতীত সম্পূর্ণ নতুনকে নতুন করে লিখবেন না।

এখন আপনি কোডে প্রকৃতপক্ষে একটি তালিকা কার্যকর করতে পারেন (সম্ভবত এমন কোনও অ্যাপ্লিকেশন যা আপনার ভূগোলের উপর ভিত্তি করে আপনার কাজগুলি স্থির করে রাখে) এবং যুক্তিসঙ্গত সুযোগ রয়েছে যা আপনি কোডের জন্য লিংকযুক্ত তালিকাটি ব্যবহার করবেন। আপনি প্রচুর আইটেম যুক্ত করতে এবং মুছতে চান, বিষয়গুলি অর্ডার করতে পারেন, তবে প্রতিটি সন্নিবেশ বা মোছার পরে আপনি পুরো তালিকাটি পুনরায় কিনতে চান না।



@ ডেনিস হ্যাঁ, আমি জানি, শব্দার্থক স্থানান্তর করার জন্য ধন্যবাদ। তবে এটি সমস্ত ভাষার ক্ষেত্রে সত্য নয় তাই উদাহরণটি দাঁড়িয়ে আছে।
কেট গ্রেগরি

1
@ কেটগ্রিগরি যথেষ্ট মেলা, তবে এটি এখনও উল্লেখ করা ভাল যে "প্রাথমিক" ডেটা স্ট্রাকচারগুলি আমরা স্কুলে (বা অন্য কোথাও) যে শীতল ডেটা স্ট্রাকচার সম্পর্কে শিখি তার চেয়ে প্রায়শই ভাল। আমি নতুন গ্রেডগুলি সর্বত্র এলএল ব্যবহার করতে চাই না কারণ এটি তাত্ত্বিকভাবে উপযুক্ত যখন সম্ভবত বাস্তবের দিক থেকে একটি দুর্বল পছন্দ হচ্ছেন। সঠিক ডেটা কাঠামো ব্যবহার করা গুরুত্বপূর্ণ, এবং কখনও কখনও লোকেরা এটি অত্যধিক জটিল করে তোলে। ডেটা স্ট্রাকচারের বিষয়ে জোনাথন ব্লো ("ব্রেড" এর স্রষ্টা) এই আলাপটি সামান্য সম্পর্কিত ।
ডেনিস

1
@ রে: একটি লিঙ্কযুক্ত তালিকাগুলি একটি গাছের কাঠামোকে ছাড়িয়ে যেতে পারে যদি আপনি আশা করেন যে সেখানে 4 টি উপাদান রয়েছে এবং তুলনা তুলনামূলকভাবে সস্তা হয়। আমি জানি না ঠিক কোথায় কাটা হয়েছে যেখানে এই ঘটনাটি নেই। এছাড়াও, একটি গাছের কাঠামোর জন্য আপনার ডেটা বাছাই করা প্রয়োজন, যেখানে একটি তালিকা কাঠামো আপনাকে সন্নিবেশ ক্রম (বা কোনও স্বেচ্ছাচারিত ক্রম) বজায় রাখতে দেয়।
ডেভিড স্টোন

2
আমি মনে করি না যে এই উপমাটি খুব সঠিক accurate মানুষ হিসাবে, আমরা (অন্তত এইরকম একটি সংক্ষিপ্ত তালিকার জন্য) ও (1) এ একটি উপাদান খুঁজে পেতে পারি। তবে আপনি যদি কোনও লিঙ্কযুক্ত তালিকায় একটি র্যান্ডম সন্নিবেশ করতে চান, আপনাকে গড় অর্ধেক উপাদানগুলি অতিক্রম করতে হবে যার জন্য আপনাকে ও (এন) খরচ করে কেবল আপনি যে অবস্থানটি সন্নিবেশ করতে চান তা সন্ধান করতে হবে। আসল সন্নিবেশের পরে কেবলমাত্র ও (1) ব্যয় হয় তবে একটি অ্যারের সাথে আপনার খরচও হয় "কেবল" ও (এন)। সুতরাং কারণটি কেবল পদার্থবিজ্ঞানের কারণে নয় তবে অ্যালগোরিদমিক। বিগ-ও দ্বারা গোপন করা ধ্রুবক ফ্যাক্টরটি পছন্দ তালিকার তুলনায় অনেক বড়, তবে অ-স্বতন্ত্র মেমরি অ্যাক্সেসের কারণে।
5gon12eder

18
  • Hashtables ব্যবহার chaining সমাধানে হ্যাশ দুর্ঘটনায় সাধারণত যে বালতি মধ্যে উপাদানের জন্য বালতি প্রতি এক যুক্ত তালিকা আছে।
  • সাধারণ মেমোরি বরাদ্দকারীরা অব্যবহৃত মেমরি অঞ্চলের একটি নিখরচায় তালিকা ব্যবহার করে , মূলত নিখরচর মেমরির ভিতরে তালিকা পয়েন্টারের সাথে একটি লিঙ্কযুক্ত তালিকা
  • একটি ফ্যাট ফাইল সিস্টেমে , একটি বড় ফাইলের মেটাডেটা FAT এন্ট্রিগুলির লিঙ্কযুক্ত তালিকা হিসাবে সংগঠিত হয়।

12

সি-ল্যাঙ্গুয়েজ "কল স্ট্যাক" x86 (এবং অন্যান্য বেশিরভাগ) বাইনারি এপিআই-তে একটি লিঙ্কযুক্ত তালিকা হিসাবে প্রয়োগ করা হয়েছে

এটি হ'ল সি-ল্যাঙ্গুয়েজ পদ্ধতি কলিংটি প্রথম-ইন, শেষ-শৃঙ্খলা অনুসরণ করে। সম্পাদন (সম্ভবত পুনরাবৃত্ত হওয়া) ফাংশন কলগুলির ফলাফলকে একটি "কল স্ট্যাক" বা কখনও কখনও কেবল "স্ট্যাক" হিসাবে উল্লেখ করা হয়।

CALLএক্স 86 নির্দেশ "Call স্ট্যাক" এর ব্যবহার যুক্ত তালিকা implmenting শেষ পর্যন্ত। একটি CALLনির্দেশ% EIP রেজিস্টার বিষয়বস্তু, নির্দেশ করছে তার ঠিকানার সাথে পাহাড় জমে পরCALL সম্মুখের স্ট্যাকের মেমরি। কল-ফাকশন প্রোলজ% EBP রেজিস্ট্রারের সামগ্রীগুলিকে ধাক্কা দেয়, কলিং ফানকিটিওতে স্থানীয় ভেরিয়েবলের সর্বনিম্ন ঠিকানা, স্ট্যাক মেমোরিতে। তারপরে তথাকথিত ফাংশন প্রোলজ% EBP বর্তমান ফাংশনের স্ট্যাক বেসকে সেট করে।

এর অর্থ হল যে% EBP একটি মেমরি অবস্থানের জন্য একটি পয়েন্টার যা কলিং ফাংশনের% EBP মানের ঠিকানাটি ধারণ করে। এটি কোনও লিঙ্কযুক্ত তালিকার চেয়ে বেশি কিছু নয়, যা আংশিকভাবে হার্ডওয়্যার মাধ্যমে প্রয়োগ করা হয় CALL

যতদূর এটির পক্ষে ভাল, এটি x86 সিপিইউগুলি কীভাবে ফাংশন কলগুলি বাস্তবায়িত করে, বিশেষত ফাংশন কলগুলি যেখানে ফাংশনটির নিজস্ব আর্গুমেন্টের অনুলিপি থাকে এবং ফাংশনে স্থানীয় ভেরিয়েবল। প্রতিটি ফাংশন কল "কল স্ট্যাক" এর কিছু তথ্য ঠেলে দেয় যা সিপিইউকে কলিং ফাংশনটিতে যেখানে ফেলে রেখেছিল তা কল করতে দেয় বা কলিং ফাংশন থেকে কোনও হস্তক্ষেপ ছাড়াই।


3

একটি লিঙ্কযুক্ত তালিকা বার্তার সারি প্রয়োগ করতে ব্যবহার করা যেতে পারে।

একটি বার্তা সারি একটি কাঠামো যাতে আমরা পরবর্তী প্রক্রিয়াজাতকরণের জন্য ইভেন্টগুলি সম্পর্কিত তথ্য সঞ্চয় করি। উদাহরণস্বরূপ, যখন ব্যবহারকারী কোনও কী চাপুন বা মাউসটি সরান, এটি একটি ইভেন্ট। ইভেন্টটি হওয়ার সময় কোনও অ্যাপ্লিকেশন এই মুহুর্তে ব্যস্ত থাকতে পারে, সুতরাং যখন ঘটনাটি ঘটে তখন সুনির্দিষ্ট মুহুর্তে ইভেন্টটি প্রক্রিয়া করা আশা করা যায় না। সুতরাং, ইভেন্টটি একটি বার্তার কাতারে স্থাপন করা হয়েছে (কোন কী টিপানো হয়েছে বা মাউসটি কোথায় চলে গেছে সে সম্পর্কে তথ্য) এবং অ্যাপ্লিকেশনটিতে কিছুটা সময় দেওয়ার সময়, এটি তার বার্তার সারিটি পরীক্ষা করে, এর থেকে ইভেন্টগুলি আনে এবং প্রক্রিয়া করে তাদের। (এটি মিলিসেকেন্ডগুলির একটি সময়ের ফ্রেমের মধ্যে ঘটে তাই এটি লক্ষণীয় নয়))

আমি কেবল বর্ণিত ব্যবহারের পরিস্থিতি থেকে, এটি স্পষ্ট হওয়া উচিত যে আমরা কখনই বার্তার কাতারে সজ্জিত ইভেন্টগুলিতে এলোমেলো অ্যাক্সেসের যত্ন নিতে পারি না; আমরা কেবল এটিতে বার্তাগুলি সঞ্চয় করতে এবং সেগুলি পুনরুদ্ধার করতে সক্ষম হব care সুতরাং, এটি কোনও লিঙ্কযুক্ত তালিকাটি ব্যবহার করা বোধগম্য করে, যা সর্বোত্তম সন্নিবেশ / অপসারণের সময় সরবরাহ করে।

(দয়া করে কোনও বার্তার সারি সম্ভবত বিজ্ঞপ্তিযুক্ত অ্যারে-তালিকা ব্যবহার করে প্রয়োগ করা যেতে পারে বা সম্ভবত আরও সম্ভবত, বা প্রায় সম্ভবত সম্ভাব্য হিসাবে চিহ্নিত করতে বাট করবেন না; এটি প্রযুক্তিগত বিশদ, এবং এর সীমাবদ্ধতা রয়েছে: আপনি কেবল সঞ্চয় করতে পারবেন এটিতে সীমিত সংখ্যক বার্তা))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.