2016-11-17 52 views
-1

我正在努力將指針從堆棧的1個元素移動到下一個堆棧。我已經完成實施。堆棧的最後一個元素是給定的,否則我嘗試的東西似乎沒有用。編譯器給出了錯誤next undeclared (first use of this function)上線pNewNode->next=next將數據添加到使用C中的2個結構實現的堆棧中:移動指針

相關代碼如下:

void push(TopStack *ts, int val) 
{ 
    if(ts->num==0) 
    { 
     Stack *pNewNode; 
     pNewNode=(Stack*)malloc(sizeof(Stack)); 
     pNewNode->val=val; 
     pNewNode->next=NULL; 
     ts->top=pNewNode; 
    } 
    else if(ts->num!=0) 
    { 
     Stack *pNewNode; 
     pNewNode=(Stack*)malloc(sizeof(Stack)); 
     pNewNode->val=val; 
     pNewNode->next=next; 
     ts->top=pNewNode; 
    } 
} 

的結構在這裏定義:

typedef struct stack_elem 
{ 
    int val; 
    struct stack_elem *next; 
} Stack; 

//struct that contains the pointer to the top of the stack 

typedef struct 
{ 
    int num; //num of elements in stack 
    Stack *top;; //top of stack 
} TopStack; 

我也有以下功能相關的原型,因爲結構在頭文件中。爲了便於閱讀,我只包含了我認爲相關的代碼,但如果需要,我可以提供更多內容。

+2

'pNewNode-> next = next;'next'沒有被定義。 –

+0

究竟是什麼問題?它是否編譯,什麼都不做或者有編譯錯誤? – user3794667384

+0

當你想在堆棧的頂部***上添加新節點時,新節點下一個指針應該指向哪裏? –

回答

0

請修改您的代碼在其他部分pNewNode-> next = ts-> top;

void push(TopStack *ts, int val) 
{ 
    if(ts->num==0) 
    { 
     Stack *pNewNode; 
     pNewNode=(Stack*)malloc(sizeof(Stack)); 
     pNewNode->val=val; 
     pNewNode->next=NULL; 
     ts->top=pNewNode; 
    } 
    else if(ts->num!=0) 
    { 
     Stack *pNewNode; 
     pNewNode=(Stack*)malloc(sizeof(Stack)); 
     pNewNode->val=val; 
     pNewNode->next=ts->top; 
     ts->top=pNewNode; 
    } 
}