2017-01-30 8 views
1

これはスタックとintパラメータを取り込み、intをstackNodeの一部に変換し、追加された新しいノードを持つ新しいスタックを返す(pushNodeとStack適切に)初期化されて:Cを使用してスタックにアイテムをプッシュする

Stack push(Stack stk,int data){ 
    struct StackNode *top = stk.top; 
    struct StackNode *node; 
    node->data = data; 
    node->nextNode = top; 
    stk.top = node; 
    stk.count++; 
    return stk; 
} 

私が午前問題は、毎回私はプッシュ機能を実行することである以上、それは私が走ったパラメータとしてスタック内の他のStackNode項目を書き込みます。例えば

push(stk, 3): stack output = 3 //good so far 
push (stk, 4): stack output= 4 4//the correct output would be 3 4! 
push(stk, 56): stack out put= 56 56 56 //what's going on! 

は私が間違って何をやっている、あなたはノードのためにメモリを割り当てることができませんでした

+2

は[ 'のstd ::スタックを<>']を使用します(http:// en.cppreference.com/w/cpp/container/stack);または、[mcve]を提供する。 –

+3

@Danこの質問はCではなく、C++ –

+1

@GovindParmar point taken;おそらく私はまだ "or ..."で覆われているかもしれませんが:-)? –

答えて

3

を助けてください。メモリ割り当てを追加します。

Stack push(Stack stk,int data){ 
    struct StackNode *top = stk.top; 
    struct StackNode *node = malloc(sizeof(struct StackNode)); 

    node->data = data; 
    node->nextNode = top; 
    stk.top = node; 
    stk.count++; 

    return stk; 
} 

または、割り当てに成功したかどうかのチェックを追加できます。

Stack push(Stack stk,int data){ 
    struct StackNode *top = stk.top; 
    struct StackNode *node = malloc(sizeof(struct StackNode)); 

    if (node != NULL) 
    { 
     node->data = data; 
     node->nextNode = top; 
     stk.top = node; 
     stk.count++; 
    } 

    return stk; 
} 

私は当初タイプStackのオブジェクトのデータメンバtopがNULLで初期化されたと仮定。私はあなたがこのよう

struct StackNode *node; 
node->nextNode = stk.top; 
stk.top = node; 

をコーディング読ん

+0

私を助けてくれてありがとう! mallocのことがうまくいった!それを私に説明してもらえますか?私の教授は教えてもらえませんでした – ashadeka

+0

@ashadekaあなたは変数データの値と次のノードへの参照を保存するノードを割り当てる必要があります。リストは、ポインタによって結合されたノードのチェーンです。 –

-1

それはあなたがノードを追加するように見えますが、次の参照は、それ自体の上に常にあります。

編集:

struct StackNode *top = stk.top; 
struct StackNode *node = malloc(sizeof(struct StackNode)); 
node->data = data; 
top->nextNode = node; 
stk.top = node; 
stk.count++; 
return stk; 

EDIT2:

SRY説明するの忘れて、

あなたは私が

top->nextNode = node; 
0123に置き換え

node->nextNode = top; 

を書きました

あなたのコードは新しいノードをタックし、次のノードとして現在のトップを参照してから新しいノードをトップにしました。つまり、スタックを呼び出すと、最初のノードがノードであり、それは、次のノードとして自分自身にそれゆえ、この出力をreffered:

私のコードが変更さ
push(stk, 3): stack output = 3 //good so far 
push (stk, 4): stack output= 4 4//the correct output would be 3 4! 
push(stk, 56): stack out put= 56 56 56 //what's going on! 

と、あなたがスタックに新しいノードを置く場合は、新しいものは、現在の次のノードとして定義されていること新たなノードを新たなトップノードとして定義する前に、

+0

私を助けてくれてありがとう! mallocのことがうまくいった!それを私に説明してもらえますか?私の教授はそれを教えてもらえませんでした – ashadeka

+0

'top-> nextNode = node;':リストを破棄してください。 – BLUEPIXY

0

代わりの解決策は次のとおりです。 //関数呼び出しがスタックの先頭にあるノードへのポインタのアドレスと整数を渡すと仮定できます。イオン:例えば、プッシュ(& stackpointer、5) //スタックの一番上にデータ値5を有するノードを挿入

void fun(StackNodePtr *topPtr, int info) 
{ 
    StackNodePtr *newPtr = malloc(sizeof(StackNode)); 


    if (newPtr != NULL) {   
     newPtr->data = info;   
    newPtr->nextPtr = *topPtr; 
     *topPtr = newPtr;    
    }      
    else { // no space available 
     printf("%d not inserted. No memory available.\n", info); 
    } 
} 

}

+0

CoderGirl94は、あなたが94th Coderのガールフレンドであることを意味していますか?:) –

+0

あなたは私の質問でうぬぼれていますか? – ashadeka

関連する問題