منتدى اوبار



 
الرئيسيةبـوابة أوبـارس .و .جبحـثالتسجيلدخول


المواضيع الأخيرة
فوتوشوب - الدرس 1الثلاثاء 07 فبراير 2017, 7:58 pm من طرفAhmed Helal Ahmedمواقع الصورالأحد 18 ديسمبر 2016, 11:49 pm من طرفAhmed Helal Ahmedمواقع لكلمة السرالأحد 18 ديسمبر 2016, 11:46 pm من طرفAhmed Helal Ahmedمواقع للنصوص و حفظ الاكوادالأحد 18 ديسمبر 2016, 11:44 pm من طرفAhmed Helal Ahmedمواقع العابالأحد 18 ديسمبر 2016, 11:42 pm من طرفAhmed Helal Ahmedمواقع تقدم كورسات مجاناالأحد 18 ديسمبر 2016, 11:39 pm من طرفAhmed Helal Ahmedالإسلام برئ من الإرهابالجمعة 16 ديسمبر 2016, 11:48 pm من طرفAhmed Helal Ahmedindex_bodyالثلاثاء 06 ديسمبر 2016, 10:37 pm من طرفScientist_Ahmed_Helalدروس الفوتوشوب بطريقة رائعة لن تندم إن جربت الجمعة 25 نوفمبر 2016, 1:56 am من طرفScientist_Ahmed_Helalشوية اضافات للفايرفوكس تجعله رائع جدا الإثنين 21 نوفمبر 2016, 8:48 pm من طرفScientist_Ahmed_Helal

 

 Double Linked List -c++-(data structure)

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل 
كاتب الموضوعالموضوع


مشرف عام

مشرف عام
معلومات اضافية
ذكر
المساهمات : 504
العمر : 23
مكانك المفضل : كلية العلوم - جامعة الاسكندرية-
العمل : كلية العلوم - جامعة الاسكندرية-رياضة/حاسب
الشكر : 3
تاريخ التسجيل : 20/09/2008


معاينة صفحة البيانات الشخصي للعضو
موضوع: Double Linked List -c++-(data structure)الخميس 30 أبريل 2015, 9:01 pm

Double Linked List

 c++

الكود:


    //By : Ahmed Helal Ahmed Ali  - Faculty Of Science - Alexandria University
    #include<iostream>
    #include <windows.h>//Sleep & system cls
    using namespace std;
    typedef float ET;//ET stand for Element type
    typedef struct node
       {
          ET data;
          node *next;
          node *prev;
       }node;

    class DLList
    {
    private:
       node* L;// L pointer to the first node of the list
    public:
       DLList(void){L=NULL;}//to initalize L which is pointer to first node
       int createDLL(ET X);//to free data
       void Destroy(void);
       void PrintAll(void);
       int search(ET X);
       int Insert(ET X);
       int Delete(ET X);
    };
    int DLList::createDLL(ET X)
    {
       node * P;
       P=new node;
       if(P==NULL){return 0;cout<<"Error!.There is no memory";Sleep(3000);}
          P->data=X;
          P->next=NULL;
          P->prev=NULL;
          L=P;
          return 1;
    }


    void DLList::Destroy(void)
    {
    node *P, *Q;
    P = L;
    while(P!=NULL)
    {
        Q = P->next;
        delete(P);
        P = Q;
    }
    }

    void DLList::PrintAll(void)
    {
    node* P;
    P=L;
    if (P==NULL)
   {cout<<"Error!.Empty List\n";Sleep(3000);}
    else
    {
        while(P!=NULL)
        {
    cout<<P->data;
    P = P->next;
    cout<<endl;
        }// end while
    }// end else

    }//end function


    int DLList::search(ET X)//ok
    {
      node* P;
      P = L;
      while(P != NULL && P->data != X)
      P = P->next;
      if(P==NULL)
      return 0;
      return 1;
    }

    int DLList::Insert(ET X)
    {
       node *P , *Q ,*MaxP=L,*tmp;
       int count=0,i;
       ET Max,Min;
       P=L;
       if(P==NULL){createDLL(X);return 1;}//if we enter insert before create
       Q=new node;
       if(Q==NULL){cout << "Error!.there is no memory\n"; Sleep(3000); return 0;}
       Q->data=X;Q->next=Q->prev=NULL;
       Max=P->data;
       Min=P->data;
       while(P!=NULL)
       {
           if(P->data>Max)
           {
            Max=P->data;
           }//to get max value
            if(P->data<Min)
           {
            Min=P->data;
           }//to get min value
           MaxP=P;//pointer to greater node in the list
           P=P->next;
       }//end of while and finding Max element and Min element
       P=L;//poiner to smallest  node in the list and first one also
    if(Max==Min)
    {
     if(Q->data<Min)
      {
         Q->next=P;
         P->prev=Q;
         L=Q;
      }//new node will be min
 else
      {
      Q->prev=MaxP;
      MaxP->next=Q;
     }// in last node(will be max)(last node)
   }//case one or more elements equally in the Double linked list

    else if(search(X))
       {
           int F=0,R=1;
           while(F==0&&R==1)
           {
               if(X==P->data)
               {F=1;}
               if(F==1&&P->next==NULL)
               {
                 R=0;break;
               }//last element in the repeated be last node
               else if(F==1&&X!=P->next->data)
               {
                   R=0;break;
               }//last element in the repeated not last node
             P=P->next;
           }//to get the node which x exsists in last position
            if(P->prev==NULL)//repeated value in first node
                {
                   tmp=P->next;
                   P->next=Q;
                   Q->prev=P;
                   Q->next=tmp;
                   tmp->prev=Q;
                }//the new node will be in first
            else if(P->next==NULL)//repeated value in last node
            {
               P->next=Q;
               Q->prev=P;
            }//the new node will be in last

            else
                {
            tmp=P->next;//pointer to next node of repeated value
            P->next=Q;
            Q->prev=P;
            Q->next=tmp;
            tmp->prev=Q;
                }//after the exist
       }
       else if(Q->data<Min)
       {
           Q->next=P;
           P->prev=Q;
           L=Q;
       }//will be min

       else if(Q->data>Max)
       {
         MaxP->next=Q;
         Q->prev=MaxP;
       }//will be max
   else if(Q->data>Min&&Q->data<Max)
       {
        while(P!=NULL)
        {
            if(Q->data>P->data) count++;
            P=P->next;
        }//to get postion of the node which is small than new node exactly to put the new node after it
        P=L;
        for(i=1;i<count;i++)P=P->next;//to get the poiter of the small node that new node exactly greater than it
            Q->next=P->next;
            P->next=Q;
            Q->prev=P;
            tmp=Q->next;
            tmp->prev=Q;
       }//the element in the middle not greater than max or less then min(سوف يوضع بعد الصغيرة)

       else
       {
         cout<<"Error\n";Sleep(3000);return 0;//impossible happen
       }

    return 1;
    }//end insert


    int DLList::Delete(ET X)//not yet
    {
        node *P,*Q,*t1,*t2,*MaxP;
        int Min,Max;
        P=L;
        if(!search(X))
    {
    cout<<"error there is no elemet with entered value\n";Sleep(3000);
    return 0;
    }
        Min=P->data;//to get Min value
        while(P!=NULL)
        {
            Max=P->data;
            MaxP=P;
            P=P->next;
        }//to get Max value
        P=L;
        if(P->next==NULL&&P->prev==NULL)
        {
            Q=P;
            L=NULL;
        }//to delete first and last node
        else if(X==Min)
        {
            Q=P;
            P=P->next;
            P->prev=NULL;
            L=P;
        }
        else if(X==Max)
        {
            while(P->data!=X)
                P=P->next;
            Q=P;
            if(P->next!=NULL)
            {
             t1=P->prev;
             t2=P->next;
             t1->next=t2;
             t2->prev=t1;
            }
            else
            {
             P=P->prev;
             P->next=NULL;
            }
        }
        else if(X<Max&&X>Min)
        {
    while(P->data!=X)
     P=P->next;
    Q=P;
    t1=P->prev;
    t2=P->next;
    t1->next=t2;
    t2->prev=t1;
         }
else
{
cout<<"error";Sleep(3000);
}
    delete(Q);
    return 1;
    }
//-------------------------main------------------------------//
    int main(void)
    {
    DLList L1;
    int x=1,PassCreat=0;
    ET data;
    cout<<"Welcome . . . to my priority DLL program\n"<<endl;Sleep(2000);
    while(x)
    {
      cout<<"Enter:"<<endl;
      cout<<"1-Create DLL"<<endl;
      cout<<"2-Print All"<<endl;
      cout<<"3-Search"<<endl;
      cout<<"4-Insert"<<endl;
      cout<<"5-Delete"<<endl;
      cout<<"6-Exit"<<endl;
      cin>>x;
      system("cls");
      if(x==6)
      {
       x=0;
       //if(PassCreat==1)
        L1.Destroy();
       cout<<"Thank you for using\n";
       Sleep(3000);
      }

      else if(x==1)
        {
            if(!PassCreat)
            {
            cout<<"Enter number to create DLL\n";
            cin>>data;
            PassCreat=L1.createDLL(data);
            }
            else
            {
            cout<<"Error!.The Linked list already is created\n";
            Sleep(3000);
            }

        }

    else if(x==2)
    {
         L1.PrintAll();Sleep(3000);
    }

    else if(x==3)
    {
     cout<<"Enter value to search in DLL\n";
            cin>>data;
             L1.search(data);
             if(L1.search(data)==1)
            cout<<"Found\n";

                else
                cout<<"Not found\n";
                Sleep(3000);
    }
    else if(x==4)
    {
            cout<<"Enter number\n";
            cin>>data;
            PassCreat=L1.Insert(data);
    }
    else if(x==5)
    {

            cout<<"Enter value to delete from DLL\n";
            cin>>data;
            L1.Delete(data);
    }
else
{
 cout<<"Error!.Invalid choice\n";Sleep(3000);
}

system("cls");
    }//end of while

       return 0;
    }
//By : Ahmed Helal Ahmed Ali - Faculty Of Science - Alexandria University

------- ( ... ... ) -------


لمعاينة التوقيع اضغط هنا ::
 
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒اضف تعليق باستخدام الفيس بك▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
════════════════════════════════════════════════════
تذكر قول الحق سبحانه و تعالى :(مَا يَلْفِظُ مِنْ قَوْلٍ إِلَّا لَدَيْهِ رَقِيبٌ عَتِيدٌ)


ملاحظة :تعليقات الفيس تظهر اسفل التوقيع فيمكن اضافة الرد عبر اى واحدة.

▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

مشاركة الموضوع على الفيس و غيره من المواقع من هنا

════════════════════════════════════════════════════

الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
Double Linked List -c++-(data structure)
استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

« أستعرض الموضوع السابق | أستعرض الموضوع التالي »


صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
منتدى اوبار :: الاقسام العامة :: كلية العلوم جامعة الإسكندرية-