هياكل البيانات في الذكاء الاصطناعي - الذكاء الاصطناعي - ثالث ثانوي

وظائف الوحدة المستخدمة للمكدس
عين 2024
00:54
(0) 0 التقييم التعليقات المشاركة

الدرس الثاني هياكل البيانات في الذكاء الاصطناعي أهمية هياكل البيانات في الذكاء الاصطناعي The Importance of Data Structures in Al رابط الدرس الرقمي www.ien.edu.sa للبيانات أهمية كبرى في مجالات الذكاء الاصطناعي؛ لأنها الأساس المستخدم في تدريب نماذج تعلم الآلة، حيث تُحدِّد جودة البيانات وكميتها المتوافرة دقة وفعالية هياكل البيانات : (Data Structure) نماذج الذكاء الاصطناعي. ودون بيانات كافية وذات صلة، لن تتعلّم خوارزميات الذكاء الاصطناعي الأنماط، ولن تقوم بالتنبؤات، ولن تتمكن من أداء المهام بفاعلية. هياكل البيانات هي تقنية وبالتالي، تلعب البيانات دورًا رئيسا في تشكيل قدرات وإمكانات صنع القرار لدى لتخزين وتنظيم البيانات في أنظمة الذكاء الاصطناعي. هياكل البيانات لها أهمية كبيرة في الذكاء الاصطناعي؛ الذاكرة لاستخدامها بكفاءة. لأنها توفر طريقة فعّالة لتنظيم وتخزين البيانات، كما تسمح باسترجاع ومعالجة البيانات بكفاءة. وكذلك ، تُحدد مدى تعقيد وكفاءة الخوارزميات المستخدمة في معالجة البيانات، وبالتالي تؤثر مباشرةً على أداء أنظمة الذكاء الاصطناعي. على سبيل المثال، يمكن تحسين سرعة وقابلية خوارزميات الذكاء الاصطناعي للتوسع باستخدام هياكل البيانات المناسبة، مما يجعلها أكثر ملاءمة للتطبيقات في العالم الحقيقي. وكذلك، تساعد هياكل البيانات المصمَّمة جيدًا في تقليل استخدام الذاكرة وزيادة كفاءة الخوارزميات، لتمكينها من معالجة مجموعات أكبر من البيانات. تُخزّن أجهزة الحاسب البيانات وتُعالجها بسرعة ودقة فائقتين. لذلك، من الضروري تخزين البيانات بكفاءة، وتوفير الوصول و إليها بطريقة سريعة. يمكن تصنيف هياكل البيانات على النحو التالي: • هياكل البيانات الأولية. هياكل البيانات غير الأولية. يوضّح المُخطّط في الشكل 1.11 تصنيف هياكل البيانات. هياكل البيانات يُطلق على البيانات البسيطة كذلك البيانات الأولية، أو الخام، أو الأساسية. هياكل البيانات الأولية (Primitive Data Structures) (Data Structures) أعداد صحيحة أرقام عشرية نصية منطقية (Integer) (Float) (Boolean) (Character) هياكل البيانات غير الأولية (Non-Primitive Data Structures) هياكل البيانات غير الخطية (Non-Linear Data Structures) هياكل البيانات الخطية (Linear Data Structures) الخطَّطات (Graphs) الأشجار (Trees) القائمة المترابطة الطابور المكدس القاموس (Linked List) (Stack) (Queue) (Dictionary) شكل 1.11: مُخطَّط هياكل البيانات الصف المصفوفة القائمة (List) (Array) (Tuple) 23 وزارة التعليم Ministry of Education 2024-1446

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

أهمية هياكل البيانات في الذكاء الاصطناعي

شرح أهمية هياكل البيانات في الذكاء الاصطناعي

وزارة التعليم Ministry of Education 2024-1446 هياكل البيانات الأولية Primitive Data Structures يُشار إلى هياكل البيانات الأولية باسم هياكل البيانات الأساسية في لغة البايثون، ويحتوي هذا النوع من الهياكل على قيم بسيطة للبيانات. تُخبر أنواع البيانات البسيطة المترجم بنوع البيانات التي يُخزنها. هياكل البيانات الأولية في لغة البايثون هي: الأرقام ( Numbers) : تُستخدم الأرقام لتمثيل البيانات الرقمية وهي: - الأعداد الصحيحة - الأرقام العشرية • السلاسل النصية :(Strings): السلاسل النصية هي مجموعات من الأحرف والكلمات. • البيانات المنطقية (Boolean) : تكون قيم البيانات المنطقية إما صحيحة أو خاطئة. هياكل البيانات غير الأولية Non-Primitive Data Structures هياكل البيانات غير الأولية هي هياكل متخصصة تُخزّن مجموعة من القيم. يكتبها المبرمج ولا تُعرَّف بلغة البايثون مثل هياكل البيانات الأولية. يمكن تقسيم هياكل البيانات غير الأولية كذلك إلى نوعين: و تُستخدم أنواع مختلفة من هياكل البيانات لتطبيقات الحاسب ومهامه المختلفة بناء على ما يتطلبه المشروع والقيود المفروضة على الذاكرة. هياكل البيانات الخطيَّة أو المتسلسلة (Linear or Sequential Data Structures ) : تُخزّن هياكل البيانات الخطية عناصر البيانات في تسلسل معيّن. هياكل البيانات غير الخطية (Non-linear Data Structures) : لا تحتوي هياكل البيانات غير الخطيَّة على ارتباط تسلسلي بين عناصر البيانات، ويُمكن ربط أي زوج أو مجموعة من عناصر البيانات معًا ، والوصول إليها دون تسلسل محدد. هياكل البيانات الخطية Linear Data Structures تُخزّن هياكل البيانات الخطيَّة عناصر البيانات في تسلسل معيّن. في هذا الدرس ستتعلّم بعض هياكل البيانات الخطية مثل : المكدّس (Stack) والطابور (Queue)، وهما نوعان من هياكل البيانات الأكثر استخداماً في الحياة اليومية. المكدس Stack شكل 1.12: كومة من الكتب كمثال واقعي على المكدّس يمكن تمثيل المكدس في الواقع بمجموعة من الكتب قد يكون حجم قاعدة المضاف آخرًا يَخرُج أولا رُصَّت فوق بعضها البعض، كما هو موضح في المكدّس ثابتًا أو الشكل 1.12. فلإنشاء تلك المجموعة، عليك أن تضع الكتب بعضها فوق بعض، وعندما تريد متغيّرا ديناميكيًا. تطبق لغة (Last In First Out (LIFO) Rule) آخر عنصر مضاف يمكن الوصول استخدام أحد الكتب، عليك أخذ الكتاب من أعلى البايثون المكدسات إليه أولًا. المجموعة. وللوصول إلى الكتب الأخرى عليك باستخدام القوائم. إنزال الكتب من أعلى المجموعة. 24

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

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

شرح هياكل البيانات الأولية

هياكل البيانات غير الأولية

شرح هياكل البيانات غير الأولية

هياكل البيانات الخطية

شرح هياكل البيانات الخطية

المكدس

شرح المكدس

قاعدة المضاف آخراً يخرج أولاً

شرح قاعدة المضاف آخراً يخرج  أولاً

العمليات في المكدس Operations on the stack هناك عمليتان رئيستان في المكدّس: • إضافة عنصر Push) تُستخدم العملية لإضافة عنصر في قمة المكدّس. حذف عنصر (Pop) تُستخدم العملية لحذف عنصر من قمة المكدّس. : عملية إضافة عنصر Push operation يُطلق على عملية إضافة عنصر جديد إلى المكدس اسم إضافة عنصر .(Push) يستخدم المكدّس مؤشّرًا يُطلق عليه مؤشر الأعلى (Top)، ويُشير إلى العنصر الموجود في قمة المكدّس، وعند إضافة عنصر جديد إلى المكدّس: تزداد قيمة مؤشر الأعلى بقيمة واحدة لإظهار الموقع الجديد الذي سيضاف العنصر فيه. يُضاف العنصر الجديد إلى قمة المكدّس. فيض المكدّس Stack Overflow العنصر عند القمة E ليا إضافة عنصر إلى المكدس E العنصر عند القمة D D D C C C B B B A A >>> A يتميز المكدّس بسعة تخزينية مُحدَّدة تعتمد على ذاكرة الحاسب. إذا كانت الذاكرة ممتلئة ، فإن إضافة عنصر جديد سينتج عنها مشكلة فيض المكدس (Stack Overflow) . ويقصد بها تجاوز السعة؛ لذا المكدس النهائي المكدس الأولي يجب التحقق من امتلاء ذاكرة المكدّس قبل إضافة أي عنصر جديد. شكل 1.13: عملية إضافة عنصر إلى المكدّس عملية حذف عنصر Pop operation يُطلق على عملية حذف عنصر من المكدّس اسم حذف عنصر (Pop). عند حذف عنصر من المكدّس: ، يُحذَف العنصر من قمة المكدّس. تنخفض قيمة مؤشر الأعلى بقيمة واحد لإظهار العنصر التالي عند قمة المكدس. غَيْض المكدس Stack Underflow إذا كنت ترغب في حذف عنصر من المكدّس، عليك التحقق أولا من أن المكدّس يحتوي على عنصر واحد على الأقل؛ فإذا كان المكدّس فارغاً ، سينتج عن ذلك مشكلة غَيْض المكدّس (Stack Underflow) ويقصد بها الانخفاض عن الحد الأدنى للسعة. العنصر عند القمة حذف عنصر من المكدّس العنصر عند القمة E ليا E D D D C C C B B B A A A المكدس النهائي المكدس الأولي شكل 1.14: عملية حذف عنصر من المكدّس 25 وزارة التعليم Ministry of Education 2024-1446

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

العمليات في المكدس

شرح العمليات في المكدس

عملية إضافة عنصر

شرح عملية إضافة عنصر

عملية حذف عنصر

شرح عملية حذف عنصر

المكدّس في لغة البايثون Stack in Python تُمثل المكدسات في لغة البايثون باستخدام القوائم التي بدورها تُقدِّم بعض العمليات التي يُمكن تطبيقها مباشرةً على المكدّسات. جدول 1.2: طرائق المكدّس الطريقة الوصف إضافة العنصر x إلى نهاية القائمة. تُطبق عملية إضافة عنصر للمكدس في لغة البايثون حذف العنصر الأخير من القائمة. باستخدام دالة append وزارة التعليم Ministry of Education 2024-1446 listName.append(x) listName.pop( ) ستشاهد مثالا على تطبيق المكدس في لغة البايثون: 1 أنشئ المكدّس لتخزين مجموعة من الأرقام (1، 21، 32 ، 45 ) . 2 استخدم عملية حذف عنصر (Pop) من المكدّس مرتين لحذف العنصرين الأخيرين (32، 45) من المكدس. استخدِم عملية إضافة عنصر ( Push) إلى المكدّس لإضافة عنصر جديد (78) إلى المكدّس. إضافة عنصر إلى المكدس إضافة عنصر إلى المكدس 45 45 إضافة عنصر إلى المكدس إضافة عنصر إلى المكدس 21 32 32 32 21 21 21 21 1 1 1 1 1 1 45 45 32 حذف عنصر من المكدّس حذف عنصر من المكدس 32 32 21 21 21 21 21 إضافة عنصر إلى المكدّس العنصر عند القمة 78 78 21 21 1 1 1 1 1 2 3 شكل 1.15: مثال على المكدّس 26

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

المكدس في لغة البايثون

شرح المكدس في لغة البايثون

Jupyter ANACONDA. Adobe Acrobat DC New Alarms & Clock Anaconda3 (64-bit) 2 Anaconda Navigator (Anaconda3) New Anaconda Powershell Prompt (Anac... New New 8 1 27 Anaconda Prompt (Anaconda3) New Jupyter Notebook (Anaconda3) 3 New Reset Spyder Settings (Anaconda3) New Spyder (Anaconda3) New Home Page - Select or create a n x C Jupyter Files Running مفكرة جوبيتر Jupyter Notebook في هذه الوحدة ستكتب برنامجًا بلغة البايثون باستخدام مفكرة جوبيتر (Jupiter Notebook). وهي تطبيق الويب المستخدم لإنشاء المستندات الحاسوبية ومشاركتها. كل مستند يُسمى مفكرة، ويحتوي على المقطع البرمجي الذي كتبته، والتعليقات، والبيانات الأولية والمعالجة، وتصوّرات البيانات. ستستخدم الإصدار غير المتصل بالإنترنت (Offline) من مفكرة جوبيتر، وأسهل طريقة لتثبيته محليا هي من خلال أناكوندا (Anaconda) وهي منصة توزيع مفتوحة المصدر للطلبة والهواة ويمكنك تنزيلها وتثبيتها من الرابط التالي: https://www.anaconda.com/products/distribution وسيتم تثبيت لغة البايثون ومفكرة جوبيتر تلقائيًا. لفتح مفكرة جوبيتر ) Jupyter Notebook ) : 1 > اضغط على Start ) بدء ) ، ثم اضغط على Anaconda (أناكوندا (3) . > اختر pyter Notebook مفكرة جوبيتر ) . 3 > ستظهر الصفحة الرئيسة لمفكرة جوبيتر في المتصفح + localhost:8888/tree Clusters Select items to perform actions on them. وزارة التعليم Ministry of Education 2024-1446 0 3D Objects Anaconda3 Contacts Creative Cloud Files Desktop Documents Downloads Favorites Links Music OneDrive Pictures Searches Videos الصفحة الرئيسة لمفكرة جوبيتر. شكل 1.16: الصفحة الرئيسة المفكرة جوبيتر Al B Quit Logout Upload New▾ Name↓✔ Last Modified File size a year ago 2 hours ago a year ago 2 hours ago 26 minutes ago 2 hours ago 2 hours ago a year ago a year ago a year ago 2 years ago 2 hours ago 2 months ago a month ago :

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

مفكرة جوبيتر

شرح مفكرة جوبيتر

لإنشاء مفكرة جوبيتر جديدة > في الزاوية اليمنى العلوية من شاشتك، اضغط على New ( جديد ) . 1 > حدد Python 3 pykernel بايثون (3) . سيتم فتح المفكرة الخاصة بك في علامة تبويب جديدة في المتصفح الخاص بك. 3 Home Page - Select or create an X + C ⑪localhost:8888/tree Jupyter Files Running Clusters Select items to perform actions on them. وزارة التعليم Ministry of Education 2024-1446 U 0 3D Objects Anaconda3 Contacts Creative Cloud Files O Desktop Documents يمكنك تحميل مفكرتك من جهاز الحاسب الخاص بك. B Notebook: + Quit Logout 1 Upload New 22 : ... Name Python 3 (ipykernel) 2 Create a ne 3 Home Page - Select or create a n X Untitled - Jupyter Notebook + B Other: Text File Folder Terminal 4 hours ago 2 hours ago 3 hours ago - 0 localhost:8888/notebooks/Untitled.ipynb... A ☐ Jupyter Untitled (unsaved changes) Logout File Edit View Insert Cell + % ↑ Run Kernel Widgets Help ■C Code Trusted Python 3 (ipykernel) O In [ ]: الاسم الافتراضي للمفكرة هو Untitled (بدون عنوان) شريط أدوات المفكرة. شكل 1.17: إنشاء مفكرة جوبيتر جديدة خلية المقطع البرمجي. يمكنك كتابة نص، أو معادلة رياضية، أو أمر بلغة البايثون X : 28

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

إنشاء مفكرة جوبيتر

شرح إنشاء مفكرة جوبيتر

29 1 الآن وبعد أن أصبحت مُفكرتك جاهزة، حان الوقت لكتابة لإنشاء برنامج في مفكرة جوبيتر برنامجك الأول وتشغيله فيها. يمكنك الحصول على العديد من الخلايا المختلفة التي تحتاجها في نفس المفكرة حيث تحتوي كل خلية على مقطعها البرمجي الخاص. > أكتب الأوامر داخل خلية المقطع البرمجي. > اضغط على Run ( تشغيل ) . 2 > سيتم عرض النتيجة تحت الأوامر 3 Jupyter Untitled (unsaved changes) Logout File Edit View Insert 12 Kernel Widgets Help Trusted | Python 3 (ipykernel) O 19 + 83 Run C▸ Code Save As In [1]: print ("Welcome to Jupyter Notebook") 1 Welcome to Jupyter Notebook 3 In [ ]: Enter + + شكل 1.18: إنشاء برنامج في مفكرة جوبيتر يمكنك تشغيل برنامجك بالضغط على Shiite 1 upyter Untitled (autosaved) File Edit View Insert Cell Kernel Widgets He New Notebook Run C▸ Code Open... Make a Copy... Save as... 2 Rename... Save and Checkpoint Ctrl-s Revert to Checkpoint Enter a notebook path relative to notebook dir My first notebook 3 وزارة التعليم Ministry of Education 2024-1446 ne to Jupyter Notebook") upyter Notebook 4 Cancel Save × يتم حفظ المفكرة تلقائيًا أثناء عملك. عند تشغيل برنامجك ستتم إضافة خلية مقطع برمجي جديدة تلقائيا . حان الوقت لحفظ مفكّرتك. لحفظ المفكرة الخاصة بك : > اضغط على File (ملف) 1 > اختر save as حفظ كـ . 2 > اكتب لمفكرتك. 3 اسما > اضغط على Save ( حفظ ) . Jupyter My first notebook (autosaved) File Edit View Insert Cell Kernel 品 83 Run C شكل 1.19: حفظ المفكرة الخاصة بك لقد تغيّر اسم المفكرة.

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

إنشاء برنامج في مفكرة جوبيتر

شرح إنشاء برنامج في مفكرة جوبيتر

حفظ المذكرة الخاصة بك

شرح حفظ المذكرة الخاصة بك

وزارة التعليم Ministry of Education 2024-1446 لتشاهد المثال في الشكل 1.15 في مفكرة جوبيتر: .1 أنشئ المكدّس لتخزين مجموعة من الأرقام (1، 21، 32 ، 45 ) . 2. استخدم عملية حذف عنصر (Pop) من المكدس مرتين لحذف العنصرين الأخيرين منه. 3. استخدم عملية إضافة عنصر Push) إلى المكدّس لإضافة عنصر جديد إليه. myStack=[1,21,32,45] print("Initial stack: ", myStack) print(myStack.pop()) print(myStack.pop()) print("The new stack after pop: ", myStack) myStack.append(78) print("The new stack after push: ", myStack) Initial stack: [1,21,245] 45 32 The new stack after pop: [1, 21] The new stack after push: [1, 21, 78] myStack=[1,21,32,45] print("Initial stack:", myStack) a= len(myStack) print("size of stack",a) # empty the stack for i in range(a): myStack.pop( ) ، print(myStack) myStack.pop() Initial stack: [1, 21, 32,45] size of stack 4 [ ] تُستخدم الدالة ( ( )print(myStack.pop لعرض القيم المسترجعة من دالة ( )myStack.Pop. تُستخدم الدالة len لعرض طول المُكدّس. يُستخدم هذا الأمر لحذف كل العناصر من المكدس. IndexError Input In [3], in <cell line: 9>() 7 myStack.pop( ) 8 print(myStack) ----> 9 myStack.pop() IndexError: pop from empty list Traceback (most recent call last) يظهر الخطأ؛ لأن المكدّس فارغ وأنت كتبت أمر حذف عنصر منه. خطأ الفهرس IndexError ستلاحظ ظهور خطأ عندما كتبت أمر حذف عنصر من المكدّس الفارغ وتسبب هذا في غَيْض المكدّس (Stack Underflow). عليك دوما التحقق من وجود عناصر في المكدس قبل محاولة حذف عنصر منه. 30

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

المثال في الشكل 1.15 في مفكرة جوبيتر

شرح المثال في الشكل 1.15 في مفكرة جوبيتر

خط الفهرس

شرح خط الفهرس

31 وزارة التعليم Ministry of Education 2024-1446 في البرنامج التالي ستنشئ مكدّسًا جديدًا وتضيف العناصر إليه، أو تحذفها منه، سيظهر بالبرنامج قائمة تطلـب منـك تحديد الإجراء الذي تود القيام به في كل مرة. لإضافة عنصر إلى المكدّس ، اضغط على الرقم 1 من قائمة البرنامج. • لحذف عنصر من المكدّس، اضغط على الرقم 2 من قائمة البرنامج. للخروج من البرنامج ، اضغط على الرقم 3 من قائمة البرنامج. def push(stack, element): stack.append(element) def pop(stack): return stack.pop() def is Empty(stack): return len(stack)==0 def createStack(): return [ ] newStack createStack() while True: print("The stack so far is: ", newStack) print("- print("Choose 1 for push") print("Choose 2 for pop") print("Choose 3 for end") -") print("- .") choice=int(input("Enter your choice: ")) while choice! =1 and choice!=2 and choice! =3: print ("Error") choice=int(input("Enter your choice: ")) if choice==1: x=int(input("Enter element for push: ")) push(newStack, x) elif choice==2: if not isEmpty(newStack): else: else: print("The pop element is: ",pop(newStack)) print("The stack is empty") print("End of program") break;

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

في البرنامج التالي ستنشى مكدسا جديدا وتضيف العناصر إليه

شرح في البرنامج التالي ستنشى مكدسا جديدا وتضيف العناصر إليه

The stack so far is: [] Choose 1 for push Choose 2 for pop Choose 3 for end Enter your choice: 1 Enter element for push: 26 The stack so far is: [26] Choose 1 for push Choose 2 for pop Choose 3 for end Enter your choice: 1 Enter element for push: 18 The stack so far is: [26, 18] Choose 1 for push Choose 2 for pop Choose 3 for end Enter your choice: 1 Enter element for push: 23 The stack so far is: [26, 18, 23] Choose 1 for push Choose 2 for pop Choose 3 for end Enter your choice: 2 The pop element is: 23 The stack so far is: [26, 18] Choose 1 for push Choose 2 for pop وزارة التعليم Ministry of Education 2024-1446 نفذ البرنامج السابق كما يلي: أنشئ مُكدِّسًا من ثلاثة أرقام. أضف العناصر إلى المكدّس. أضف العنصر إلى المكدّس ---> أضف العنصر إلى المكدّس أضف العنصر إلى المكدس --> 23 18 18 26 26 26 شكل 1.20: إضافة العناصر يمكنك الآن حذف عنصرين من المكدّس، ثم الخروج من البرنامج. حذف العنصر من المكدس Choose 3 for end حذف العنصر من المكدس 23 Enter your choice: 2 The pop element is: 18 23 The stack so far is: [26] Choose 1 for push 18 18 18 Choose 2 for pop Choose 3 for end 26 26 26 Enter your choice: 3 End of program شكل 1.21: حذف العناصر 32

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

نفذ البرنامج السابق كما يلي

شرح نفذ البرنامج السابق كما يلي

الطابور Queue :(First In First Out (FIFO) Rule) هيكل البيانات التالي الذي سنستعرضه هو الطابور. تصادف عادةً طوابير في قاعدة المضاف أولَا يَخرُج أول حياتك اليومية. الطابور الأكثر شيوعًا هو طابور انتظار السيارات عند إشارة المرور. عندما تتحول إشارة المرور إلى اللون الأخضر، ستكون السيارة التي دخلت العنصر الأول المضاف إلى القائمة يُعالَج إلى الطابور أولا هي نفسها التي تخرج منه أولا . الطابور هو هيكل البيانات الذي أولًا، والعنصر الأحدث يُعالج آخرًا. يتبع قاعدة المضاف أولَا يَخرُج أولا First In First Out - FIFO ، مما يعني أن كل عنصر في الطابور يُقدَّم بالترتيب نفسه الذي وصل به إلى الطابور. قاعدة المُضاف أولا يَخرُج أولًا. الفرق بين المكدّس والطابور هو أنه في المكدّس تتم إضافة وحذف العنصر من نفس الجانب وفي الطابور تتم الإضافة من جانب، بينما يتم الحذف من الجانب الآخر وهكذا، عند الحذف في المكدّس، يُحذف العنصر المضاف آخرا، بينما في الطابور، يحذف العنصر المضاف أولا. العمليات في الطابور Operations on the Queue هناك عمليتان رئيستان في الطابور المؤشر (Pointer) : المؤشر هو مُتغير يُخزّن أو يُشير إلى عنوان متغير آخر. المؤشر إضافة عنصر للطابور (Enqueue) : تُستخدم العملية لإضافة عنصر في آخر الطابور. يشبه رقم الصفحة في فهرس حذف عنصر من الطابور (Dequeue: تُستخدم العملية لحذف عنصر من مقدمة الكتاب الذي يُسهل على القارئ الطابور. مؤشرات الطابور Queue Pointers يحتوي الطابور على مؤشرين: • المؤشر الأمامي Front pointer : يشير إلى العنصر الأول في الطابور. • المؤشر الأخير Rear Pointer : يُشير إلى العنصر الأخير في الطابور. إضافة عنصر للطابور المؤشر الخلفي Queue الوصول إلى المحتوى المطلوب. الفهرس (Index) : الفهرس هو رقم يُحدد موضع العنصر في هيكل البيانات. المؤشر الأمامي حذف عنصر من الطابور 9 17 43 21 7 12 56 23 4 14 31 1 2 3 4 5 6 7 88 6 10 شكل 1.22: العمليات في الطابور الفهرس 33 وزارة التعليم Ministry of Education 2024-1446

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

الطابور

شرح الطابور

قاعدة المضاف أولا يخرج أولا

شرح قاعدة المضاف أولا يخرج أولا

الفرق بين المكدس والطابور

شرح الفرق بين المكدس والطابور

المؤشر

شرح المؤشر

العمليات في الطابور

شرح العمليات في الطابور

مؤشرات الطابور

شرح مؤشرات الطابور

الفهرس

شرح الفهرس

العمليات في الطابور

شرح العمليات في الطابور

34 عملية إضافة عنصر للطابور Enqueue Operation يُطلق على عملية إضافة عنصر جديد إلى الطابور اسم إضافة عنصــر للطابور لا يمكنك إضافة عنصر أو (Enqueue) . لإضافة عنصر جديد إلى الطابور حذفه من وسط الطابور. تتم زيادة قيمة المؤشر الخلفي بقيمة واحد بحيث يشير إلى موضع العنصر الجديد الذي سيضاف. تتم إضافة العنصر. الأمامي الخلفي الأمامي الخلفي الخلفي الأمامي A B C D A B C <--- D A B C 0 1 2 3 0 1 2 0 1 2 قبل إضافة عنصر للطابور شكل 1.23 عملية إضافة عنصر للطابور بعد عملية حذف عنصر من الطابور Dequeue Operation قبل أي إجراء عليك التحقق مما إذا كانت هناك يطلق على عملية حذف عنصر من الطابور اسم حذف عنصر من الطابور (Dequeue). مساحة فارغة في الطابور لحذف عنصر من الطابور يُحذف العنصر المشار إليه بالمؤشر الأمامي. تتم زيادة قيمة المؤشر الأمامي بقيمة واحد بحيث يشير إلى العنصر الجديد التالي في لإضافة عنصر جديد، أو توافر عنصر واحد على الأقل لتصديره. الطابور. الخلفي الأمامي الخلفي الأمامي الخلفي الأمامي B C D B A-860 D A B C D 0 1 2 0 1 2 3 0 1 2 3 قبل حذف عنصر من الطابور شكل 1.24 عملية حذف عنصر من الطابور بعد وزارة التعليم Ministry of Education 2024-1446

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

عملية إضافة عنصر للطابور

شرح عملية إضافة عنصر للطابور

عملية حذف عنصر من الطابور

شرح عملية حذف عنصر من الطابور

الطابور في لغة البايثون Queue in Python يمكن تمثيل الطابور بعدة طرائق متنوعة في لغة البايثون منها القوائم (Lists) . ويرجع ذلك إلى حقيقة أن القائمة تمثل مجموعة من العناصر الخطية، كما يمكن إضافة عنصر في نهاية القائمة وحذف عنصر من بداية القائمة. ستتعلم فيما يلي الصيغ العامة لبعض العمليات التي يمكن تنفيذها على الطابور: جدول 1.3: طرائق الطابور الطريقة الوصف (listName.append(x | تضيف العنصر x إلى القائمة التي تمثل الطابور. listName.pop(0) تحذف العنصر الأول من القائمة. تُستخدم طريقة ( )listName.pop لكل من هياكل بيانات المكدّس والطابور. عندما تستخدم مع المكدّس، لا تتطلب الطريقة أي مُعامِل. بينما تتطلب الطريقة إضافة صفر إلى المعامل عندما تُستخدم مع الطابور: (0)listName.pop. الفرق بين الدالتين موضح في الجدول 1.4 أدناه. جدول :1.4 طريقة ( )listName.pop مقابل طريقة (0)listName.pop الطريقة listName.pop() الوصف إذا كان مُعامِل الدالة فارغًا ، يُحذف العنصر الأخير من نهاية القائمة التي تمثل المكدّس. (0)listName.pop | إذا كان مُعامِل الدالة صفرًا ، يُحذف العنصر الأول من القائمة التي تمثل الطابور. سنستعرض لك مثالاً على تطبيق الطابور في لغة البايثون: أنشئ طابورًا لتخزين مجموعة من الأرقام (1، 21، 32 ، 45 ) . استخدم عملية حذف عنصر من الطابور مرتين لحذف العنصرين الأولين منه. استخدم عملية إضافة عنصر إلى الطابور لإضافة عنصر جديد إليه. الخلفي الأمامي 21 32 <- 45 0 1 الطابور الأخير الخلفي الأمامي 1 <-- 21 32 45 0 1 2 حذف عنصر من الطابور الخلفي الأمامي 32 45 78 0 1 2 حذف عنصر من الطابور الخلفي الأمامي 1 21 32 45 0 1 2 3 الخلفي الأمامي 32 45 <--- 78 0 1 إضافة عنصر للطابور شكل 1.25 مثال توضيحي لمفهوم الطابور 35 وزارة التعليم Ministry of Education 2024-1446

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

الطابور في لغة البايثون

شرح الطابور في لغة البايثون

وزارة التعليم Ministry of Education 2024-1446 لبرمجة الخطوات الموضحة بالأعلى بلغة البايثون، ستستخدم قائمة البايثون لتنفيذ هيكل الطابور، كما فعلت في myQueue=[1,21,32,45] print("Initial queue: ", myQueue) myQueue.pop(0) myQueue.pop(0) print("The new queue after pop: ", myQueue) myQueue.append(78) print("The new queue after push: ", myQueue) Initial queue: [1, 21, 32,45] The new queue after pop: [32, 45] The new queue after push: [32, 45, 78] المكدس. لكي تشاهد ما قد يحدث عندما تحاول حذف عنصر من طابور فارغ، عليك أولا أن تُفرغ الطابور من العناصر. myQueue=[1,21,32,45] print("Initial queue: ", myQueue) a= len(myQueue) print("size of queue ",a) # empty the queue for i in range(a): myQueue.pop(0) print(myQueue) myQueue.pop(0) Initial queue: [1, 21, 32,45] size of queue 4 [ ] IndexError Input In [6], in <cell line: 9>() 7 myQueue.pop() 8 print(myQueue) ---> 9 myQueue.pop() IndexError: pop from empty list Traceback (most recent call last) ظهر الخطأ؛ لأنك حاولت حذف عنصر من طابور فارغ. عليك أن تتحقق دوما من وجود عناصر في الطابور قبل محاولة حذف عنصر منه. 36

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

استخدام قائمة البايثون لتنفيذ هيكل الطابور

شرح استخدام قائمة البايثون لتنفيذ هيكل الطابور

37 تطبيقات على الطابور Queue Applications أحد الأمثلة على تطبيقات الطابور في علوم الحاسب هو طابور الطباعة. على سبيل المثال، لديك معمل حاسب به 30 جهاز حاسب متصلين بطابعة واحدة. عندما يرغب الطلبة في طباعة المستندات، ستشكّل مهام الطباعة طابورًا لمعالجتها وفق قاعدة المضاف أولا يخرج أولا (FIFO) ، أي أنّ تلك المهام ستُنجز بالترتيب الزمني الذي أُرسلت به إلى الطابعة المهمة المرسلة أولا ستُطبع قبل المهمة المرسلة بعدها ولن تُطبع المهمة في نهاية الطابور قبل طباعة كل المهام التي قبلها. عندما تنتهي الطابعة من أحد الأوامر، ستبحث في الطابور لمعرفة ما إن كانت هناك أوامر أخرى لمعالجتها. المكدّس والطابور باستخدام وحدة الطابور النمطية Stack and Queue Using Queue Module يمكن اعتبار القائمة في لغة البايثون بمثابة طابور وكذلك مُكدّس . تُقدِّم لغة البايثون الوحدة النمطية للطابور (Queue Module) وهي طريقة أخرى لتنفيذ هيكلي البيانات الموضحين. تتضمن الوحدة النمطية للطابور بعض الدوال الجاهزة للاستخدام التي يمكن تطبيقها على كل من المكدس والطابور. جدول 1.5 طرائق الوحدة النمطية للطابور الطريقة queueName=queue.Queue() queueName.put(x) queueName.qsize() queueName.get() queueName.full() queueName.empty() الوصف تنشئ طابورًا جديدًا اسمه queueName. تضيف العنصر x إلى الطابور. تعود بقيمة حجم الطابور. تعرض وتحذف العنصر الأول من الطابور والعنصر الأخير من المكدّس. تعود بقيمة True ( صحيح ) إن كان الطابور ممتلئًا، وقيمة False (خطأ) إن كان الطابور فارغا ، ويمكن تطبيقها على المكدّس كذلك. تعود بقيمة True ( صحيح ) إن كان الطابور فارغًا والقيمة False (خطأ) إن كان الطابور ممتلئًا ، ويمكن تطبيقها على المكدّس كذلك. تُستخدم طرائق الوحدة النمطية للطابور مع كل من المكدّس والطابور. ستستخدم وحدة الطابور النمطية لإنشاء طابور. في هذا المثال عليك: استيراد الوحدة النمطية للطابور (Queue) لاستخدام طرائق الطابور. إنشاء طابور فارغ باسم myQueue (طابوري). إضافة العناصر ، ، ، e d i c إلى الطابور myQueue (طابوري). • طباعة عناصر الطابور. عليك استيراد الوحدة النمطية للطابور في بداية المقطع البرمجي from queue import myQueue Queue() = * # add the elements in the queue myQueue.put("a") myQueue.put("b") myQueue.put("c") myQueue.put("d") myQueue.put("e") #print the elements of the queue for element in list (myQueue.queue): print(element) a b C d e وزارة التعليم Ministry of Education 2024-1446

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

تطبيقات على الطابور

شرح تطبيقات على الطابور

المكدس والطابور باستخدام وحدة الطابور النمطية

شرح المكدس والطابور باستخدام وحدة الطابور النمطية

وظائف وحدة الطابور النمطية

شرح وظائف وحدة الطابور النمطية

استحدام وحدة الطابور النمطية لإنشاء طابور

شرح استحدام وحدة الطابور النمطية لإنشاء طابور

وزارة التعليم Ministry of Education 2024-1446 = w 9 أنشئ طابورًا مُكوَّنًا من خمس قيم يقوم المستخدم بإدخالها أثناء تنفيذ البرنامج ، ثم اطبع هذه القيم، وفي النهاية from queue import * myQueue = Queue() # the user enters the elements of the queue for i in range(5): for i in range(5): element input("enter queue element: ") myQueue.put(element) # print the elements of the queue for element in list (myQueue.queue): print(element) print ("Queue size is: ",myQueue.qsize()) enter queue element: 5 enter queue element: f enter queue element: 12 enter queue element: b enter queue element: 23 5 f 12 b 23 Queue size is: 5 from queue import * myQueue = Queue() myQueue.put("a") myQueue.put("b") myQueue.put("c") myQueue.put("d") myQueue.put("e") اطبع حجم الطابور. أنشئ برنامجًا للتحقق مما إذا كان الطابور فارغا أم ممتلئًا. checkFull-myQueue. full() print("Is the queue full? ", checkFull) checkEmpty myQueue.empty() print("Is the queue empty? ", checkEmpty) Is the queue full? False Is the queue empty? False 38

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

انشى برنامج للتحقق مما إذا كان الطابور فارغا ان ممتلئا

شرح انشى برنامج للتحقق مما إذا كان الطابور فارغا ان ممتلئا

انشى طابور مكون من خمس قيم

شرح انشى طابور مكون من خمس قيم

كما ذُكر من قبل فإن الوحدة النمطية للطابور تحتوي على بعض الوظائف الجاهزة للاستخدام مع المكدس أو الطابور. الجدول 1.6 يوضّح وظائف الوحدة التي يُمكن استخدامها مع هيكل بيانات المكدّس. جدول 1.6 طرائق الوحدة المستخدمة للمكدّس الطريقة الوصف stackName queue. LifoQueue() stackName.get() تنشئ مُكدِّسًا جديدًا اسمه stackName تحذف العنصر الأخير من المكدّس ستستخدم وحدة الطابور لإنشاء مكدّس فارغ. تذكر أن العمليات في المكدس تعمل وفقًا لقاعدة المضاف آخرًا يُخرج أولا (LIFO). عند استخدام دالة get مع الطابور ستستند عمليات الاستدعاء والطباعة إلى قاعدة المضاف أولا يخرج أولا (FIFO). مثال : الطباعة Print from queue import * myStack = LifoQueue( ) myStack.put("a") myStack.put("b") myStack.put("c") myStack.put("d") myStack.put("e") for i in range(5): k=myStack.get() print(k) # empty the stack checkEmpty= myStack.empty() print("Is the stack empty?", checkEmpty) C b a Is the stack empty? True يظهر أمامك في المثال التالي محاكاة لطابور الطباعة في الطابعة. عندما يُرسل المستخدمون أوامر طباعة، تُضاف إلى طابور الطباعة. تستخدم الطابعة هذا الطابور لتحديد الملف الذي سيُطبع أولا. افترض أن سعة الطابعة هي فقط 7 ملفات ، ولكن في الوقت نفسه، تحتاج إلى طباعة 10 ملفـات مـن الملف A إلى الملف ل. اكتب برنامجًا يُمثّل طابور الطباعة منذ بدء أمر الطباعة الأول A حتى الانتهاء من كل أوامر الطباعة. • أضف اللبنة التي تؤكد أن طابور أوامر الطباعة فارغ. 39 وزارة التعليم Ministry of Education 2024-1446

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

وظائف الوحدة المستخدمة للمكدس

شرح وظائف الوحدة المستخدمة للمكدس

استخدام وحدة الطابور لإنشاء مكدس فارغ

شرح استخدام وحدة الطابور لإنشاء مكدس فارغ

الطباعة

شرح الطباعة

كما ذُكر من قبل فإن الوحدة النمطية للطابور تحتوي على بعض الوظائف الجاهزة للاستخدام مع المكدس أو الطابور. الجدول 1.6 يوضّح وظائف الوحدة التي يُمكن استخدامها مع هيكل بيانات المكدّس. جدول 1.6 طرائق الوحدة المستخدمة للمكدّس الطريقة الوصف stackName queue. LifoQueue() stackName.get() تنشئ مُكدِّسًا جديدًا اسمه stackName تحذف العنصر الأخير من المكدّس ستستخدم وحدة الطابور لإنشاء مكدّس فارغ. تذكر أن العمليات في المكدس تعمل وفقًا لقاعدة المضاف آخرًا يُخرج أولا (LIFO). عند استخدام دالة get مع الطابور ستستند عمليات الاستدعاء والطباعة إلى قاعدة المضاف أولا يخرج أولا (FIFO). مثال : الطباعة Print from queue import * myStack = LifoQueue( ) myStack.put("a") myStack.put("b") myStack.put("c") myStack.put("d") myStack.put("e") for i in range(5): k=myStack.get() print(k) # empty the stack checkEmpty= myStack.empty() print("Is the stack empty?", checkEmpty) C b a Is the stack empty? True يظهر أمامك في المثال التالي محاكاة لطابور الطباعة في الطابعة. عندما يُرسل المستخدمون أوامر طباعة، تُضاف إلى طابور الطباعة. تستخدم الطابعة هذا الطابور لتحديد الملف الذي سيُطبع أولا. افترض أن سعة الطابعة هي فقط 7 ملفات ، ولكن في الوقت نفسه، تحتاج إلى طباعة 10 ملفـات مـن الملف A إلى الملف ل. اكتب برنامجًا يُمثّل طابور الطباعة منذ بدء أمر الطباعة الأول A حتى الانتهاء من كل أوامر الطباعة. • أضف اللبنة التي تؤكد أن طابور أوامر الطباعة فارغ. 39 وزارة التعليم Ministry of Education 2024-1446

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

يمكنك استخدام الخوارزمية التالية: أنشئ طابور أوامر الطباعة

شرح يمكنك استخدام الخوارزمية التالية: أنشئ طابور أوامر الطباعة

41. وزارة التعليم Ministry of Education 2024-1446 print() return printDocument = printQueue.get() time.sleep(1) #wait one second print ("OK", printDocument, printQueueSizeMessage() # print a message with the size of the queue def printQueueSizeMessage(): is printed.") printQueueSize = printQueue.qsize() if printQueueSize == 0: print ("There are no documents waiting for printing.") elif printQueueSize == 1: else: print ("There is 1 document waiting for printing.") II print ("There are ", printQueueSize, documents waiting for printing.") print() # the main program # send documents to the print queue for printing addDocument("Document A") addDocument("Document B") addDocument("Document C") addDocument("Document D") addDocument("Document E") addDocument("Document F") addDocument("Document G") printDocument() printDocument() addDocument("Document I") printDocument() addDocument("Document J") addDocument("Document K") addDocument("Document H") printDocument() printDocument() printDocument() printDocument() printDocument() printDocument() printDocument() printDocument() Document A sent to print queue. There is 1 document waiting for printing. Document B sent to print queue. There are 2 documents waiting for printing. Document C sent to print queue. There are 3 documents waiting for printing.

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

خوارزمية إنشاء طابور أوامر الطباعة 1

شرح خوارزمية إنشاء طابور أوامر الطباعة 1

وزارة التعليم Ministry of Education 2024-1446 Document D sent to print queue. There are 4 documents waiting for printing. Document E sent to print queue. There are 5 documents waiting for printing. Document F sent to print queue. There are 6 documents waiting for printing. Document G sent to print queue. There are 7 documents waiting for printing. OK Document A is printed. There are 6 documents waiting for printing. Document H sent to print queue. There are 7 documents waiting for printing. OK Document B is printed. - There are 6 documents waiting for printing. Document I sent to print queue. There are 7 documents waiting for printing. OK - Document C is printed. There are 6 documents waiting for printing. Document J sent to print queue. There are 7 documents waiting for printing. !! Document K was not sent to print queue. The print queue is full. - OK Document D is printed. There are 6 documents waiting for printing. OK Document E is printed. There are 5 documents waiting for printing. OK Document F is printed. There are 4 documents waiting for printing. OK - Document G is printed. There are 3 documents waiting for printing. OK Document H is printed. There are 2 documents waiting for printing. OK Document I is printed. - There is 1 document waiting for printing. OK - Document J is printed. There are no documents waiting for printing. !! The print queue is empty. 42

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

خوارزمية إنشاء طابور أوامر الطباعة 2

شرح خوارزمية إنشاء طابور أوامر الطباعة 2

43 هياكل البيانات الثابتة والمتغيرة Static and Dynamic Data Structures سبق توضيح أن هياكل البيانات هي طريقة فعالة لتخزين البيانات وتنظيمها، وبالإضافة إلى ما تعلمته حول تصنيف هياكل البيانات إلى أوليّة وغير أوليّة، فإنه يمكن تصنيفها أيضًا إلى ثابتة (Static) ومتغيرة (Dynamic). هياكل البيانات الثابتة Static Data Structure في البيانات الثابتة، يكون حجم الهيكل ثابتًا، وتُخزَّن عناصر البيانات في مواقع الذاكرة المتجاورة. تُعد المصفوفة (Array المثال الأبرز لهياكل البيانات الثابتة. هياكل البيانات المتغيرة Dynamic Data Structure في هياكل البيانات المتغيرة، لا يكون حجم الهيكل ثابتًا ولكن يمكن تعديله أثناء تنفيذ البرنامج، حسب العمليات المنفّذة عليه. تُصمَّم هياكل البيانات المتغيرة لتسهيل تغيير حجم هياكل البيانات أثناء التشغيل. وتُعدُّ القائمة المترابطة Linked List المثال الأبرز لهياكل البيانات المتغيرة. جدول :1.7 مقارنة بين هياكل البيانات الثابتة والمتغيرة حجم الذاكرة أنواع ذاكرة التخزين الثابتة حجم الذاكرة ثابت. المتغيرة يمكن تغيير حجم الذاكرة أثناء التشغيل. تخزن العناصر في مواقع متجاورة تُخزّن العناصر في مواقع عشوائية في الذاكرة في الذاكرة الرئيسة . سرعة الوصول إلى البيانات أسرع. الرئيسة. أبطأ. تخصيص الذاكرة Memory Allocation تنتمي القوائم المترابطة Linked List إلى هياكل البيانات المتغيرة، وهذا يعني أن عُقد القائمة المترابطة لا تخزن في مواقع الذاكرة المتجاورة مثل البيانات في المصفوفات. ولهذا السبب، تحتاج إلى تخزين المؤشر من عقدة إلى أخرى. بايت واحد من الذاكرة المستخدمة وزارة التعليم Ministry of Education 2024-1446 2 F 1 4 = 3 5 بايت واحد من الذاكرة المستخدمة المتغيرة = 1 2 3 4 5 77: 7: تحتاج المصفوفات إلى لبنة ذاكرة متجاورة. لا تحتاج القوائم المترابطة إلى أن تكون متجاورة في الذاكرة ولكن يزداد حجمها بطريقة متغيرة. شكل 1.26 مثال على تخصيصي الذاكرة الثابتة والمتغيرة الثابتة

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

هياكل البيانات الثابتة والمتغيرة

شرح هياكل البيانات الثابتة والمتغيرة

هياكل البيانات الثابتة

شرح هياكل البيانات الثابتة

هياكل البيانات المتغيرة

شرح هياكل البيانات المتغيرة

مقارنة بين هياكل البيانات الثابتة والمتغيرة

شرح مقارنة بين هياكل البيانات الثابتة والمتغيرة

تخصيص الذاكرة

شرح تخصيص الذاكرة

44 القائمة المترابطة Linked List القائمة المترابطة هي نوع من هياكل البيانات الخطية، وهي واحدة من هياكل القائمة المترابطة Linked List : البيانات الأكثر شهرة في البرمجة القائمة المترابطة تشبه سلسلة من العقد. تحتوي كل عُقدة على حقلين: حقل البيانات حيث تُخزن البيانات، وحقل يحتوي القائمة المترابطة هي نوع من هياكل على المؤشر الذي يُشير إلى العُقدة التالية. يُستثنى من هذا العقدة الأخيرة التي البيانات الخطية التي تشبه سلسلة من لا يحمل فيها حقل العنوان أي بيانات إحدى مزايا القائمة المترابطة هي أن حجمها يزداد أو يقل بإضافة أو حذف العُقد. العقد. القيمة الفارغة (Null) ABC القائمة المترابطة -2 <---. ---> 5 7.2 شكل 1.27 رسم توضيحي للقائمة المترابطة العقدة Node تتكون كل عُقدة في القائمة المترابطة من جزئين: الجزء الأول يحتوي على البيانات. • الجزء الثاني يحتوي على مؤشر يُشير إلى العقدة التالية. لقراءة محتوى عُقدة محددة، عليك المرور على كل العقد السابقة. لتشاهد مثالًا على القائمة المترابطة للأعداد الصحيحة. تتكون القائمة المترابطة من خمس عُقد. القيمة الفارغة 21 . <--| 95 12 ---> 1 الرأس العقدة (Node) (Head) العقدة هي اللبنة الفردية المكونة لهيكل البيانات وتحتوي على البيانات ورابط واحد أو أكثر من الروابط التي تربطها بالعقد الأخرى. مؤشر إلى العقدة التالية. 3 12 حقل البيانات. شكل 1.28: رسم توضيحي للعقد الرأس القيمة الفارغة تعنى أنها بلا قيمة، أو غير محددة، أو فارغة على الرغم من أنه في بعض الأحيان يستخدم الرقم 0 للإشارة إلى القيمة الفارغة إلا أنه رقم محدّد وقد يشير إلى قيمة حقيقية. العقد شكل :1.29 رسم توضيحي يُمثل قائمة مترابطة للأعداد الصحيحة في القائمة لا يكون لها اسم، وما تعرفه عنها هو عنوانها ( الموقع الذي تخزن فية العقدة في الذاكرة) . للوصول إلى أي عُقدة بالقائمة، تحتاج فقط إلى معرفة عنوان العقدة الأولى. ثم تتبع سلسلة العقد للوصول إلى العقدة المطلوبة. وزارة التعليم Ministry of Education 2024-1446

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

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

شرح القائمة المترابطة

العقدة

شرح العقدة

مثال على القائمة المترابطة للأعداد الصحيحة

شرح مثال على القائمة المترابطة للأعداد الصحيحة

على سبيل المثال، إن كنت ترغب في الوصول إلى العقدة الثالثة في القائمة لمعالجة البيانات التي تحتوي عليها، عليك البدء من العُقدة الأولى في القائمة، ومن العقدة الأولى للوصول إلى الثانية، ومن الثانية للوصول إلى الثالثة. و عنوان العُقدة الأولى مُخزَّن في متغير خاص (مستقل) يُطلق عليه عادةً الرأس (Head). قيمة مؤشر العقدة الأخيرة في القائمة قيمة فارغة (Null) و لل ويمثل بالرمز ... ، • عندما تكون القائمة فارغة، يشير مؤشر الرأس إلى القيمة الفارغة (Null). القيم الفارغة الرأس 15 25 30 العقدة الثالثة العقدة الثانية العقدة الأولى شكل 1.30 الوصول إلى العقدة الثالثة في القائمة المترابطة إليك مثالًا توضيحيًا على القائمة المترابطة في الشكل ،1.31 ، كما ذُكر من قبل فإن كل عُقدة تتكون من بيانات ومؤشر يشير إلى العُقدة التالية، بحيث تُخزّن كل عُقدة في الذاكرة في عنوان محدد. لتربط العقدة السابقة بالعقدة التالية بقيمـة بيانات 42، مثال على العقدة: التي بدورها تشير إلى العُقدة الثالثة والأخيرة عند عنوان 30 بقيمة بيانات 37. 37 30 ←---- 42 30 ----- 15 20 شكل 1.31 المؤشرات في القائمة المترابطة جدول 1.8 الاختلافات بين القائمة والقائمة المترابطة الاختلافات القائمة طريقة تخزين الذاكرة المواقع متجاورة في الذاكرة الهيكل يمكن الوصول إلى كل عنصر برقم الفهرس (Index). يُخزن كل عنصر تلو الآخر. بيانات العقدة هي الرقم 15. عنوان العقدة في الذاكرة هو 10. عنوان العقدة التالية هو 20. 10 15 20 العنوان التالي البيانات العنوان الرأس القائمة المترابطة المواقع عشوائية في الذاكرة. يمكن الوصول إلى العناصر من خلال المؤشر .(Pointer) الحجم استخدام الذاكرة تخزن البيانات وحدها في الذاكرة. تخزن العناصر في صورة عُقد تحتوي على البيانات وعنوان العنصر التالي تخزن البيانات والمؤشرات في الذاكرة. نوع الوصول إلى البيانات الوصول العشوائي إلى أي عنصر بالقائمة. الوصول المتسلسل إلى العناصر. سرعة الإضافة والحذف بطء إضافة العناصر وحذفها. سرعة إضافة العناصر وحذفها . 45 وزارة التعليم Ministry of Education 2024-1446

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

الوصول الى العقدة الثالثة في القائمة المترابطة

شرح الوصول الى العقدة الثالثة في القائمة المترابطة

المؤشرات في القائمة المترابطة

شرح المؤشرات في القائمة المترابطة

الاختلافات بين القائمة والقائمة المترابطة

شرح الاختلافات بين القائمة والقائمة المترابطة

القائمة المترابطة في لغة البايثون Linked List in Python الفئة (Class) : لا تُوفر لغة البايثون نوع بيانات مُحدَّد مُسبقًا للقوائم المترابطة. عليك إنشاء نوع البيانات الخاص بك أو استخدام مكتبات البايثون التي توفر تمثيلا لهذا النوع من البيانات. المستخدم، ويحتوي على أعضاء الفئة هي هيكل بيانات معرف بواسطة 6 لإنشاء قائمة مترابطة، استخدم فئات البايثون. في المثال الموضح بالشكل 1.32، ستنشئ البيانات السمات (Properties ، ، قائمة مترابطة مكونة من ثلاث عُقد ، كل واحدة تضم يوما من أيام الأسبوع. والطرائق السلوك Behavior) الخاصة بها. وتستخدم الفئات كقوالب لإنشاء الكائنات. وزارة التعليم Ministry of Education 2024-1446 # single node Monday class Node: def _init__(self, data, next=None): self.data = data #node data self.next = next # Pointer to the next node # Create a single node first = Node("Monday") print(first.data) Monday Tuesday Wednesday شكل :1.32 مثال على القائمة المترابطة ستنشئ أولًا عُقدة باستخدام الفئة. الخطوة التالية هي إنشاء قائمة مترابطة تحتوي على عُقدة واحدة، وهذه المرة ستستخدم مؤشر الرأس للإشارة إلى # single node class Node: def __init__(self, data = None, next=None): self.data = data self.next = next # linked list with one head node class LinkedList: def __init__(self): self.head = None # list linked with a single node Linkedlist1 = LinkedList() Linkedlist1.head = Node("Monday") print(Linkedlist1.head.data) Monday العقدة الأولى. 46

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

القائمة المترابطة في لغة البايثون

شرح القائمة المترابطة في لغة البايثون

# single node class Node: def __init__(self, data = None, next=None) : self.data = data self.next = next # an empty linked list with a head node. class LinkedList: def __init__(self): self.head = None # the main program أضف الآن المزيد من العُقد إلى القائمة المترابطة. linked_list = LinkedList() # the first node # the second node linked_list.head = Node( "Monday " ) linked_list.head.next = Node( "Tuesday " ) Node("Monday") Node("Tuesday") # the third node linked_list.head.next.next = Node("Wednesday") # print the linked list node = linked_list.head while node: print (node.data) node = node.next Monday Tuesday Wednesday تُستخدم عبارة while للتنقل من عُقدة إلى أخرى. إضافة العقدة إلى القائمة المترابطة Add a Node to a Linked List لتتمكن من إضافة عقدة جديدة، اتبع الخطوات التالية: 99 node.next ب أن يُشير مؤشر العُقدة الأولى إلى عنوان العقدة الجديدة، حتى 1. أنشئ العقدة تصبح العقدة الجديدة هي العقدة الثانية. يجب أن يُشير مؤشر العُقدة الجديدة (الثانية) إلى عنوان العقدة الثالثة. بهذه الطريقة، لن تحتاج إلى تغيير العناصر عند إضافة عنصر جديد في المنتصف. تقتصر العملية على تغيير قيم العناوين في العقدة التي تُسرّع من عملية الإضافة في حالة القوائم المترابطة، مقارنة بحالة القوائم المتسلسلة. مثال : الجديدة. 37 1 12 node -3--> (2-->> 12 37 99 node node.next | node.next.next | .2 اربط العقدة 37 بالعقدة 99. لديك قائمة مترابطة من عنصرين: 12 و99 ، وتريد إدراج العنصر 37 كعنصر .3 اربط العقدة 12 بالعقدة 37 ثانٍ بالقائمة في النهاية، سيكون لديك قائمة من ثلاثة عناصر: 12 و37 و99. ( تمت إضافة العقدة الجديدة. 47 وزارة التعليم Ministry of Education 2024-1446

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

اضافة المزيد من العقد الى القائمة المترابطة

شرح اضافة المزيد من العقد الى القائمة المترابطة

إضافة العقدة الى القائمة المترابطة

شرح إضافة العقدة الى القائمة المترابطة

وزارة التعليم Ministry of Education 2024-1446 # single node class Node: def __init__(self, data = None, next=None): self.data = data self.next = next #linked list with one head node class LinkedList: def __init__(self): self.head = None def insertAfter(new, prev): # create the new node new_node = Node(new) # make the next of the new node the same as the next of the previous node new_node.next = prev.next # make the next of the previous node the new node prev next = new_node # create the linked list L_list = LinkedList() # add the first two nodes L_list.head = Node(12) second = Node(99) L_list.head.next = second # insert the new node after node 12 (the head of the list) insertAfter(37, L_list.head) # print the linked list node L_list.head = while node: print (node.data) node = node.next 12 37 99 حذف العُقدة من القائمة المترابطة Delete a Node from a Linked List لحذف عُقدة، عليك تغيير مؤشر العُقدة التي تسبق العُقدة المراد حذفها إلى مؤشر العقدة التي تلي العقدة المحذوفة. أصبحت العُقدة المحذوفة ( الثانية ) عبارة عن بيانات غير مُفيدة (Useless Data ) وستُخصَّص مساحة الذاكرة التي تشغلها لاستخدامات أخرى. Я مثال : لديك قائمة مترابطة من ثلاثة عناصر : 12 و 37 و 99 ، وترغب في حذف العنصر .37. في النهاية، سيكون لديك قائمة من عنصرين: 12 و99. 48

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

يتبع اضافة العقدة الى القائمة المترابطة

شرح يتبع اضافة العقدة الى القائمة المترابطة

حذف العقدة من القائمة المترابطة

شرح حذف العقدة من القائمة المترابطة

49 # single node class Node: def __init__(self, data = None, next=None): self.data = data self.next = next #linked list with one head node class LinkedList: def __init__(self): self.head = None def deleteNode(key, follow): # store the head node وزارة التعليم Ministry of Education 2024-1446 temp = follow.head #find the key to be deleted, # the trace of the previous node to be changed while(temp is not None): if temp.data == key: break prev temp temp temp.next #unlink the node from the linked list prev.next = temp.next temp = None # create the linked list L_list = LinkedList() # add the first three nodes L_list.head = Node(12) second = Node(37) third Node(99) = L_list.head.next = second second.next = third # delete node 37 deleteNode(37, L_list) # print the linked list node L_list.head = while node: print (node.data) node = node.next 12 99 229 ---> --> 12 37 99 node node.next node.next.next .1 اربط مؤشر العقدة 12 بالعقدة 99. 2. احذف العقدة 37. 1--- 12 99 node node.next 2 37 node.next 3. النتيجة النهائية 12 99 3 node node.next إذا كنت تريد حذف العقدة الأولى من القائمة المترابطة عليك نقل مؤشر الرأس إلى العقدة الثانية من القائمة.

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

يتبع حذف العقدة من القائمة المترابطة

شرح يتبع حذف العقدة من القائمة المترابطة

50 1 تمرينات حدد الجملة الصحيحة والجملة الخاطئة فيما يلي: 1. لغة البايثون تُعرف هياكل البيانات غير الأولية. لک 2. هياكل البيانات الخطيَّة تُخزّن عناصر البيانات في ترتيب عشوائي فقط. 3. إضافة العناصر وحذفها من القائمة المترابطة Linked List) أبطأ من القائمة .(List) 4. يمكن الوصول إلى العناصر في القائمة باستخدام رقم الفهرس فقط. 5. يُمكن تغيير حجم هيكل البيانات الثابتة أثناء تنفيذ البرنامج. 2 حدد الاختلافات بين هياكل البيانات الثابتة والمتغيرة هياكل البيانات الثابتة 3 اكتب مثالين لاستخدامات القوائم المترابطة. صحيحة خاطئة هياكل البيانات المتغيرة وزارة التعليم Ministry of Education 2024-1446

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

حدد الجملة الصحيحة والجملة الخاطئة فيما يلي

حل حدد الجملة الصحيحة والجملة الخاطئة فيما يلي

حدد الاختلافات بين هياكل البيانات الثابتة والمتغيرة

حل حدد الاختلافات بين هياكل البيانات الثابتة والمتغيرة

اكتب مثالين لاستخدامات القوائم المترابطة

حل اكتب مثالين لاستخدامات القوائم المترابطة

51 وزارة التعليم Ministry of Education 2024-1446 المكدّس المخرج النهائي сл 5 5 4 4 3 3 2 2 1 1 0 0 لديك مُكدّس به ست مساحات فارغة. ، ستُضيف الحروف الآتية C و E و B و A و D في المواقع من 0 إلى 4. املأ المكدّس الذي يُشير إلى موقع المؤشر الأعلى. نَفِّذ العمليات التالية: pop push K push X → pop pop اظهر المخرج النهائي بعد تنفيذ العمليات السابقة للإشارة إلى موقع المؤشر العلوي. اكتب البرنامج الذي يُنشئ المكدّس الموضح بالأعلى، ثم نَفّذ العمليات المذكورة أعلاه باستخدام مكتبة الطابور القياسية لديك التسلسل الرقمي الآتي : 4 و 8 و 2 و 5 و 9 و 13. . ما العملية المستخدمة لإضافة العناصر الموضحة بالأعلى إلى الطابور؟ أكمل الطابور بعد إضافة العناصر. 0 1 2 3 4 5 . ما العملية المستخدمة لحذف العناصر من الطابور ؟ • كم مرة يجب تنفيذ العملية الموضحة بالأعلى لحذف العنصر الذي قيمته 5؟ أكتب المقطع البرمجي بلغة البايثون لإنشاء الطابور السابق. 4 5

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

لديك مكدس به ست مساحات فارغة

حل لديك مكدس به ست مساحات فارغة

لديك التسلسل الرقمي الآتي

حل لديك التسلسل الرقمي الآتي

52 6 باستخدام العُقد التالية ارسم القائمة المترابطة، ثم اكتب القيم في القائمة بالترتيب السليم. الرأس = 3 9 2 0 4 1 5 -3 7 أنشئ قائمة تضُم الأرقام التالية: 5 و 20 و 45 و 8 و 1. . ارسم العُقد في القائمة المترابطة. صف عملية إضافة الرقم 7 بعد الرقم 45. . ارسم القائمة الجديدة صف العملية المطلوبة لحذف العُقدة الثانية من القائمة. . ارسم القائمة المترابطة النهائية وزارة التعليم Ministry of Education 2024-1446

الدرس الثاني: هياكل البيانات في الذكاء الاصطناعي

ارسم القائمة المترابطة ثم اكتب القيم في القائمة بالترتيب السليم

حل ارسم القائمة المترابطة ثم اكتب القيم في القائمة بالترتيب السليم

انشى قائمة تضم الأرقام التالية

حل انشى قائمة تضم الأرقام التالية
التعليقات
لم يتم إضافة أي تعليقات حتى الآن.

الرجاء تسجيل الدخول لكتابة تعليق