ايران ويج

نسخه‌ی کامل: حذف گره در لیست پیوندی
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام خسته نباشید دوستان این کد قسمت حذف گره از لیست پیوندی هسته ولی درست عمل نمیکنه کسی میدونه مشکلش چی؟

کد:
class node

{

    char name[30];

    char lname[50];

    long numhasab;

    long Money;

    node *next;

    friend class hasab;

};//



class hasab{

    node *head;

    public:

  void load();

        void add_hasab();

        void mande_hasab(char[30] ,char[50] ,long &,long  &,int &);

        void bardasht_hasab();

        void delete_hasab();

};









void hasab::delete_hasab()////////حذف حساب

{



     int taed;int chek;

     long i=0;long numhasab;

         node *cur;node *del;

    cur=head;

     cout<<endl<<"Enter Number Hasab : ";

    

         cin>>numhasab;

  while(cur!=NULL)

    {

     i++;            

                  if(cur->numhasab=numhasab)

                  {chek=1 ; break;}

    

        cur=cur->next;

    }    

  if (chek==1 )

  {



       cout<<"in hasab mojod mibasha ba     Name : " << cur->name << "  " << cur->lname << "  Mandeh hasab " << cur->Money ;            

       cout<<endl<<"motman hastid hasb hzf shvad taed 1 : ";      

       cin >>taed;

       if (taed==1)

       {

             del=cur;

             cur=cur->next;

             del->next=NULL;

             delete del;

            

                   cout<<"Yes delete hasab";

       }

              

          }

else

cout<<"No hasab";

     }////////////////
تو حذف شما سه حالت داری
یک اول لیست
دو وسط لیست
سه آخر لیست

برای اول این کلی میشه
کد:
NodeDel=NodeCur;
NodeCur=NoddeCur->next;
detele NodeDel;
که یعنی نود اول رو نگه داری میکنی تو یه تمپ بعد اون رو مساوی با نود بعدی میکنی . بعد تمپ رو پاک می کنی

برای وسط این شکلی میشه باید موقع سرچت یکی مونده به NodeCur رو هم نگه داری کنی.اول نود cur رو کپی کنی تو تمپ بعد نود قبل از cur رو وصل کنی به cur ->next بعد. تمپ رو پاک کنی

برای آخر هم باید نود cur رو بریزی تو تمپ و بعد نود یکی مونده به آخر next اون رو نال کنی

اینم یه نمونه نگاه کن
کد:
#include <iostream>

using namespace std;

class linklist
{
     private:

             struct node
         {
              int data;
            node *link;
         }*p;

   public:

             linklist();
         void append( int num );
         void add_as_first( int num );
         void addafter( int c, int num );
         void del( int num );
         void display();
         int count();
         ~linklist();
};

linklist::linklist()
{
     p=NULL;
}

void linklist::append(int num)
{
     node *q,*t;

   if( p == NULL )
   {
        p = new node;
      p->data = num;
      p->link = NULL;
   }
   else
   {
        q = p;
      while( q->link != NULL )
           q = q->link;

      t = new node;
      t->data = num;
      t->link = NULL;
      q->link = t;
   }
}

void linklist::add_as_first(int num)
{
     node *q;

   q = new node;
   q->data = num;
   q->link = p;
   p = q;
}

void linklist::addafter( int c, int num)
{
     node *q,*t;
   int i;
   for(i=0,q=p;i<c;i++)
   {
        q = q->link;
      if( q == NULL )
      {
           cout<<"\nThere are less than "<<c<<" elements.";
         return;
      }
   }

   t = new node;
   t->data = num;
   t->link = q->link;
   q->link = t;
}

void linklist::del( int num )
{
     node *q,*r;
   q = p;
   if( q->data == num )
   {
        p = q->link;
      delete q;
      return;
   }

   r = q;
   while( q!=NULL )
   {
        if( q->data == num )
      {
           r->link = q->link;
         delete q;
         return;
      }

      r = q;
      q = q->link;
   }
   cout<<"\nElement "<<num<<" not Found.";
}

void linklist::display()
{
     node *q;
   cout<<endl;

   for( q = p ; q != NULL ; q = q->link )
        cout<<endl<<q->data;

}

int linklist::count()
{
     node *q;
   int c=0;
   for( q=p ; q != NULL ; q = q->link )
        c++;

   return c;
}

linklist::~linklist()
{
     node *q;
   if( p == NULL )
        return;

   while( p != NULL )
   {
        q = p->link;
      delete p;
      p = q;
   }
}

int main()
{
     linklist ll;
   cout<<"No. of elements = "<<ll.count();
   ll.append(12);
   ll.append(13);
   ll.append(23);
   ll.append(43);
   ll.append(44);
   ll.append(50);

   ll.add_as_first(2);
   ll.add_as_first(1);

   ll.addafter(3,333);
   ll.addafter(6,666);

   ll.display();
   cout<<"\nNo. of elements = "<<ll.count();

   ll.del(333);
   ll.del(12);
   ll.del(98);
   cout<<"\nNo. of elements = "<<ll.count();
   return 0;
}
کد:
----------------------------  طراحي پشته با ليست پيوندي  -----------------------

#include <iostream.h>
#include <conio.h>

struct node
{
   char token;
   node *link;
}*top=NULL;

void push(char x)
{
  node *temp=new node;
  temp->token=x;
  temp->link=top;
  top=temp;
}

char pop()
{
  node *temp=top;
  char x;
  if(top==NULL) return 0;
  top=top->link;
  x=temp->token;
  delete temp;
  return x;
}

int check(char s[])
{
  for(int i=0;s[i]!=NULL;i++)
  {
    if(s[i]=='(' || s[i]=='{')
       push(s[i]);
    else
    if(s[i]==')' && pop()!='(')
     return 0;
     else if(s[i]=='}' && pop()!='{')
      return 0;
  }
  if(top!=NULL)
    return 0;
  return 1;
}
main()
{
  char str[50];
  cin>>str;
  if(check(str))
    cout<<"correct";
  else
    cout<<"wrong";
}