120- كورس لغة بايثون Python شرح هياكل البيانات في بايثون – Python Data Structures – Stacks

Python Data Structures – Stacks

Python Data Structures – Stacks

تعد الستاك واحدة من هياكل البيانات الأساسية في بايثون، وتستخدم في العديد من التطبيقات البرمجية. يمكن وصف الستاك بأنه مجموعة مرتبة من العناصر، حيث تضاف وتزال العناصر وفقًا لمبدأ “الأخير في، أولاً خارج” (LIFO). هذا يعني أن العنصر الذي يُضاف أخيرًا إلى الستاك هو الذي يُزال أولاً. تُستخدم الستاك في العديد من السيناريوهات مثل تنفيذ العمليات العكسية وعمليات التراجع في البرامج.

كيفية إنشاء Stack في بايثون

يمكنك إنشاء ستاك في بايثون باستخدام القوائم. القوائم في بايثون توفر مجموعة من الوظائف التي يمكن استخدامها لتنفيذ عمليات الستاك مثل push و pop. لإنشاء ستاك، يمكنك ببساطة استخدام قائمة فارغة، ثم استخدام append لإضافة العناصر و pop لإزالة العناصر. فيما يلي مثال بسيط على كيفية إنشاء ستاك واستخدامه:

stack = []

# Push elements onto the stack
stack.append(1)
stack.append(2)
stack.append(3)

# Display the current stack
print("Current Stack:", stack)

# Pop an element from the stack
element = stack.pop()
print("Popped Element:", element)

# Display the stack after popping
print("Stack after popping:", stack)

تطبيقات عملية لاستخدام Stacks

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

إليك مثالاً يوضح كيفية استخدام الستاك في تحويل تعبير رياضي من صيغة Infix إلى صيغة Postfix:

def infix_to_postfix(expression):
    precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3}
    stack = []
    output = []

    for char in expression:
        if char.isalnum():
            output.append(char)
        elif char == '(':
            stack.append(char)
        elif char == ')':
            while stack and stack[-1] != '(':
                output.append(stack.pop())
            stack.pop()
        else:
            while stack and precedence.get(char, 0) <= precedence.get(stack[-1], 0):
                output.append(stack.pop())
            stack.append(char)

    while stack:
        output.append(stack.pop())

    return ''.join(output)

expression = "a+b*(c^d-e)^(f+g*h)-i"
print("Infix:", expression)
print("Postfix:", infix_to_postfix(expression))

في هذا المثال، يتم استخدام الستاك لتخزين العمليات الحسابية بينما يتم بناء التعبير postfix. يتم الاهتمام بترتيب تنفيذ العمليات باستخدام مبدأ LIFO الخاص بالستاك.