Back home

بنية البيانات 3--دعم اللغة

هياكل البيانات   —   دعم اللغة (الجزء 3)

هياكل البيانات - دعم اللغة (الجزء 3) هياكل البيانات 3 - دعم اللغة

مصفوفة المصفوفات

يتم دعم مصفوفات الأبعاد N بشكل عام مباشرة في اللغة الأساسية نفسها. وهي موجودة في معظم اللغات إن لم يكن كلها. عادةً ما يتم دمج دعم المصفوفات ذات الأبعاد n مباشرة في اللغة الأساسية نفسها. وهي موجودة في معظم اللغات، إن لم يكن كلها.

فهرسة بعض اللغات من الصفر والبعض الآخر من الفهرسة من واحد. فهرسة بعض اللغات من 0 بينما البعض الآخر يفهرس من 1.

المصفوفات الديناميكية المصفوفة الديناميكية

###جافا

تقدم Java فئتين، أشهرهما فئة ArrayList. توفر Java فئتين، أشهرهما فئة ArrayList.

###بيثون

في بايثون، القائمة هي نوع بيانات، تمامًا مثل السلاسل والأرقام. إنه تطبيق للمصفوفات الديناميكية. في بايثون، القائمة هي نوع بيانات، تمامًا مثل السلاسل والأرقام. إنه تطبيق للمصفوفة الديناميكية.

سي++

إن std::vector الخاص بـ C++ هو تطبيق للمصفوفات الديناميكية. يعد std::vector الخاص بـ C++ تطبيقًا لمصفوفة ديناميكية.

يقدم C# أيضًا فئة ArrayListclass كما هو الحال في Java. يوفر C# أيضًا فئة ArrayListclass مثل Java.

قائمة مرتبطة قائمة مرتبطة

###جافا

في Java، List هي واجهة، حيث يقوم LinkedListclass بتنفيذ Listinterface. يتم تنفيذه كقائمة مرتبطة بشكل مزدوج. في Java، Listis عبارة عن واجهة يقوم LinkedListclass فيها بتنفيذ Listinterface. يتم تنفيذه كقائمة مرتبطة بشكل مضاعف.

###بيثون

لا تحتوي لغة Python على تطبيق قائمة مرتبطة مدمج. قوائم بايثون ليست قوائم مرتبطة، بل هي صفائف ديناميكية. لا تحتوي لغة Python على تطبيق مدمج للقوائم المرتبطة. قوائم بايثون ليست قوائم مرتبطة، بل هي صفائف ديناميكية.

سي++

حاوية القائمة في مكتبة المعبد القياسية عبارة عن تطبيق قائمة مرتبط بشكل مزدوج. حاوية القائمة في مكتبة المعبد القياسية عبارة عن تطبيق قائمة مرتبط بشكل مضاعف.

سي#

في C#، هناك LinkedListclass كما هو الحال في Java. يتم تنفيذها أيضًا كقائمة مرتبطة بشكل مزدوج. في C#، هناك فئة LinkedList، تمامًا كما هو الحال في Java. يتم تنفيذه أيضًا كقائمة مرتبطة بشكل مضاعف.

مكدسات المكدس

###جافا في جافا، لديها فئة المكدس. في Java لديها فئة مكدس.

###بيثون

ليس لدى بايثون فئة مكدسة صريحة، ولكن هناك قسم في وثائق بايثون حول استخدام القوائم كمكدسات. لا تحتوي لغة بايثون على فئة مكدسة صريحة، لكن وثائق بايثون تحتوي على قسم حول استخدام القوائم كمكدسات.

سي++

في لغة C++، يعد المكدس جزءًا من مكتبة القوالب القياسية. في لغة C++، يعد المكدس جزءًا من مكتبة القوالب القياسية.

سي#

يقدم C# أيضًا فئة Stack كما هو الحال في Java. يوفر C# أيضًا فئات المكدس في Java.

طوابير الانتظار

###جافا قائمة الانتظار عبارة عن واجهة تمامًا كما كانت القائمة. هناك العديد من الفئات الملموسة التي تدعم سلوك قائمة الانتظار. تدعم LinkedListclass بالفعل سلوك قائمة الانتظار البسيط. قوائم الانتظار هي واجهة مماثلة للقائمة. هناك العديد من الفئات الملموسة التي تدعم سلوك قائمة الانتظار. يدعم LinkedListclass في الواقع سلوك قائمة الانتظار البسيط.

###بيثون

توفر وحدة قائمة الانتظار فئة قائمة الانتظار. إنه مفيد بشكل خاص عند العمل مع الترابط وهو أمر شائع جدًا مع قوائم الانتظار. من الممكن أيضًا استخدام القائمة كقوائم انتظار، إلا أن القوائم ليست فعالة لهذا الغرض. توفر وحدة قائمة الانتظار فئة قائمة الانتظار. إنه مفيد بشكل خاص عند التعامل مع سلاسل الرسائل، وهي شائعة جدًا في قوائم الانتظار. من الممكن أيضًا استخدام القائمة كقائمة انتظار، إلا أن القوائم ليست فعالة لهذا الغرض.

Collections.deque هو تطبيق بديل لقوائم الانتظار غير المحدودة مع عمليات الإلحاق الذري السريعة () وpopleft () التي لا تتطلب القفل. deque هو تطبيق بديل لقوائم الانتظار غير المحدودة مع عمليات الإلحاق الذري السريعة () وpopleft () التي لا تتطلب القفل.

سي++

في C++، توجد حاوية قائمة انتظار في مكتبة القوالب القياسية. في C++، توجد حاوية قائمة انتظار في مكتبة القوالب القياسية.

سي#

في C#، هناك فئة قائمة الانتظار. في C #، هناك فئة قائمة الانتظار.

##ديك ###جافا

تحتوي Java أيضًا على واجهة Deque تمامًا كما كانت قائمة الانتظار. تقوم LinkedListclass أيضًا بتطبيق Dequeinterface. تحتوي Java أيضًا على واجهات كافية مثل Queue. يقوم LinkedListclass أيضًا بتنفيذ Dequeinterface.

لاحظ أن LinkedList أصبح فئة مرنة جدًا في Java. يمكن أن تتصرف كقائمة مرتبطة ويمكن أن تتصرف كقائمة انتظار، ويمكن أن تتصرف كقائمة انتظار مزدوجة النهاية؛ com.deque. يمكن أن تكون مثل قائمة مرتبطة، أو يمكن أن تكون مثل قائمة انتظار، أو يمكن أن تكون مثل قائمة انتظار ذات نهاية مزدوجة؛ قائمة انتظار مزدوجة العضوية.

###بيثون

لدى Python أيضًا فئة deque لهذا الغرض. على الرغم من أنه يمكنك استخدام قائمة بايثون، فقد تم تحسين القائمة لهذا النوع من الاستخدام؛ يُلحق وينبثق على كلا الطرفين. لدى Python أيضًا فئة deque لهذا الغرض. على الرغم من أنه يمكنك استخدام قائمة بايثون، فقد تم تحسين deque لهذا الاستخدام؛ إلحاق وظهرت في أي من الطرفين.

سي++

في C++، هناك حاوية dequecontainer. في لغة C++، هناك حاوية dequecontainer.

سي#

لا يحتوي على قائمة صريحة ومضمنة، ولكن يمكننا توفير سلوك مكافئ مع قائمة مرتبطة أو حتى مصفوفة ديناميكية. فقط كن واعيًا لأن تبديل العناصر في المصفوفة ليس مهمة فعالة. لا يحتوي على deque صريح ومضمن، ومع ذلك، يمكننا استخدام القوائم المرتبطة أو حتى المصفوفات الديناميكية لتوفير سلوك مكافئ. فقط حافظ على ذكائك، لأن نقل العناصر في المصفوفة ليس مهمة فعالة.

قائمة الانتظار ذات الأولوية قائمة الانتظار ذات الأولوية

مثلما يمكن تنفيذ القائمة باستخدام قائمة مرتبطة أو مصفوفة، يمكن تنفيذ قائمة الانتظار ذات الأولوية باستخدام الكومة أو مجموعة متنوعة من الطرق الأخرى. مثلما يمكن تنفيذ القوائم باستخدام القوائم أو المصفوفات المرتبطة، يمكن أيضًا تنفيذ قوائم الانتظار ذات الأولوية باستخدام الأكوام أو طرق أخرى مختلفة.

###جافا تحتوي Java على فئة PriorityQueue، والتي تعتمد على كومة الأولوية. تحتوي Java على فئة PriorityQueueclass استنادًا إلى كومة الأولوية.###بايثون توفر وحدة قائمة الانتظار فئة PriorityQueue، التي تستخدم وحدة heapq أسفل الغطاء لتحديد أولويات إدخالات قائمة الانتظار. تستخدم وحدة heapq بنية بيانات الكومة.

Queue.PriorityQueue هي فئة آمنة لسلسلة الرسائل، في حين أن وحدة heapq لا تقدم أي ضمانات لسلامة سلسلة الرسائل. طابور. PriorityQueue هي فئة آمنة لسلسلة الرسائل، ولا توفر وحدة heapq ضمانات لسلامة سلسلة الرسائل.

سي++

يحتوي C++ على حاوية انتظار الأولوية، والتي يتم تنفيذها أيضًا كبنية بيانات كومة. يحتوي c++ على حاوية قائمة الانتظار ذات الأولوية، والتي يتم تنفيذها أيضًا كبنية بيانات كومة.

سي#

لا يحتوي C# على فئة قائمة انتظار ذات أولوية. ولكن هناك العديد من التطبيقات لقوائم الانتظار ذات الأولوية المتاحة على الإنترنت. لا يحتوي C# على فئة قائمة انتظار ذات أولوية. ومع ذلك، هناك العديد من تطبيقات قوائم الانتظار ذات الأولوية على الإنترنت.

المصفوفات الترابطية المصفوفة الترابطية

يتم تنفيذ معظم المصفوفات المرتبطة، سواء كانت تسمى قواميس أو خرائط أو تجزئة، باستخدام ما يسمى جدول التجزئة، وجدول التجزئة نفسه عبارة عن بنية بيانات مهمة ومفيدة للغاية. يتم تنفيذ معظم المصفوفات الترابطية، سواء كانت تسمى قواميس أو خرائط أو تجزئة، باستخدام ما يسمى جدول التجزئة، والذي يعد في حد ذاته بنية بيانات مهمة ومفيدة للغاية.

تستخدم اللغات الأخرى شجرة بحث ثنائية (ربما شجرة حمراء سوداء؛ نوع من شجرة البحث الثنائية ذاتية التوازن) حيث تحتوي كل عقدة على مفتاح وقيمة مرتبطة بها. لذا، إذا كنت تريد الاحتفاظ بمفاتيحك مرتبة، فإن جداول التجزئة ليست جيدة حقًا في ذلك، ولكن أشجار البحث الثنائية جيدة. تستخدم اللغات الأخرى شجرة بحث ثنائية (ربما شجرة حمراء-سوداء؛ نوع من شجرة البحث الثنائية ذاتية التوازن) حيث تحتوي كل عقدة على مفتاح وقيمة مرتبطة بها. لذلك، إذا كنت تريد الاحتفاظ بمفاتيحك مرتبة، فإن جداول التجزئة ليست جيدة في ذلك، ولكن أشجار البحث الثنائية جيدة.

###جافا في جافا، لديها واجهة خريطة تماما كما كانت القائمة. وهو يحدد عمليات المصفوفات الترابطية، في حين أن فئات HashMap وHashTable هي تطبيقات لهذه العمليات بناءً على بنية بيانات جدول التجزئة. في Java، لديها نفس واجهة التعيين الموجودة في القائمة. وهو يحدد العمليات على المصفوفات الترابطية، وفئات HashMap وHashTable هي تطبيقات لهذه العمليات بناءً على بنية بيانات جدول التجزئة.

يكون HashTable أفضل عند العمل مع التطبيقات متعددة الخيوط، حيث يكون لديك سلاسل مختلفة للوصول إلى جدول التجزئة هذا وتغييره، ولكنه سيضيف تكلفة الأداء.

يعد ConcurrentHashMapclass بديلاً لـ HashTable الأقدم. يعد ConcurrentHashMapclass بديلاً لـ HashTable الأقدم.

يوجد أيضًا LinkedHashMap، والذي يستخدم القائمة المرتبطة للتكرار على العناصر بنفس الطريقة التي تم إدراجها بها.

بينما تقوم فئة TreeMap أيضًا بتنفيذ واجهة الخريطة، فهي في الواقع RedBlackTree، وهي شجرة بحث ثنائية ذاتية التوازن.

##بايثون في بايثون، يطلق عليها القواميس. يتم تنفيذها كنوع بيانات يسمى dict، تمامًا مثل السلاسل والأرقام. يتم تنفيذها كنوع بيانات يسمى dict، تمامًا مثل السلاسل والأرقام.

سي++

يقدم C++ std::unordered_mapcontainer في مكتبة القوالب القياسية، في حين أن std::mapcontainer هو الإصدار المصنف الذي يتم تنفيذه عادةً كشجرة بحث ثنائية. يوفر C++ std::unordered_mapcontainer في مكتبة القوالب القياسية، وstd::mapcontainer هو الإصدار المصنف، والذي يتم تنفيذه عادةً كشجرة بحث ثنائية.

سي#

في لغة C#، تكون متوفرة في فئات Dictionary<TKey,TValue> وHashtable وStringDictionary، بينما تقوم فئة SortedDictionary بفرز أزواج القيمة الرئيسية التي يتم تنفيذها كشجرة بحث ثنائية. في لغة C#، فهي متوفرة في فئات Dictionary<TKey, TValue> وHashtable وStringDictionary، بينما تقوم فئة LessoredDictionary بفرز أزواج القيمة الرئيسية التي يتم تنفيذها كأشجار بحث ثنائية.

مجموعات مجموعات

فكرة المجموعة؛ عادةً ما يتم تنفيذ وجود حاوية كبيرة حيث يمكنك وضع مجموعة من العناصر فيها باستخدام جداول التجزئة أو أشجار البحث الثنائية. مفهوم المجموعة؛ عادةً ما يتم استخدام جدول التجزئة أو شجرة البحث الثنائية لتنفيذ حاوية كبيرة يمكن وضع العديد من العناصر فيها.

###جافا

في Java، تحتوي على واجهة Set مثل القائمة وقائمة الانتظار، بينما تقوم فئات HashSet وTreeSet بتنفيذ Setinterface. في Java، تحتوي على واجهة Set، تمامًا مثل List وQueue، وتقوم فئات lehashset وTreeSet بتنفيذ Setinterface.

يتم تنفيذ HashSet داخليًا باستخدام HashMap، بينما يتم تنفيذ TreeSet داخليًا باستخدام TreeMap. يتم تنفيذ HashSet داخليًا باستخدام HashMap، بينما يتم تنفيذ TreeSet داخليًا باستخدام TreeMap.

###بيثون

تدعم بايثون أنواع البيانات المحددة والمجمدة. Frozenset هي طريقة لجعل المجموعة غير قابلة للتغيير بعد إنشائها. تدعم بايثون أنواع البيانات المحددة والمجمدة. Frozenset هي طريقة لجعل المجموعة غير قابلة للتغيير بعد إنشائها.

سي++

كما هو الحال مع الخرائط، تقدم لغة C++ أيضًا std::unordered_setcontainer في مكتبة القوالب القياسية، بينما std::setcontainer هي النسخة المصنفة والتي يتم تنفيذها عادةً كشجرة بحث ثنائية. مثل التعيين، يوفر C++ أيضًا std::unordered_setcontainer في مكتبة القوالب القياسية، وstd::setcontainer هو الإصدار المفرز، والذي يتم تنفيذه عادةً كشجرة بحث ثنائية.

سي#يقدم C# أيضًا فئة HashSet التي تستخدم جدول التجزئة كما هو الحال في Java، بينما SortedSet هو الإصدار المرتب.

يوفر C# أيضًا فئة HashSet، التي تستخدم جداول التجزئة كما هو الحال في Java، وSortedSet هو الإصدار المرتب.

الرسوم البيانية الرسوم البيانية

لا يوجد دعم مباشر لبنية بيانات الرسم البياني باللغات (مثل الأشجار). لأن تنفيذ أي رسم بياني سيكون دائمًا أكثر تحديدًا. هياكل بيانات الرسم البياني (مثل الأشجار) غير مدعومة بشكل مباشر في اللغة. لأن تنفيذ أي رسم بياني يكون أكثر واقعية.

على سبيل المثال، القائمة المرتبطة هي نوع من الرسم البياني، والشجرة هي نوع من الرسم البياني، والكومة هي نوع من الرسم البياني. يمكن اعتبار القائمة المرتبطة الفردية رسمًا بيانيًا موجهًا، في حين أن القائمة المرتبطة بشكل مزدوج هي نوع من الرسم البياني غير الموجه. إنها جميعها رسوم بيانية ذات قيود مقصودة. على سبيل المثال، القائمة المرتبطة عبارة عن رسم بياني، والشجرة عبارة عن رسم بياني، والكومة عبارة عن رسم بياني. تعتبر القائمة المرتبطة بشكل فردي رسمًا بيانيًا موجهًا، بينما تعتبر القائمة المرتبطة بشكل مزدوج رسمًا بيانيًا غير موجه. كلاهما رسوم بيانية مقيدة بالقصد.

ملخص لدعم لغة هياكل البيانات ملخص دعم اللغة لهياكل البيانات

المصدر: https://medium.com/omarelgabrys-blog/data-structures-language-support-5f70f8312e84