خانه / الگوریتم / الگوریتم و کد لینک لیست C++

الگوریتم و کد لینک لیست C++

قرار هست که در بخش الگوریتم   دیجی نکست  در موردالگوریتم و کد لینک لیست C++  توضیح بدم و سپس کدش رو به زبان سی پلاس پلاس را خدمت شما ارائه بدیم.

لینک لیست یا لیست پیوندی چیست؟

لینک لیست (linked list) شامل لیست ها یا خانه هایی است که توسط اشاره گر به یکدیگر لیست یا وصل شدن، هر خانه یا لیست ممکنه شمال سه بخش باشه،

که بخش اول اون  داده ای که باید نگه داریم رو در اختیار میگیره، بخش بعدی به خانه یا لیست بعدی اشاره داره و آدرس اون خونه در اون بخش نگه داری میشه

و بخش آخر که ایجاد کردن اون اختیاری هست اشاره گر به خانه یا لیست قبلی هستش، که آدرس خونه ی قبل در اون بخش نگه داری میشه.

لینک لیست های دارای بخش آخر رو لینک لیست دو طرفه (Double Linked list)  و لینک لیستی که بخش آخر رو نداره رو لینک لیست یک طرفه (Single Linked list) مینامیم.

لطفا به تصویر زیر توجه بفرمایید:

لیست پیوندی

لیست پیوندی

دوستان تمامی دستور ها و وظایف لینک لیست توسط توابع تعریف شده و باید برای انجام دستور مورد نظر و دیدن نتیجه توابع مورد نظر را فراخوانی بکنید.

#include <iostream>
#include <string>
using namespace std;

class node 
{   public:
   int data;
    node* next;
    node* prev;

};
                                   class stack
 {                 int maxnum;
                int count;
                node* top;
            public:
                stack(int max)
                {
                    top=NULL;
                    maxnum=max;
                    count=0;
                }
                

                                   void print ()
    {
        node *temp;
        temp=top;
        while (temp!=NULL)
        {
            cout<<temp->data<<",";             temp=temp->next;
        }
    }
                                  void addfirst (int a)
{
    if(count == maxnum)
            {
            cout<<"Stack is full";          }             else              {                    node *newtop = new node;                    if (top==NULL)                  {                         newtop->data=a;
                        newtop->next=NULL;
                        newtop->prev=NULL;
                        top=newtop;
                        count++;
                    }
            
                   else
                   {
                       newtop->data=a;
                       newtop->next=top;
                        top=newtop;
                       newtop->prev=top;
                        count++;
                   }
             }
}
                                  void addlast ( int a)
 {
     
    node* temp = new node;
    temp->data = a;
    temp->next = NULL;
    temp->prev=NULL;
           if(count == maxnum)
              { 
                 top = temp;
                 count++; 
                 } 
             else
              { 
                 node* last = top;
                 while(last->next)
                  last=last->next;
                 last->next = temp;
             }
}
                                  void addmiddle ()
{        
        int y,g;
        cout<<"where? Then What?"<<endl;           cin>>y>>g;
           int j=0;
        node *p1 =new node; node *p2= new node; p1=p2=top;
        node *p= new node;
        p->data=g; p->next=NULL; p->prev=NULL;
            for(int i=0;i<y;i++)             {             p2 = p2->next;
            j++;
            if(j>1)
            {
             p1=p1->next;    
            }
            }
            p1->next=p; p->next=p2;
            
}
                                  void deletefirst ()
{
        if (top==NULL)
        cout<<"Nothing to delete";          else              {          node * old = top;          top = top->next;
         count--;
         delete (old);
             }
}
                                  void deletelast ()
{ int j=0;
  node *p1= new node; node *p2= new node;p1=p2=top;
  while (p2->next)
  {
      p2=p2->next;
      j++;
      if(j>1)
      {
          p1=p1->next;
      }
  }
  p1->next=NULL;
}
                                  void deletemiddle ()
{ 
  int y;
          cin>>y;
           int j=0;
        node *p1 =new node; node *p2= new node; p1=p2=top;
            for(int i=0;i<y;i++)             {             p2 = p2->next;
            j++;
            if(j>1)
            {
             p1=p1->next;    
            }
            }
            p1->next=p2->next;
            p2=NULL;   
}
                                  void getfirst ()
{
                   if (top==NULL)
                 {
                     cout<<"NO";
                 }
                   else
                   {

                        cout<<endl<<top->data;
                   }     
}
                                  void getlast ()
{
         
    node* temp = new node;
    temp=NULL;
           if(top==NULL)
              { 
                cout<<"NO";                  }              else               {                  node* last = top;                  while(last->next!=NULL)
                  last=last->next;
                  cout<<endl<<last->data;
             }
}
                                  void getmiddle ()
{          int y;
           cin>>y;
           if(y==0)
           {
               cout<<"also you cat try getfirst function"<<endl;
           }
        node *p1 =new node; node *p2= new node; p1=p2=top;
        node *p= new node;
            for(int i=0;i<y;i++)             {             p2 = p2->next;
            }
         cout<<p2->data;
}
                                  void clean ()
{
    node *pointer=new node;
    pointer=top;
         while (pointer!=NULL)
           {
           top=pointer->next;
           delete[] pointer;
           pointer = top;
           }
}
                                  void reverse ()
{
     node *rev=new node;
    if(count == maxnum) return;
     
    node *prev = new node; node *current=new node; node *next=new node;
    prev=current=next=NULL;
    current = top;
    while(current != NULL)
    {
        next = current->next;
        current->next = prev;
        prev = current;
        current = next;
    }
    top = prev;
}
                                  void size ()
{ 
    node* tally=new node; int i=0;
    tally=top;
while (tally != NULL) 
{ 
 i++; 
  tally = tally->next; 
}
cout<<endl<<i<<endl;
}

};
int main()
{
    return 0;
}

برای فهم عمیق تر موضوع میتوانید از این لینک در ویکی پدیا استفاده کنید .

امیدوارم استفاده کرده باشید ، نظرات و مشکلات خود را حتما بیان کنید .

۲ دولایک کن

درباره محمدرضا

آواتار محمدرضا
قاتل بروسلی

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

شکلک خودتو انتخاب کن !

SmileBig SmileGrinLaughFrownBig FrownCryNeutralWinkKissRazzChicCoolAngryReally AngryConfusedQuestionThinkingPainShockYesNoLOLSillyBeautyLashesCuteShyBlushKissedIn LoveDroolGiggleSnickerHeh!SmirkWiltWeepIDKStruggleSide FrownDazedHypnotizedSweatEek!Roll EyesSarcasmDisdainSmugMoney MouthFoot in MouthShut MouthQuietShameBeat UpMeanEvil GrinGrit TeethShoutPissed OffReally PissedMad RazzDrunken RazzSickYawnSleepyDanceClapJumpHandshakeHigh FiveHug LeftHug RightKiss BlowKissingByeGo AwayCall MeOn the PhoneSecretMeetingWavingStopTime OutTalk to the HandLoserLyingDOH!Fingers CrossedWaitingSuspenseTremblePrayWorshipStarvingEatVictoryCurseAlienAngelClownCowboyCyclopsDevilDoctorFemale FighterMale FighterMohawkMusicNerdPartyPirateSkywalkerSnowmanSoldierVampireZombie KillerGhostSkeleton

bigtheme