ما هي هياكل البيانات المكدسة في بايثون؟



ستزودك هذه المقالة بمعرفة مفصلة وشاملة لهياكل البيانات المكدسة في بايثون مع الكثير من الأمثلة.

هياكل البيانات هي مجموعة من قيم البيانات والعلاقات فيما بينها والوظائف أو العمليات التي يمكن تطبيقها على البيانات. يوجد الآن الكثير من هياكل البيانات المتاحة. ولكن سيكون تركيزنا اليوم على هياكل البيانات المكدسة. سأناقش المواضيع التالية:

لماذا هياكل البيانات؟

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





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

أنواع هياكل البيانات

توجد بعض هياكل البيانات القياسية التي يمكن استخدامها للعمل بكفاءة مع البيانات. يمكننا حتى تخصيصها أو بناء أخرى جديدة تمامًا لتناسب تطبيقنا.



أنواع هياكل البيانات

ما هو هيكل البيانات المكدس؟

ضع في اعتبارك بعض الأمثلة الواقعية:

  • شحنة في البضائع
  • لوحات على صينية
  • كومة من القطع النقدية
  • كومة من الأدراج
  • تحويل القطارات في ساحة السكك الحديدية

plates-stacks-data-structure



كل هذه الأمثلة تتبع أ آخر في الخروج أولا إستراتيجية. ضع في اعتبارك اللوحات الموجودة على الدرج ، عندما تريد اختيار طبق ، فأنت مجبر على اختيار لوحة من الأعلى بينما عندما يتم الاحتفاظ باللوحات على الدرج ، يجب أن تكون بترتيب عكسي. الأمثلة المذكورة أعلاه التي تلي Last-In-First-Out (LIFO) يُعرف المبدأ باسم كومة .

بصرف النظر عن العمليات التكميلية ، قد أقول إن العمليات الرئيسية الممكنة على المكدس هي:

الانتقال إلى c ++
  1. ادفع أو أدخل عنصرًا في الجزء العلوي من الحزمة
  2. انبثق عنصرًا أو أزله من أعلى المكدس

إنشاء بنية بيانات مكدس

class Stack: def __init __ (self، max_size): self .__ max_size = max_size self .__ العناصر = [None] * self .__ max_size self .__ top = -1
  • اقصى حجم هو الحد الأقصى لعدد العناصر المتوقعة في المكدس.
  • يتم تخزين عناصر المكدس في قائمة Python.
  • يشير الجزء العلوي إلى أعلى فهرس للمكدس الذي تم أخذه مبدئيًا -1 لتمييز المكدس الفارغ.

يمكن رؤية الحالة الأولية للمكدس في الشكل حيث max_size = 5

ادفع العنصر إلى المكدس

الآن ، إذا كنت تريد إدخال عنصر أو دفعه إلى المكدس ، فعليك أن تتذكر ذلك

  • سيشير الجزء العلوي إلى الفهرس الذي سيتم إدراج العنصر إليه.
  • ولن يتم إدراج أي عنصر عندما يكون المكدس ممتلئًا ، أي عندما يكون max_size = top.

فماذا يجب أن تكون الخوارزمية ؟؟

# تُرجع الحد الأقصى لحجم المكدس def get_max_size (self): return self .__ max_size # تُرجع قيمة منطقية سواء أكان المكدس ممتلئًا أم لا ، وصوابًا إذا كان ممتلئًا وخطأ ، وإلا فإن def is_full (self): return self.get_max_size () - 1 == self .__ top # يدفع العنصر في أعلى المكدس def push (self، data): if (self.is_full ()): print ('المكدس ممتلئ بالفعل') else: self .__ top = self .__ top + int (1 ) self .__ العناصر [self .__ top] = البيانات # يمكنك استخدام أدناه __str __ () لطباعة عناصر كائن DS أثناء تصحيح أخطاء def __str __ (self): msg = [] index = self .__ top while (index> = 0): msg.append ((str) (self .__ Elements [index])) index- = 1 msg = '' .join (msg) msg ​​= 'Stack data (Top to Bottom):' + msg return msg

الآن ، عندما تقوم بتنفيذ ما يلي:

مكدس 1 = مكدس (4)

# ادفع كل العناصر المطلوبة.

stack1.push ('A')

stack1.push ('B')

stack1.push ('C')

نقل الملفات إلى مثيل windows ec2

stack1.push ('E')

طباعة (stack1.is_full ())

طباعة (مكدس 1)

انتاج:

المكدس ممتلئ بالفعل
صحيح
بيانات المكدس (من أعلى إلى أسفل): D C B A

عناصر البوب ​​من Stack

الآن ، بما أنك أدخلت العناصر في المكدس ، فأنت تريد أن تنشرها ، لذلك عليك الاهتمام بما يلي:

  • المكدس ليس فارغًا ، أي أعلى! = -1
  • عند حذف البيانات ، يجب أن يشير الجزء العلوي إلى الجزء العلوي السابق للمكدس.

إذن ، ماذا ستكون الخوارزمية ؟؟

#returns قيمة منطقية سواء كان المكدس فارغًا أم لا ، صحيح إذا كان فارغًا وخطأ خلاف ذلك ، def is_empty (self): return self .__ top == - 1 #returns popped value def pop (self): if (self.is_empty ()): print ('لا شيء للظهور ، فارغ بالفعل') else: a = self .__ العناصر [self .__ top] self .__ top = self .__ top-1 إرجاع # عرض جميع عناصر المكدس من أعلى إلى أسفل عرض def (self): بالنسبة لـ i في النطاق (self .__ top، -1، -1): print (self .__ element [i]، end = ') print ()

الآن ، بالنظر إلى المكدس الذي تم إنشاؤه مسبقًا ، حاول إظهار العناصر

طباعة (stack1.pop ())

طباعة (stack1.pop ())

طباعة (مكدس 1)

طباعة (stack1.pop ())

طباعة (stack1.pop ())

طباعة (stack1.pop ())

انتاج:

د

ج

بيانات المكدس (من أعلى إلى أسفل): ب أ

ب

إلى

لا شيء لتفرقع ، فارغة بالفعل

تطبيقات بنية البيانات المكدسة

  • مثال 1:

يتم استخدام المكدس لتنفيذ خوارزمية مطابقة الأقواس لتقييم التعبير الحسابي وأيضًا في تنفيذ استدعاءات الطريقة.

ما هو الطباعة في بيثون

الجواب هو 5.

  • المثال 2:

الحافظة في Windows يستخدم مكدسين لتنفيذ عمليات التراجع عن الإعادة (ctrl + z ، ctrl + y). كنت ستعمل على برامج تحرير كلمات Windows مثل MS-Word و Notepad وما إلى ذلك. هنا نص مكتوب في MS-Word. لاحظ كيف تغير النص عند النقر على Ctrl-Z و Ctrl-Y.

إليك رمز يحاكي عملية التراجع عن الإعادة. راجع الكود ولاحظ كيفية استخدام المكدس في هذا التنفيذ.

#creating class stack class Stack: def __init __ (self، max_size): self .__ max_size = max_size self .__ العناصر = [None] * self .__ max_size self .__ top = -1 def is_full (self): if (self .__ top == self .__ max_size-1): إرجاع إرجاع صحيح False def is_empty (self): if (self .__ top == - 1): إرجاع True return False def push (self، data): if (self.is_full ()): print ('المكدس ممتلئ !!') else: self .__ top + = 1 self .__ العناصر [self .__ top] = data def pop (self): if (self.is_empty ()): print ('المكدس فارغ! ! ') else: data = self .__ العناصر [self .__ top] self .__ top- = عرض تعريف بيانات إرجاع واحد (self): if (self.is_empty ()): print (' المكدس فارغ ') وإلا: index = self .__ top while (index> = 0): print (self .__ element [index]) index- = 1 def get_max_size (self): return self .__ max_size # يمكنك استخدام أدناه __str __ () لطباعة عناصر كائن DS أثناء تصحيح أخطاء def __str __ (self): msg = [] index = self .__ top while (index> = 0): msg.append ((str) (self .__ العناصر [index])) index- = 1 msg = ' '.join (msg) msg ​​=' تكديس البيانات (من أعلى إلى أسفل): '+ msg إرجاع مللي ثانية g #function لتنفيذ عملية الإزالة أو backspace def remove (): الحافظة العامة ، undo_stack data = الحافظة [len (الحافظة) -1] clipboard.remove (data) undo_stack.push (data) print ('Remove:' ، الحافظة) #function لتنفيذ عملية التراجع def التراجع (): الحافظة العامة ، undo_stack ، redo_stack if (undo_stack.is_empty ()): print ('لا توجد بيانات للتراجع') else: data = undo_stack.pop () clipboard.append () data) redo_stack.push (data) print ('Undo:'، clipboard) #function لتنفيذ عملية redo def redo (): الحافظة العامة ، undo_stack ، redo_stack if (redo_stack.is_empty ()): print ('لا توجد بيانات للإعادة ') else: data = redo_stack.pop () if (البيانات ليست في الحافظة): print (' لا توجد بيانات للإعادة ') redo_stack.push (data) else: clipboard.remove (data) undo_stack.push ( data) print ('Redo:'، clipboard) الحافظة = ['A'، 'B'، 'C'، 'D'، 'E'، 'F'] undo_stack = Stack (len (Clipboard)) redo_stack = Stack (لين (الحافظة)) إزالة () تراجع () إعادة ()

انتاج:

إزالة: ['A' ، 'B' ، 'C' ، 'D' ، 'E']

تراجع: ['A'، 'B'، 'C'، 'D'، 'E'، 'F']

إعادة: ['A' ، 'B' ، 'C' ، 'D' ، 'E']

بهذا ، وصلنا إلى نهاية مقالة Stack Data Structure في Python. إذا فهمت الأكواد بنجاح وقمت بتشغيلها بأنفسكم ، فلن تكونوا مبتدئًا في Stacks Data Structure.

لديك سؤال لنا؟ يرجى ذكرها في قسم التعليقات بهذه المقالة وسنعاود الاتصال بك في أقرب وقت ممكن.

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