مرحبا
لدي برنامج يطلب من المستخدم ادخال Transaction
بحيث أن كل Transaction يحتوي على مجموعة من items، يحددها المستخدم
مثلا
اليوزر دخل عدد ال Transaction =2
بعدين دخل عدد items في كل Transaction
مثلا
number of items in T[0]=3
T[0] = 1,4,3
number of items in T[1]=2
T[1] = 8,9
-
-
أريد أني أبني tree، بحيث بعد أن أقوم بترتيب الـ nodes فيها تصاعديا (كل Transaction يحتوي على مجموعة من items، وأقوم بترتيب items تصاعديا)
مثلا
T[0] = 1,4,3
تصبح بعد الترتيب
T[0] = 1,3,4
بعد أن أقوم بترتيب الـ items لكل Transaction
أقوم بعمل traverse بطريقة breadth first search
قمت بكتابة كود البرنامج كالتالي (ونتائج الترتيب تظهر خطأ)
struct Transaction
{
int Item;
Transaction *next;
};</p>
<p>#define ItemNum 1000
Transaction *Trans[ItemNum]; //Adjacency list stors list of Items in each Transactions.
int TransNum; //No. of Transactions.</p>
<p>void SortItems(int,int);وفي الدالة Build_Tree()
أنادي دالة الترتيب، كل مرة يدخل اليوز عناصر ال Transaction
int Itemsets, Itemsets_Data; Transaction *NewItem,*FollowingItem;</p><p> for(int a=0;a<=ItemNum-1;a++) Trans[a] = NULL;</p><p> for(int i=0;i<=TransNum-1;i++) { FollowingItem=NULL; cout<<"\n\n Please Enter the number of items of Transaction #"<<i+1<<" = "; cin>>Itemsets;</p><p> for(int j=0;j<=Itemsets-1;j++) { cout<<"\n Please Enter Itemes #"<<j+1<<" = "; cin>>Itemsets_Data;</p><p> NewItem= new Transaction; NewItem->Item = Itemsets_Data; NewItem->next = NULL;</p><p> if(Trans == NULL) Trans= FollowingItem = NewItem;</p><p> else { FollowingItem->next = NewItem; FollowingItem = NewItem; } } </p><p> SortItems(Itemsets, i);</p><p> // print int r =0; while ( (r <=Itemsets-1) && (Trans != NULL)) { cout<<"\n"<<Trans->Item; Trans = Trans->next; r+=1; } } }دالة الترتيب
void SortItems(int Itemlist, int loc)
{
Transaction *Temp;
Temp= new Transaction;
int num=0, num1=1;
while ( (num <Itemlist) && (Trans[loc]->next != NULL))
{
while ( (num1 <Itemlist-1) && (Trans[loc]->next != NULL))
{
if (Trans[loc]->Item > Trans[loc] ->next->Item)
{ Temp->Item = Trans[loc]->Item;
Trans[loc]->Item = Trans[loc]->next->Item;
Trans[loc]->next->Item = Temp->Item;
}
Trans[loc] ->next->Item = Trans[loc] ->next->Item;
num1+=1;
}
Trans[loc]->Item =Trans[loc]->Item ;
num+=1;
}
}لو قمت مثلا، بادخل عدد الـ Transaction=1
وعدد الـ Items في Transaction = 4
مثلا
Trans[0]=3,2,5,4
ف النتيجة بعد الترتيب تظهر كالتالي
Trans[0]=2,3,5,4
أي أن دالة الترتيب قامت بترتيب أول عنصرين فقط
الرجاء المساعدة