PDA

View Full Version : سوال ساده در مورد لیست پیوندی



amir-yeketaz
یک شنبه 27 دی 1388, 10:58 صبح
سلام
برای اینکه مدیر فکر نکنند که من تمرین دانشجویی می خوام اینجوری سوالمو می پرسم
من این برنامه رو نوشتم برایه اضافه کردنه یه داده ی صحیح و حالا می خوام اطلاعاتشو پرینت کنم
نمیدونم باید چیکار کنم
اینم کدی که نوشتم:

#include <stdio.h>
struct list{
int data;
list *next;
};
list*insertlist(list*,int,int);
int main(){
list *head=0;
insertlist(&head,0,32);
insertlist(&head,1,16);
insertlist(&head,2,8);
insertlist(&head,3,4);
insertlist(&head,4,2);
insertlist(&head,2,3);
return 0;
}
list*insertlist(list *head,int n,int data){
list *pn,*pm;
int i;
pn=head;
if(pn){
for(i=0;i<n&&pn->next;i++)
pn=pn->next;
if(!(pm=(list*)malloc(sizeof(list)))) printf("error");
pm->next=pn->next;
pn->next=pm;
pm->data=data;
}
else{
if(!(head=(list*)malloc(sizeof(list)))) printf("error");
head->next=0;
head->data=data;
}
return head;
}
من میخوام اینو پرینت کنم :
32
16
8
3
4
2
من فکر کنم کلا این برنامه ای که من نوشتم مشکل داشته باشه :ناراحت:
ممنون میشم اگه کمکم کنید (هر چه سریعتر)
فردا امتحان دارم:گریه::گریه::گریه:

mortezamsp
یک شنبه 27 دی 1388, 11:20 صبح
آره ؟


struct list{
list( int d)
{
data = d ;
next = NULL ;
}
int data;
list *next;
};
list*insertlist(list*,int,int);
void PrintList (list* ) ;
int main(){
list *head (0) ;
insertlist( head ,0 ,32 );
insertlist( head ,1 ,16 );
insertlist( head ,2 ,8 );
insertlist( head ,3 ,4 );
insertlist( head ,4 ,2 );
insertlist( head ,2 ,3 );
PrintList( head ) ;
return 0;
}
list*insertlist(list *head,int n,int data){
list *pn(0) ,*pm(0) ;
int i;
pn=head;
if(pn){
for( i=0; i<n && pn->next; i++ )
pn=pn->next;
//if(!(pm=(list*)malloc(sizeof(list)))) printf("error");
pm->next = pn->next;
pn->next = pm;
pm->data = data;
}
else{
if(!(head=(list*)malloc(sizeof(list)))) printf("error");
head->next=0;
head->data=data;
}
return head;
}
void PrintList ( list* head )
{
list * p =head ;
while( p )
{
cout <<"\n"<< p->data ;
p = p->next ;
}
}

amir-yeketaz
یک شنبه 27 دی 1388, 14:27 عصر
ممنون از راهنماییتون
ولی هنوز من به جواب نرسیدم
اینو که شما گفتین یه گوشه هاییشو متوجه نمیشم بخاطره همین به سبک خودم یه خورده تغییرش دادم
اینجوری:

#include <stdio.h>
#include <stdlib.h>
struct list{
int data;
list *next;
};
list*insertlist(list*,int,int);
void PrintList (list* ) ;
int main(){
list *head=0 ;
insertlist( head ,0 ,32 );
insertlist( head ,1 ,16 );
insertlist( head ,2 ,8 );
insertlist( head ,3 ,4 );
insertlist( head ,4 ,2 );
insertlist( head ,2 ,3 );
PrintList( head ) ;
return 0;
}
list*insertlist(list *head,int n,int data){
list *pn=0 ,*pm=0 ;
int i;
pn=head;
if(pn){
for( i=0; i<n && pn->next; i++ )
pn=pn->next;
pm->next = pn->next;
pn->next = pm;
pm->data = data;
}
else{
if(!(head=(list*)malloc(sizeof(list)))) printf("error");
head->next=0;
head->data=data;
}
return head;
}
void PrintList ( list* head ){
list * p =head ;
while( p ){
printf("%d\n",p->data);
p = p->next ;
}
}

این الان شرط if اولی رو تو تابع اجرا نمی کنه وفقط else شو تریس می کنه
من کلا قشنگ متوجه نمیشم که این کدی که خودم نوشتم چیکار میکنه میشه تریس برنامه ی درستشو توضیح بدین
واقعا ممنون

mortezamsp
جمعه 02 بهمن 1388, 18:39 عصر
منو ببخش که اینقدر دیر جواب میدم ، وقتی مینویسی if( pn) یعنی هروقت pn=1 باشه . حالا مگه pn=1 میشه؟ عوضش باید بنویسی if ( ! (!pn) ) چون وقتی pn=0 میشه که تهی باشه .

amir-yeketaz
جمعه 02 بهمن 1388, 23:39 عصر
ممنون خیلی وقت پیش مشکلم حل شد