المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : إستفسار أرجو المساعدة


جهاد3
08-Mar-2007, 09:15 PM
السلام عليكم ورحمة الله وبركاته

أريد مواضيع عن linked list, array , tree , hash table المستخدمة في لغات البرمجة والفرق بينها وأيها أفضل في الإستخدام ..

ولكم مني خالص الدعاء ..

Mona
09-Mar-2007, 01:22 AM
تريدها بالداتا ستركتشرز ..سأقوم بإحضار مالدي من مراجع واسماء كتب

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

ومن وجهة نظري القاصرة قد تكون الـ tree هي اكثرها مرونة وذات خيارات اوسع

جهاد3
10-Mar-2007, 09:49 PM
جزاك الله ألف خير أختي mona ..

لو أحد يعرف مواقع بالعربي تفيد في الموضوع يساعدني ..
أو أحدفاهم يشرح لي كيفية أستخدامها والفرق بينها ..

Mona
11-Mar-2007, 01:30 AM
DATA STRUCTURES
A Pseudocode Approach with C++
by
Richard F.Gilberg
Behrouz A. Forouzan


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

عموماً
أخي أنا سأتكفل بشرح
linked list , tree
وإن شاء الله يكون الشرح مفهوم لك
لي عودة مع "الشرح" إن شاء الله تعالى

جهاد3
11-Mar-2007, 09:07 PM
الله يعطيك العافية ويجزاك خير يا أختي mona ..

أنتظر الشرح ..

تحياااتي ...

Mona
16-Mar-2007, 02:49 PM
بسم الله الرحمن الرحيم
Data structure

تقسم البيانات إلى :
1- atomic
2- structured


data structured هي طريقة لتنظيم البيانات (بنوعيها) وهذا التنظيم للبيانات يهتم بكيفية خزن هذه البيانات والعلاقة التي تربط البيانات ببعضها


وتقسم لغات البرمجة إلى نوعين :
1- procedaral /linear programming
2- object oriented programming


ADT : هو أحد مفاهيم الـ ( ooP) " اختصار اللغة 2 "
والمقصود بـADT هو وصف كامل للـdata structure وهي عبارة عن function ودوال جاهزة وهذا الوصف يشمل 3 محاور:
1- وصف للعناصر التي تكوّن التركيب البياني (مثلاً أن تكون من نفس النوع)
2- وصف للعلاقات التي تربط المكونات الاساسية للتركيب البياني
3- وصف للعمليات التي يمكن تنفيذها على مكونات التركيب البياني


مثلاً ..نريد دراسة تركيب بياني معين مهو ( القائمة المتصلة "linked list" ):
1- العنصر الأساسي المكون لهذا التركيب البياني هو العقدة (node).
2- العلاقة التي تربط العقد عن طريق المؤشرات / العنوانين "pointers / address".
3- العمليات الممكن إجراؤها (الحذف والإضافة والبحث وتغيير البيانات .." add,delete, search,..etc"

علاقة الـ ADT بتركيب البيانات :
(مثلا ًيأتيك سؤال يطلب منك كتابة برنامج ..ويشترط لك في السؤال ان يكون الحل " with ADT"
هذا مباشرة معناه ان تكتب البرنامج مستخدماً الـ ADT بدون تفصيل او معرفة كيفية عمل دوالها ومعادلاتها ..مثلا ستستخدم دالة الجمع ..فقط كل ما عليك هو بإستدعاءها فقط . واذا طُلب البرنامج بدون ADT عندها لن تكتفي بإستدعاء الدوال فقط وبل ستحتاج لكتابة تعريفها مرة اخرى
وطريقة عملها.

algorithm (الخوارزميا ت) :
هي عبارة عن سلسلة من التعليمات الواضحة البسيطة والتي تعمل على حل مسألة معطاة أو مطلوب تنفيذها بوقت محدد من الزمن .
أو هي سلسلة الخطوات المنطقية المتشابكة المستخدمة لتحويل المشكلات الرياضية العادية إلى صورة خاصة تمهيداً لحلها عن طريق الحاسوب بإستخدام طرق التحليل العددي مع التحسين المستمر للنتائج في إطار التسلسل المنطقي

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


وستتضح لك بشكل اوسع هذه المفردات وماذا تعنيه بالضبط واستخدامات ها

تم الجزء الأول بحمد الله

-=-=-=-=-=-=-=-=-=-

أستعنت و سأستعين بالشرح بعد الله بقليل من شرح أستاذتي وسأوضح ما يشكل عليك بشكل موسع او ارى انه غير واضح لك
اتمنى أن لا أكون تأخرت كثيراً ..طبعاً لي عودة .. : )

Mona
16-Mar-2007, 10:14 PM
مفهوم القوائم الخطية “ linear list concepts” :

http://www.alhariq.com/xdrive/id.14559.file

تقسم القوائم الخطية الى قسمين :
A- عامة "general"

في القوائم العامة يمكن اضافة البيانات او حذفها من أي مكان تكون فيه بدون وجود أي قيود عند القيام بأي عملية
وتنقسم بدورها هذه القوائم الى قسمين اخرين :

1-مرتبة" list ordered"
البيانات فيها تكون مرتبة معتمدين على الـkey وهو الذي نريد اما البحث عنه او اضافته او تغيير بياناته في القائمة
2- غير مرتبة (عشوائية) " Unordered list او “ random list
البيانات فيها تكون غير مرتبة

B- مقيدة " restrictedt"
نستطيع اضافة او حذف البيانات من خلال طرفين فقط منها ..وهو نهاية القائمة او بدايته ولا نستطيع اضافة او حذف الا من خلال هذا المنفذين
مثال عليها .. (stack) و (queue)

في حالة (stack) اخر الداخلين للقائمة هو أول الخارجين ويسمى ايضاً (LIFO)
في حالة (queue)اول الداخلين للقائمة هو اول الخارجين (FIFO)

(LIFO) هو إختصار لجملة اخر الداخلين للقائمة هو أول الخارجين بالإنجليزي ة ( last In First Out)
(FIFO) هو اختصار لجملة اول الداخلين للقائمة هو اول الخارجين بالانجليزي ة (First In First Out)

العمليات الممكن تطبيقها على القوائم الخطية هي :
البحث “search”/ الحذف”dele tion” / التنقل عبرها "traversal"/ الإضافة "insertion"/ الإسترجاع “retrieval ”

وهذا رسم توضيحي .. يختصر ما سبق قوله //

http://www.alhariq.com/xdrive/id.14557.file

يتبع

Mona
17-Mar-2007, 01:31 AM
Linked lists ::

http://www.alhariq.com/xdrive/id.14560.file

القوائم المتصلة هي عبارة عن قوائم لكل من عناصرها وريث وحيد “unique successor”

تعرفنا سابقاً علىArrayوك انت سهلة الإنشاء والإستخدام ولكنها غير فعّالة عندما تحتاج البيانات المتسلسلة“seque nced data” الإضافة أو الحذف

فالقوائم المتصلة شبيه بالمصفوفات ولكن الإضافة والحذف في المصفوفات صعبة لانه يجب عمل shift والعناصر لا تكون مربوطة مع بعضها عن طريق حفظ عنواينها

والقوائم المتصلة فعّالة عند التعامل بها في الإضافة والحذف ايضاً عند البحث عن البيانات او معالجتها " تغيير البيانات

مفهوم القوائم المتصلة " Liked list concepts" :
هي مجموعة من البيانات المرتبة وكل عنصر فيها يحتوي على موقع عنصر بعده “ next element” او بتعريف اخر مبسط هي عبارة عن مجموعة من القعد "nodes" المتصلة فيما بينها بمعنى أن كل عنصر من عناصر القائمة المتصلة متصل بالعنصر الذي بعده عن طريق حفظ عنوانه

Node and head node:

http://www.alhariq.com/xdrive/id.14561.file

كل عنصر من عناصر القائمة المتصلة يسمى عقدة او ( node) ويجب أن تكون عناصر القائمة من نفس النوع " Data type “ مثلا ً ان تكون جميعها من نوع عدد صحيح " Intger"

ان كل عنصر (node) يحتوي على جزئين :
1- Data وهو الجزء الذي به البيانات.
2- link وهو الجزء الذي به عنوان العقدة التالية (address of the next node) (راجع الشكل التابع للـ node)

وعن طريق جزء الـ link يتم الربط بين الـ nodes في القوائم المتصلة ايضاً يوجد عقدة “node” اسمها Head node مهمة وتحتوي على (metadata) أي معلومات مثل .. عدد العقد الكلي في القائمة / عنوان أول عقدة في القائمة ..الخ

وظيفة "head node " ضرورية حتى تقوم بإمساك القائمة والحفاظ على عنوانها من الضياع ويجب أن تحوي عنوان أول عقدة لنستطيع الوصول للقائمة .

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

أي انه إذا لم نمسك أول عقدة فإن القائمة المتصلة تعتبر ضائعة ولحل هذه المشكلة أوجدت عقدة الـ head

تحتوي عقدة head على جزئين ::
1- Count وبه عدد العقد الكلي للقائمة المتصلة (يعطينا دائما هذا الجزء عدد عناصر القائمة كما في الشكل عدد العناصر هو 3 عناصر
)2-Head وبه عنوان أول عقدة يؤشر عليها ( يعطينا دائما هذا الجزء عنوان اول عنصر من القائمة )لذلك دائماً للتعامل مع القوائم المتصلة نبدأ من الـ head أي من اول عقدة (راجع الشكل)

يتبع

جهاد3
17-Mar-2007, 07:08 PM
الله يجزاك خير ويجعل هذا الجهد المبارك في ميزان حسناتك ...

Mona
01-Apr-2007, 11:42 AM
خوارزمية القائمة المتصلة :

اولاً : إنشاء قائمة

عند انشاء قائمة سنقوم بإعطاء قيم ابتدائية لعقدة الـ head وهي اكثر ما يهمنا في القائمة
(وقد سبق ان ذكرنا أن head يحتوي على count وعلى head وهو المؤشر الذي يحتفظ بعنوان اول عقدة في القائمة )
فيعطى الـ count قيمة ابتدائية وهي صفر " count=0"
أما الـ head فيعطى قيمة إبتدائية وهي "NULL) null )معناه أن الـ head لا يشير لشيء"

وهذا رسم توضيحي لشكل عقدة الـ head قبل وبعد الإنشاء :

http://www.m5zn.com/uploads/f7056eeb71.jpg

وهذا هو ..كود انشاء قائمة متصلة ( ومنه سأشرح طريقة كتابة الكود في الداتا ستركتشرز)

Algorithm createList (ref list meta data
> )

Initializes metadata for a linked list

Pre list is metadata structure passed by reference

Post metadata initialized

list.head=null
list.count=0

return
end createList

الجزء من السطر الأول للكود الى السطر الرابع ..يسمى Algorithm Header
حيث تحتوي كل خوارزمية وتبتدأ بهذا الجزء

حيث يصف هذا الجزء الـ parameters المرسلة كالموجودة في مثالنا " ref list metadata>" و يصف ايضاً pre- و postconditions

وهذه المعلومات مهمه ولذلك لأن المبرمج الذي سيقوم بتحويل الكود للغة برمجة أكثر تطوراً عادة ما ينظر أولاً فقط للمعلومات الموجودة في الـ header لانها ستكفيه وستسهل عليه فهم الكود ومعرفة ما يقوم به هذا الكود

السطر الأول Algorithm createList (ref list metadata>)

كلمة Algorithm هي كلمة ثابتة يجب كتابتها في بداية الكود تقوم مقام Start
كلمة createList هو عبارة عن إسم الخوارزمية ..(تسمية الخوارزمية امر إختياري وراجع للمبرمج نفسه بشرط أن لا تحتوي على مسافة بين اجزاء الأسم او يبتدأ برقم او رمز ويسمح بإستخدام _ )
ما بداخل القوس (ref list meta data>) هذا القوس يوضع به ما تود ارسالة كا"parameters" في الخوارزمية
كلمة ref هو اختصار برمجي لكلمة( reference) ومعناه ان تُحفظ التغيرات التي ستجرى على القائمة " الإرجاع بالمرجع"
او لو وضعنا val وهو اختصار برمجي لكلمة ( value) ومعناه ان لا تحفظ أي تغيرات حدثت في القائمة وان تعود القائمة كما أُرسلت بدون أي تغير " الإرجاع بالقيمة"


الفرق بين val وبين ref
عندما يطلب منك مثلاً اضافة 1 على كل عنصر مع حفظ التغير الذي سيحدث على القائمة .. عليك ان ترسل القائمة pass by ref
أما اذا لم يطلب منك حفظ التغير وطلب منك مثلاً طباعة النتائج ..فعليك ارسال القائمة pass by value
وليس هناك غير هذا النوعان من انواع تمرير الـ parameters


نعود للكود

السطر الثاني منه Initializes metadata for a linked list

ويسمى purpose
وتكتب به شرح بسيط وقصير لما تقوم به الخوارزمية أي شرح وظيفتها فهنا في هذه الخوارزمية .. سنقوم بإنشاء القائمة وذلك بإعطاء الـ head قيم إبتدائية


السطر الثالث والرابع(pre- postconditions )

Pre list is metadata structure passed by reference

Post metadata initialized

Pre هو وصف لأي إجراء متطلب القيام به على الـ parameters
مثل ما يوجد في مثالنا : القائمة يجب ان تكون metadata ومرسلة بالمرجع

وفي بعض الأحيان لا يوجد في الخوارزمية precondition وفي هذه الحالة يوضع عند pre كلمة nothing بمعنى لا يوجد شي لوصفه كما سنرى الان
Pre Nothing

واذا كان هناك الكثير من الـ parameters المدخلة او المرسلة للخوارزمية عندها يجب أن يكون الـ pre condition يصف كل مدخل وكل parameters مثل هذا الـ header الذي سيوضح بشكل اكبر ما أقصده في هذه الفقرة مع الإنتباه مع ما سبق شرحه وتطبيقة هنا على هذا المثال المختلف" فقط سأكتب الـ header وليس كامل البرنامج (فقط رأس البرنامج حتى يتضح المعنى بشكل أكبر)

Algorithm search (val list<array>
Val argument <integer>,
,(ref Loc <index> )

search array for specific item and return index

pre list contains data to be located
argument contains data to be located in list

post Loc contains index of element matching argument –or-undetermined if not found

return true if found, false if not found


يتبع