المكدس و المصفوفات في ++C
المكدس
نقدم لك مثالا لمكدس يخزن أعدادا كسرية , لنبين لك مدي اليسر في التجول من نوع لأخر في صياغة البرنامج .
Stackflo.cpp
// stackflo.cpp
// tests the TStackAsVector class with type float
#include <classlib\stacks.h>
#include <iostream.h>
void main()
{ // instantiate stack for type float
TStackAsVector<float> staflo;
staflo.Push(11.1); // push floats onto stack
staflo.Push(12.2);
staflo.Push(13.3);
while( !staflo.IsEmpty() ) // pop floats off stack
cout << staflo.Pop() << endl;
}
كما نقدم لك في المثال التالي علي الفئة المشتقة كقائمة بدلا من متجه . وهنا أيضا , يكون البرنامج في أغلبه كما هو , وينحصر التغيير في نوع الفئة .
Stacklist.cpp
// staklist.cpp
// tests the TStackAsList class with type int
#include <classlib\stacks.h>
#include <iostream.h>
void main()
{
TStackAsList<int> stint; // instantiate a stack for type int
stint.Push(11); // push ints onto stack
stint.Push(12);
stint.Push(13);
while( !stint.IsEmpty() ) // pop ints off stack
cout << stint.Pop() << endl;
}
ويقدم لنا جدول الدوال المنتمية للفئة TStackAsVector .
جدول الفئات المنتمية للفئة TStackAsVector
الدالة | الغرض منها |
FirstThat | تعيد مؤشرا لأول كائن يحقق شرطا وضعه المبرمج |
Flush | إزالة كافة العناصر من المكدس |
ForEach | تنفيذ نفس العملية التي حددها المبرمج علي كافة العناصر |
GetItemsInContainter | تعيد عدد العناصر في المكدس |
IsEmpty | تعيد 1 في حالة خلو المكدس |
IsFull | تعيد 1 في حالة امتلاء المكدس |
LastThat | تبحث عن كافة العناصر التي تحقق شرطا وضعه المبرمج |
Pop | سحب عنصر |
Push | ضخ(إضافة) عنصر |
Top | تعيد موضع رأس المكدس دون إزالته . |
المصفوفات
تقدم الفئة TArrayAsVector نفس ما تقدمه المصفوفات في لغة السي++ من إمكانيات , إذ يمكن الوصول لعنصر عن طريق المؤثر [] المعروف , ولكنها تقدم ما هو أكثر من إمكانيات . فالدالة AddAt() مثلا تتيح لك إضافة عنصر في موضع ما دون أن تمحو العنصر الذي كان به , إذ تتسع المصفوفة عند هذا الموضع لتحتوي البيان الجديد (علي عكس ما يحدث عند استخدام المؤثر [] – راجع المثال التالي ) . ويبين الشكل الفرق بين نوعي الإضافة
شكل إضافة عنصر جديد لمصفوفة
ويبين الجدول الدوال المنتمية لهذه الفئة
جدول دوال الفئة TArrayAsVector
الدالة | الغرض منها |
Add | إضافة عنصر , زيادة سعة المصفوفة |
AddAt | إضافة عنصر في مكان ما , زيادة سعة المصفوفة |
ArraySize | إعادة سعة المصفوفة |
Destory | محو عنصر من المصفوفة ومن الذاكرة |
Detach | محو عنصر من المصفوفة , وليس بالضرورة محوه من الذاكرة . |
FirstThat | تعيد مؤشرا لأول كائن يحقق شرطا وضعه المبرمج |
ForEach | تنفذ عملية علي كافة العناصر |
GetItemsInContainer | تعيد عدد العناصر |
HasMember | هل العنصر موجود في المصفوفة ؟ |
IsEmpty | تعيد 1 في حالة الخلو |
IsFull | تعيد 1 في حالة الامتلاء |
LastThat | تبحث عن كافة العناصر التي تحقق شرطا ما |
LowerBound | إعادة الحد السفلي الجاري (السعة الأدني ) |
UpperBound | إعادة الحد العلوي الجاري (السعة الأقصي) |
ويقدم لك المثال التالي تطبيقا لبعض إمكانيات دوال هذه الفئة :
Arrayflo.cpp
// arrayflo.cpp
// demonstrates TArrayAsVector class
#include <classlib\arrays.h> // for TArrayAsVector
#include <iostream.h>
void main()
{
TArrayAsVector<float> arrflo(10); // create array of 10 floats
arrflo.Add(7.1); // insert at 0
arrflo.Add(7.2); // insert at 1
arrflo.Add(7.3); // insert at 2
arrflo.AddAt(7.15, 1); // insert at 1 (moves 1 and 2)
arrflo[0] = 7.01; // overwrite at 0
// display all floats
for(int j=0; j<arrflo.GetItemsInContainer(); j++)
cout << arrflo[j] << endl;
}
وقد حددنا في هذا المثال السعة القصوي للمصفوفة (10) , وهناك إمكانية أن تحدد للمصفوفة حدين , السعة الأدني , والسعة القصوي , وفي هذه الحالة عليك أن تحدد عدد الخانات التي تزاد كل مرة (يسمي ذلك المعامل delta ) فلو افترضنا أن الحد العلوي هو 100خانة , السفلي 10 وأن الزيادة بمعدل 5 خانات (لو حدد بصفر فلن تتسع المصفوفة) فيكون التعريف بالمصفوفة علي النحو التالي :
TArrayAsVector <float> arrflo (100, 10, 5);
تعليقات
إرسال تعليق