প্রতিটি ডাটা টাইপ কি পয়েন্টার সহ নোডগুলিতে কেবল ফোটে?


21

একটি অ্যারে বা ভেক্টর হ'ল মানগুলির একটি ক্রম। এগুলি অবশ্যই একটি লিঙ্কযুক্ত তালিকার সাথে প্রয়োগ করা যেতে পারে। এটি পরবর্তী নোডের পয়েন্টার সহ কেবল নোডের একটি গুচ্ছ।

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

অগ্রাধিকার সারি একটি হিপ ব্যবহার করে তৈরি করা যেতে পারে। একটি গাদা মূল হিসাবে নূন্যতম মান সহ একটি গাছ হিসাবে ভাবা যেতে পারে। বিএসটি, এভিএল, হিপস সহ সকল প্রকারের গাছগুলি প্রান্তগুলি দ্বারা সংযুক্ত নোডের সংগ্রহ হিসাবে ভাবা যেতে পারে। এই নোডগুলি একসাথে লিঙ্কযুক্ত যেখানে একটি নোড অন্যটিতে নির্দেশ করে।

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


5
আপনি যে মৌলিক ডেটা স্ট্রাকচারের ইঙ্গিত দিচ্ছেন তাকে "কনস সেল" বলা হয়; এগুলির মধ্যে আপনি যে কোনও ডেটা স্ট্রাকচার পছন্দ করতে পারেন। যদি আপনি জানতে চান যে কোনও প্রদত্ত পাঠ্যপুস্তক লেখক কনস সেলগুলি ব্যাখ্যা করতে পছন্দ করেন না, তবে সেই লেখককে জিজ্ঞাসা করুন কেন তারা এই পছন্দটি করেছেন। বাইনারি কোডে নোডের বিন্যাসের বর্ণনা থেকে "সংকলন" বলা হয় এবং এটি একটি "সংকলক" এর কাজ।
এরিক লিপার্ট

18
আপনি যুক্তিও দিতে পারেন যে সমস্ত ডেটা স্ট্রাকচারগুলি একটি অ্যারেতে ফোটে। সর্বোপরি, তারা সকলেই স্মৃতিতে শেষ হয় যা কেবল একটি খুব বড় অ্যারে।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

10
আপনি যদি সূচক রাখতে চান তবে আপনি লিঙ্কযুক্ত তালিকা ব্যবহার করে কোনও অ্যারে প্রয়োগ করতে পারবেন না । O(1)
সুইভ

5
দুঃখিত, তবে "নোড এবং পয়েন্টার" সম্পর্কে কথা বলার অর্থ আপনি ইতিমধ্যে কুইচে-খাওয়াতে আত্মত্যাগ করেছেন। " যেমনটি সমস্ত রিয়েল প্রোগ্রামাররা জানেন, কেবলমাত্র দরকারী ডেটা স্ট্রাকচার হ'ল অ্যারে St স্ট্রিংস, তালিকা, কাঠামো, সেট - এগুলি অ্যারের বিশেষ ক্ষেত্র এবং সমস্ত প্রকারের সাথে আপনার প্রোগ্রামিংয়ের ভাষা জগাখিচু না করে ঠিক সেভাবেই চিকিত্সা করা যেতে পারে" । জটিলতার "সূত্র:" রিয়াল প্রোগ্রামারদের পাসকাল "ব্যবহার না থেকে web.mit.edu/humor/Computers/real.programmers
alephzero

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

উত্তর:


14

ঠিক আছে, মূলত এটি সমস্ত ডেটা স্ট্রাকচারই ফোটায়। সংযোগ সহ ডেটা। নোডগুলি সমস্ত কৃত্রিম - এগুলি আসলে শারীরিকভাবে বিদ্যমান থাকে না। বাইনারি অংশটি এখানে আসে C আপনি সি ++ তে কয়েকটি ডেটা স্ট্রাকচার তৈরি করতে হবে এবং আপনার বস্তুগুলি মেমরিতে কোথায় নেমেছে তা পরীক্ষা করা উচিত। ডেটা মেমরিতে কীভাবে রাখা হয় তা শিখতে খুব আকর্ষণীয় হতে পারে।

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

পার্শ্ব নোট হিসাবে, আপনি দেখতে চাইতে পারেন একটি আকর্ষণীয় ডেটা কাঠামো হ্যাশ টেবিল। এটি আপনি বর্ণনা করছেন নোড এবং পয়েন্টার সিস্টেমটি পুরোপুরি অনুসরণ করে না।

টিএল; ডিআর: পাত্রে মূলত সমস্ত নোড এবং পয়েন্টার রয়েছে তবে খুব নির্দিষ্ট ব্যবহার রয়েছে এবং এটি কোনও কিছুর জন্য ভাল এবং অন্যদের জন্য খারাপ।


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

13

দেখে মনে হচ্ছে যে প্রতিটি ডেটা কনসেপ্ট সবসময় কেবল কিছু নোডের সাথে অন্য কিছু উপযুক্ত নোডের পয়েন্টার সহ সিদ্ধ হতে পারে।

ওহ, প্রিয় না। তুমি আমাকে ব্যথা দিচ্ছো.

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

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

এবং উদাহরণস্বরূপ গ্রাফগুলির জন্য, যা অবশ্যই নোড এবং পয়েন্টার (প্রান্ত) এর মতো লাগে, আপনার দুটি প্রাথমিক উপস্থাপনা, সংলগ্ন অ্যারে এবং সংলগ্ন তালিকা রয়েছে। সমস্ত পয়েন্টার আমি কল্পনা করি না।

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


10

আসুন গণিতের সাথে সাদৃশ্য রাখি। নিম্নলিখিত বাক্যটি বিবেচনা করুন: " একটি ক্রমাগত ফাংশন"। কার্যকারিতা আসলে সম্পর্কের ক্ষেত্রে সংজ্ঞায়িত হয়, যা সেটগুলির ক্ষেত্রে সংজ্ঞায়িত হয়। আসল সংখ্যার সেটটি অনন্য সম্পূর্ণ সম্পূর্ণ অর্ডারযুক্ত ক্ষেত্র: এই সমস্ত ধারণারই সহজ শর্তে সংজ্ঞা রয়েছে। ধারাবাহিকতা সম্পর্কে কথা বলার জন্য আপনার প্রতিবেশের ধারণাটি দরকার, যা টপোলজির সাথে সংজ্ঞায়িত করা হয় ... এবং জেডএফসির অলক্ষেত্রের সমস্ত পথে।:আরআর

কেউই প্রত্যাশা করে না যে আপনি কেবলমাত্র একটি অবিচ্ছিন্ন ক্রিয়াকলাপটি সংজ্ঞায়িত করার জন্য এই সমস্ত কিছু বলবেন, অন্যথায় কেউ কোনও কাজ একেবারেই করতে সক্ষম হবেন না। আমরা কেবল "বিশ্বাস" করি যে কেউ আমাদের জন্য বিরক্তিকর কাজ করে।

প্রতিটি ডেটা স্ট্রাকচার আপনি সম্ভবত আপনার অন্তর্নিহিত গণনা মডেলটি যে মৌলিক অবজেক্টগুলি নিয়ে কাজ করেন সেগুলি সম্পর্কে ফোটার কথা ভাবতে পারেন, আপনি কোনও র্যান্ডম-অ্যাক্সেস মেশিন ব্যবহার করেন তবে কিছু রেজিস্টারে পূর্ণসংখ্যা বা আপনি যদি কোনও টুরিং মেশিন ব্যবহার করেন তবে কিছু টেপে প্রতীক।

আমরা বিমূর্ততা ব্যবহার করি কারণ তারা আমাদের মনকে তুচ্ছ বিষয় থেকে মুক্ত করে, আরও জটিল সমস্যা সম্পর্কে কথা বলতে দেয়। এই কাঠামোগুলি কেবল "বিশ্বাস" করার পক্ষে এটি সম্পূর্ণ যুক্তিযুক্ত: প্রতিটি বিশদ বিবরণে স্ফীত হওয়া - যদি আপনার এটি করার কোনও নির্দিষ্ট কারণ না থাকে - একটি নিরর্থক অনুশীলন যা আপনার যুক্তিতে কোনও কিছুই যুক্ত করে না।


10

এখানে একটি পাল্টা উদাহরণ রয়েছে: λ-ক্যালকুলাসে, প্রতিটি ডেটা টাইপ ফাংশনগুলিতে ফোটে। calc-ক্যালকুলাসের নোড বা পয়েন্টার নেই, কেবল এটির কাজগুলি হ'ল ফাংশনগুলি, সুতরাং ফাংশন ব্যবহার করে সবকিছুই প্রয়োগ করা উচিত।

এটি ECMAScript এ লিখিত, বুলেটিনগুলি ফাংশন হিসাবে এনকোডিংয়ের একটি উদাহরণ:

const T   = (thn, _  ) => thn,
      F   = (_  , els) => els,
      or  = (a  , b  ) => a(a, b),
      and = (a  , b  ) => a(b, a),
      not = a          => a(F, T),
      xor = (a  , b  ) => a(not(b), b),
      iff = (cnd, thn, els) => cnd(thn, els)();

এবং এটি একটি কনস তালিকা:

const cons = (hd, tl) => which => which(hd, tl),
      first  = list => list(T),
      rest   = list => list(F);

প্রাকৃতিক সংখ্যা পুনরাবৃত্তি ফাংশন হিসাবে প্রয়োগ করা যেতে পারে।

একটি সেট তার বৈশিষ্ট্যযুক্ত ফাংশন (অর্থাত্ containsপদ্ধতি) হিসাবে একই জিনিস ।

নোট করুন যে উপরের চার্চ এনকোডিং বুলিয়ানগুলি আসলে কীভাবে শর্তসাপেক্ষে ওও ভাষাগুলিতে স্মল্টালকের মতো প্রয়োগ করা হয়, যার বুলেটিয়ান, শর্তাদি বা লুপ নেই ভাষা রচনা হিসাবে এবং এগুলি নিখুঁতভাবে গ্রন্থাগারের বৈশিষ্ট্য হিসাবে প্রয়োগ করে। স্কালার একটি উদাহরণ:

sealed abstract trait Boolean {
  def apply[T, U <: T, V <: T](thn: => U)(els: => V): T
  def(other: => Boolean): Boolean
  def(other: => Boolean): Boolean
  val ¬ : Boolean

  final val unary_! = ¬
  final def &(other: => Boolean) =(other)
  final def |(other: => Boolean) =(other)
}

case object True extends Boolean {
  override def apply[T, U <: T, V <: T](thn: => U)(els: => V): U = thn
  override def(other: => Boolean) = other
  override def(other: => Boolean): this.type = this
  override final val ¬ = False
}

case object False extends Boolean {
  override def apply[T, U <: T, V <: T](thn: => U)(els: => V): V = els
  override def(other: => Boolean): this.type = this
  override def(other: => Boolean) = other
  override final val ¬ = True
}

object BooleanExtension {
  import scala.language.implicitConversions
  implicit def boolean2Boolean(b: => scala.Boolean) = if (b) True else False
}

import BooleanExtension._

(2 < 3) { println("2 is less than 3") } { println("2 is greater than 3") }
// 2 is less than 3

2
@ হ্যামস্টেরিফিক: এটি চেষ্টা করুন: এটি আসলে কীভাবে শর্টালটকের মতো ওও ভাষায় শর্তসাপেক্ষ প্রয়োগ করা হয়। লিমিটেডের কোনও ভাষা নির্মাণ হিসাবে বুলেট, শর্তসাপেক্ষ বা লুপ নেই। এগুলি সমস্ত খাঁটিভাবে গ্রন্থাগার হিসাবে প্রয়োগ করা হয়। মন এখনও ফুঁকছে না? উইলিয়াম কুক এমন একটি বিষয় নির্দেশ করেছেন যা অনেক আগে প্রকাশিত হওয়া উচিত ছিল তবে সত্যই এটি লক্ষ্য করা যায় নি: যেহেতু ওও আচরণগত বিমূর্ততা সম্পর্কে সমস্ত, এবং আচরণগত বিমূর্ততা একমাত্র বিমূর্ততা যা λ-ক্যালকুলাসে বিদ্যমান, এটি অনুসরণ করে যে সমস্ত প্রোগ্রামে লিখিত আছে calc-ক্যালকুলাস হ'ল প্রয়োজনীয়তা ওও। এরগো, λ-ক্যালকুলাস সবচেয়ে প্রাচীন এবং…
জার্গ ডব্লু মিতাগ

… শুদ্ধতম ওহে ভাষা!
Jörg ডব্লু মিট্টাগ

1
স্মল্টালকের একটি খারাপ দিন সি ++ :-) দিয়ে একটি ভাল দিনকে হারাচ্ছে
বব জার্ভিস - মনিকা

@ জার্গডব্লিউমিত্যাগ আমি মনে করি না যে আপনার উপসংহারটি আপনার অনুমানের পরে চলেছে, আমি মনে করি না যে আপনার অনুমানটিও সত্য, এবং আমি অবশ্যই আপনার সিদ্ধান্তটি সত্য বলে মনে করি না।
মাইলস রুট

4

অনেকগুলি (সর্বাধিক?) ডেটা স্ট্রাকচারগুলি নোড এবং পয়েন্টার দিয়ে তৈরি। অ্যারেগুলি কিছু ডেটা স্ট্রাকচারের আরেকটি সমালোচক উপাদান।

শেষ পর্যন্ত, প্রতিটি ডেটা স্ট্রাকচার হ'ল মেমরির শব্দের একগুচ্ছ বা বিটগুলির একগুচ্ছ। এটি কীভাবে কাঠামোগত হয় এবং আমরা কীভাবে তাদের গুরুত্বপূর্ণ এবং কীভাবে তা গুরুত্বপূর্ণ তা ব্যাখ্যা করি use


2
শেষ পর্যন্ত, বিটগুলি একটি তারে বৈদ্যুতিক সংকেতগুলির একটি গুচ্ছ, বা একটি ফাইবার অপটিক কেবলে হালকা সংকেত, বা একটি প্ল্যাটারে বিশেষত চৌম্বকীয় কণা, বা নির্দিষ্ট তরঙ্গদৈর্ঘ্যের রেডিও তরঙ্গ, বা, বা, বা are সুতরাং প্রশ্নটি হল, আপনি কত গভীর যেতে চান? :)
ওয়াইল্ডকার্ড

2

ডেটা স্ট্রাকচারের প্রয়োগ সর্বদা নোড এবং পয়েন্টারে ফোটে, হ্যাঁ।

তবে ওখানে থামবে কেন? নোড এবং পয়েন্টারগুলির প্রয়োগগুলি বিটগুলিতে ফোটে।

বিট প্রয়োগের ফলে বৈদ্যুতিক সংকেত, চৌম্বকীয় স্টোরেজ, সম্ভবত ফাইবারোপটিক তারগুলি ইত্যাদি ফোটে (

এটি বিবৃতিটির হ্রাস-বিহীন বিজ্ঞাপন , "সমস্ত ডেটা স্ট্রাকচার হ'ল নোড এবং পয়েন্টারে ফোটে।" এটি সত্য — তবে এটি কেবল প্রয়োগের সাথে সম্পর্কিত


ক্রিস ডেট বাস্তবায়ন এবং মডেলের মধ্যে খুব সক্ষম পার্থক্য করে , যদিও তাঁর রচনাটি বিশেষত ডেটাবেসগুলিকে লক্ষ্য করে।

আমরা যদি আরও বুঝতে পারি যে মডেল এবং বাস্তবায়নের মধ্যে একটি বিভাজন রেখা নেই। এটি "বিমূর্ততার স্তরগুলি" ধারণার সাথে একই (যদি অভিন্ন না হয়) is

বিমূর্তনের একটি প্রদত্ত স্তরে, আপনি নীচের "নীচে" স্তরগুলি (আপনি যে স্তরগুলিতে তৈরি করছেন) কেবল যে বিমূর্ততা বা মডেলটি আপনি সম্বোধন করছেন তার "প্রয়োগের বিশদ" ।

যাইহোক, বিমূর্ততা নিম্ন স্তর নিজেরাই বাস্তবায়ন বিবরণ আছে।

আপনি যদি কোনও সফ্টওয়্যার অংশের জন্য কোনও ম্যানুয়াল পড়েন, আপনি সেই সফটওয়্যারটির টুকরো দ্বারা "উপস্থাপিত" বিমূর্ত স্তর সম্পর্কে শিখছেন, যার উপরে আপনি নিজের বিমূর্ততা তৈরি করতে পারেন (বা কেবল বার্তা প্রেরণের মতো ক্রিয়া সম্পাদন করতে পারেন)।

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

তবে, আপনি কোনও নির্দিষ্ট সফ্টওয়্যারটির জন্য "প্রয়োগকরণের বিশদ" এর একটি অংশ হিসাবে ভোল্টেজ পরিমাপটিকে বিবেচনা করবেন না , যদিও এটি "বিট" এবং "বাইটস" এবং "স্টোরেজ" প্রকৃত শারীরিক কম্পিউটারে আসলে কীভাবে কাজ করে তা বোঝায়।

সংক্ষেপে, ডেটা স্ট্রাকচারগুলি অ্যালগোরিদম এবং সফ্টওয়্যার সম্পর্কে যুক্তিযুক্ত ও প্রয়োগের জন্য একটি বিমূর্ত স্তর। এই বিমূর্ততা স্তরটি নিম্ন স্তরের বাস্তবায়ন বিশদ যেমন নোড এবং পয়েন্টারগুলিতে নির্মিত তা সত্য তবে বিমূর্ত স্তরটির মধ্যে অপ্রাসঙ্গিক


সত্যিই কোনও সিস্টেম বোঝার একটি বড় অংশ বুঝতে পারে যে কীভাবে বিমূর্ত স্তরগুলি একসাথে ফিট হয়। সুতরাং ডেটা স্ট্রাকচার কীভাবে কার্যকর করা হয় তা বোঝা গুরুত্বপূর্ণ তবে এগুলি বাস্তবায়িত হওয়ার অর্থ এই নয় যে ডেটা স্ট্রাকচারের বিমূর্ততা বিদ্যমান নেই।


2

একটি অ্যারে বা ভেক্টর হ'ল মানগুলির একটি ক্রম। এগুলি অবশ্যই একটি লিঙ্কযুক্ত তালিকার সাথে প্রয়োগ করা যেতে পারে। এটি পরবর্তী নোডের পয়েন্টার সহ কেবল নোডের একটি গুচ্ছ।

একটি অ্যারে বা ভেক্টর একটি লিঙ্কযুক্ত তালিকার সাথে প্রয়োগ করা যেতে পারে, তবে প্রায় কখনও হওয়া উচিত নয়।

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

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

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

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


1

যদি এটি খুব সাধারণ হয় তবে পাঠ্যপুস্তকগুলি কেন ডেটা পয়েন্টার সহ নোডের একগুচ্ছ বোঝায় না?

কারণ এটি "ডেটা" বলতে বোঝায় না। আপনি বাস্তবায়নের সাথে বিমূর্ত ধারণাগুলি বিবাদ করছেন। "ডেটা" একটি অত্যন্ত বিমূর্ত ধারণা: এটি "তথ্য" এর অন্য একটি নাম। পয়েন্টারগুলির সাথে সংযুক্ত নোডগুলির একটি গুচ্ছ (ওরফে, একটি "লিঙ্কযুক্ত ডেটা স্ট্রাকচার") অনেক বেশি কংক্রিট ধারণা: এটি তথ্য উপস্থাপন এবং সংগঠিত করার একটি নির্দিষ্ট উপায়।

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

স্ট্যাকস এবং সারিগুলি কোথাও কোথাও পড়ে। এমন কিছু সময় রয়েছে যখন স্ট্যাকের লিঙ্কযুক্ত বাস্তবায়ন করতে অনেক অর্থ হয়। অন্যান্য সময় রয়েছে যখন এটি একটি অ্যারে এবং একটি একক "স্ট্যাক পয়েন্টার" ব্যবহার করতে আরও বেশি বোঝা দেয়।

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