Gold_cpp
چهارشنبه 03 آذر 1389, 17:26 عصر
سلام
آیا می توان همانطور که یک لیست را از اول به اخر پیمایش می کنیم .
tmp = tmp->next
لیست را از آخر به اول پیمایش کرد .
tmp = tmp->prev
با این طرز فکر که می توان این کار را انجام داد (یعنی پیمایش از اخر به اول) برای حذف عنصر آخر این کار را انجام داده ام.
ابتدا از اول تا آخر لیست را پیمایش کردم
for(help = first;help->next;help = help->next);
الان help روی اخرین عنصر اشاره میکند
چون با چاپ دستور
cout << help->info;
آخرین عنصر چاپ میشود .
دستورات زیر را برای حذف انجام دادم .
help = help->prev;
Help->prev = NULL;
help->next = NULL;
delete(Help);
و این هم تمام برنامه ای که برای این منظور نوشتم.
//in the name of allah
#include<iostream.h>
#include<conio.h>
class Node
{
public:
Node *prev;
int info;
Node *next;
Node(){prev = NULL , next = NULL;}
Node (int x){ info = x; next = NULL; prev = NULL;}
}*Help , *help;
class List
{
public:
Node *first;
List(){first = NULL;}
~List(){};
int getlist(int );
int dellast();
int printlist();
};
int List::getlist(int x)
{
Node *tmp = new Node(x);
if (!tmp)
return 0;//false
if(!first)
{
first = tmp;
Help = tmp;
}
else
{
Help->next = tmp;
Help = Help->next;
tmp->prev = Help->next;
}
return 1;//true
}
int List::printlist()
{
if(!first)
return 0;
for(Help = first;Help;Help = Help->next)
cout << Help->info << "\t";
return 1;//true
}
int List::dellast()
{
if(!first)
return 0;//false
for(help = first;help->next;help = help->next);
//cout << help->info;//print last namber
Help = help;
help = help->prev;
Help->prev = NULL;
help->next = NULL;
delete(Help);
return 1;//true
}
//****************************************
int main ()
{
List d;
for(int i = 0;i < 7;i++)
d.getlist(i+1);
d.printlist();
d.dellast();
cout << "\n\n";
d.printlist();
getch();
return 0;
}
}
توجه :
برای حذف آخرین عنصر در تابع می خواهم حتما این خط
این خط از تابع dellast هیچ تغییری نکند .
for(help = first;help->next;help = help->next);
یعنی اول لیست تا اخر برود و بعد یکی به عقب برگردد .
آیا می توان همانطور که یک لیست را از اول به اخر پیمایش می کنیم .
tmp = tmp->next
لیست را از آخر به اول پیمایش کرد .
tmp = tmp->prev
با این طرز فکر که می توان این کار را انجام داد (یعنی پیمایش از اخر به اول) برای حذف عنصر آخر این کار را انجام داده ام.
ابتدا از اول تا آخر لیست را پیمایش کردم
for(help = first;help->next;help = help->next);
الان help روی اخرین عنصر اشاره میکند
چون با چاپ دستور
cout << help->info;
آخرین عنصر چاپ میشود .
دستورات زیر را برای حذف انجام دادم .
help = help->prev;
Help->prev = NULL;
help->next = NULL;
delete(Help);
و این هم تمام برنامه ای که برای این منظور نوشتم.
//in the name of allah
#include<iostream.h>
#include<conio.h>
class Node
{
public:
Node *prev;
int info;
Node *next;
Node(){prev = NULL , next = NULL;}
Node (int x){ info = x; next = NULL; prev = NULL;}
}*Help , *help;
class List
{
public:
Node *first;
List(){first = NULL;}
~List(){};
int getlist(int );
int dellast();
int printlist();
};
int List::getlist(int x)
{
Node *tmp = new Node(x);
if (!tmp)
return 0;//false
if(!first)
{
first = tmp;
Help = tmp;
}
else
{
Help->next = tmp;
Help = Help->next;
tmp->prev = Help->next;
}
return 1;//true
}
int List::printlist()
{
if(!first)
return 0;
for(Help = first;Help;Help = Help->next)
cout << Help->info << "\t";
return 1;//true
}
int List::dellast()
{
if(!first)
return 0;//false
for(help = first;help->next;help = help->next);
//cout << help->info;//print last namber
Help = help;
help = help->prev;
Help->prev = NULL;
help->next = NULL;
delete(Help);
return 1;//true
}
//****************************************
int main ()
{
List d;
for(int i = 0;i < 7;i++)
d.getlist(i+1);
d.printlist();
d.dellast();
cout << "\n\n";
d.printlist();
getch();
return 0;
}
}
توجه :
برای حذف آخرین عنصر در تابع می خواهم حتما این خط
این خط از تابع dellast هیچ تغییری نکند .
for(help = first;help->next;help = help->next);
یعنی اول لیست تا اخر برود و بعد یکی به عقب برگردد .