2013-05-30 154 views
3

这是我的问题...我有了这个代码(创建列表)指针和结构

typedef struct node 
{ 
    int pid; 
    int runtime; 
    struct node *next; 
}job; 

int main() 
//code 
job *first = NULL; 
job *last = NULL; 
job *newnode; 
//code 
//from here 
if(first == NULL) 
{ 
    first = last = newnode; 
    newnode->next = NULL; 
} 
else 
{ 
    last->next = newnode; 
    last = last->next; 
} 
// to here 

所以我想做的事从这里到这里的部分功能(所以它会更好看) ,我也this..i主,而不是强有力的作用创造了一个功能

void funct(job ** pfirst, job **plast, job*newnode); 

我使用:

funct(&first, &last, newnode); 

和功能是这样

void funct(job ** pfirst, job **plast, job*newnode) 
{ 
    if(*pfirst == NULL) 
    { 
     *pfirst = *plast = newnode; 
     newnode->next = NULL; 
    } 
    else 
    { 
     *plast->next = newnode;//<---- 
     *plast = *plast->next;//<---- 
    } 
} 

的错误是在箭头和最高审计机关不是结构的一部分。这

+1

这个答案可能会帮助:HTTP:// stackoverflow.com/a/16841064/694576 – alk

回答

5

->higher precedence超过*(解引用)操作符,所以你需要括号()各地list到覆盖优先。纠正这样的: (*last)->next = newnode;

*last->next = newnode;是错误的,因为它同*(last->next) = newnode;list没有成员next

0

这里除了你的第二个代码逻辑上的错误。您应该检查if(*pfirst == NULL)并没有提及解决方案if(*pfirst != NULL)

void funct(job ** pfirst, job **plast, job*newnode) 
{ 
    if((*pfirst) == NULL) 
    { 
     *pfirst = *plast = newnode; 
     newnode->next = NULL; 
    } 
    else 
    { 
     (*plast)->next = newnode;//<---- 
     *plast = (*plast)->next;//<---- 
    } 
} 

还考虑要创建List这将是更好的使用(记住,你甚至可以做到这一点没有last指针)..这种方法可以很容易地创建多个列表或者数组列表

typedef struct node 
{ 
    int pid; 
    int runtime; 
    struct node *next; 
}job; 

typedef struct List 
{ 
    job *first = NULL; 
    job *last = NULL; 
}joblist; 

,然后像

int main() 
//code 
joblist *list= NULL; 
job *newnode; 
//code 
//from here 
if(list== NULL) 
{ 
    list = malloc(sizeof (*list)); 
    list->first =list->last=newnode; 
    newnode->next = NULL; 
} 
else 
{ 
    list->last->next = newnode; 
    list->last = list->last->next; 
}