112 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			112 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								title: Stacks
							 | 
						||
| 
								 | 
							
								localeTitle: كومات
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								## كومات
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								الأكوام هي أول بنية بيانات في الماضي (FILO). إنه بنية بيانات خطية.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								يمكنك تخيل كومة كما تم تنظيم لوحات في مطعم بوفيه. يمكنك فقط اختيار اللوحة في الجزء العلوي وإلا ستنهار الحزمة. بشكل عام ، ستتم إزالة العنصر الأخير الذي سيتم إدراجه أولاً.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								بعض العمليات الأساسية للمكدس هي:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								1.  دفع - لإدراج عنصر في الجزء العلوي من المكدس.
							 | 
						||
| 
								 | 
							
								2.  Pop - يزيل عنصرًا أعلى الرصة.
							 | 
						||
| 
								 | 
							
								3.  isEmpty - تحقق من ما إذا كانت المكدس فارغة أم لا
							 | 
						||
| 
								 | 
							
								4.  الحجم - إرجاع عدد العناصر الموجودة في المكدس (يمكن إجراء جميع العمليات في زمن O (1))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								يمكن تنفيذ مجموعة مكدّسة إما باستخدام المصفوفات أو القوائم المرتبطة. فيما يلي تنفيذ مجموعة بسيطة بنية بنية تخزين البيانات مع عملياتها الأكثر شيوعًا.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `//Stack implementation using array in C++ 
							 | 
						||
| 
								 | 
							
								 //You can also include<stack> and then use the C++ STL Library stack class. 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 #include <bits/stdc++.h> 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 using namespace std; 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 class Stack { 
							 | 
						||
| 
								 | 
							
								    int t; 
							 | 
						||
| 
								 | 
							
								    int arr[MaxN]; 
							 | 
						||
| 
								 | 
							
								 public: 
							 | 
						||
| 
								 | 
							
								    Stack() { 
							 | 
						||
| 
								 | 
							
								        t = 0; 
							 | 
						||
| 
								 | 
							
								    } 
							 | 
						||
| 
								 | 
							
								    int size() { 
							 | 
						||
| 
								 | 
							
								        return t; 
							 | 
						||
| 
								 | 
							
								    } 
							 | 
						||
| 
								 | 
							
								    bool isEmpty() { 
							 | 
						||
| 
								 | 
							
								        return t < 1; 
							 | 
						||
| 
								 | 
							
								    } 
							 | 
						||
| 
								 | 
							
								    int top() { 
							 | 
						||
| 
								 | 
							
								        return arr[t]; 
							 | 
						||
| 
								 | 
							
								    } 
							 | 
						||
| 
								 | 
							
								    void push(int x) { 
							 | 
						||
| 
								 | 
							
								        if (++t >= MaxN) { 
							 | 
						||
| 
								 | 
							
								            cout << "Stack is full" << '\n'; 
							 | 
						||
| 
								 | 
							
								            return; 
							 | 
						||
| 
								 | 
							
								        } 
							 | 
						||
| 
								 | 
							
								        arr[t] = x; 
							 | 
						||
| 
								 | 
							
								    } 
							 | 
						||
| 
								 | 
							
								    void pop() { 
							 | 
						||
| 
								 | 
							
								        arr[t--] = 0; 
							 | 
						||
| 
								 | 
							
								    } 
							 | 
						||
| 
								 | 
							
								 }; 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 int main() { 
							 | 
						||
| 
								 | 
							
								    Stack st; 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								    st.push(4); 
							 | 
						||
| 
								 | 
							
								    st.push(3); 
							 | 
						||
| 
								 | 
							
								    st.push(5); 
							 | 
						||
| 
								 | 
							
								    while (!st.isEmpty()) { 
							 | 
						||
| 
								 | 
							
								        cout << st.size() << ' ' << st.top() << '\n'; 
							 | 
						||
| 
								 | 
							
								        st.pop(); 
							 | 
						||
| 
								 | 
							
								    } 
							 | 
						||
| 
								 | 
							
								    return 0; 
							 | 
						||
| 
								 | 
							
								 } 
							 | 
						||
| 
								 | 
							
								` 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### باستخدام الصفائف كأكوام
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								في بعض لغات البرمجة ، يحتوي الصفيف على وظائف مكدسة ، مما يسمح للمطور بإجراء عمليات **الدفع** **والبارز** دون الحاجة إلى بنية بيانات مكدس مخصصة.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								على سبيل المثال ، يحتوي مصفوفة في JavaScript على طرق **دفع** و **pop** تسمح لأحد بتطبيق وظائف المكدس بسهولة في أحد التطبيقات.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `stack = []; 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 let i = 0; 
							 | 
						||
| 
								 | 
							
								 while(i < 5) 
							 | 
						||
| 
								 | 
							
								  stack.push(i++); 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 while(stack.length) { 
							 | 
						||
| 
								 | 
							
								  stack.pop(); 
							 | 
						||
| 
								 | 
							
								 } 
							 | 
						||
| 
								 | 
							
								` 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								يمكن أن تؤدي قائمة في Python أيضًا وظيفة مكدس في أحد التطبيقات. بدلا من **الدفع** ، يمكن للمرء أن يستخدم طريقة **إلحاق** .
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `stack = [] 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 for i in range(5): 
							 | 
						||
| 
								 | 
							
								    stack.append(i) 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 while len(stack): 
							 | 
						||
| 
								 | 
							
								    stack.pop() 
							 | 
						||
| 
								 | 
							
								` 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### تطبيقات
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								*   تحويل العودية إلى حلقة.
							 | 
						||
| 
								 | 
							
								*   ميزات إعادة التراجع.
							 | 
						||
| 
								 | 
							
								*   سودوكو حلالا
							 | 
						||
| 
								 | 
							
								*   عمق البحث الأول.
							 | 
						||
| 
								 | 
							
								*   عبور الشجرة
							 | 
						||
| 
								 | 
							
								*   التعبير عن Infix -> Prefix / Postfix expression
							 | 
						||
| 
								 | 
							
								*   أقواس صالحة
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### معلومات اكثر:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								*   [مزيد من المعلومات على الأكوام - GeeksForGeeks](http://www.geeksforgeeks.org/stack-data-structure/)
							 | 
						||
| 
								 | 
							
								*   [كومة - ويكيبيديا](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)
							 | 
						||
| 
								 | 
							
								*   [برج هانوي المشكلة وكيف يستخدم الحل المداخن والتكرار](https://en.wikipedia.org/wiki/Tower_of_Hanoi)
							 | 
						||
| 
								 | 
							
								*   [HackerRank الأكوام و الطوابير الفيديو](https://www.youtube.com/watch?v=wjI1WNcIntg)
							 |