0

だから私はすでにこのコードを持っています: http://pastebin.com/3wuFNWGA

そして、これらの typedef を .h ファイルに入れました: http://pastebin.com/JTG9XHvW

ノードにメモリを割り当て、ノードにデータ (新しい要素) を格納し、ノードをスタックの一番上に挿入することで、ノードを my_stack に追加するプッシュ関数が必要です。コードは実行されますが、新しい値をスタックにプッシュした後に my_stack->top->data の値を出力しようとすると、スタックにプッシュしたはずの要素ではなく、常にゼロが出力されます。

私の人生では、理由がわかりません。新しいノードを作成して値をデータに保存するときに問題が発生するとは思わないので、 my_stack->top を最近追加されたノードに向けようとすると問題があると思いますか?

これは、スタック オーバーフローに関する私の最初の投稿でもあります。私はすべてが正しいことを願っています。

値をスタックにプッシュする push 関数は次のとおりです。

void push( Stack *my_stack, int newElement ) {
    Node_s *newNode;
    newNode = (Node_s *) malloc(sizeof(Node_s));
    if( newNode == NULL ) {
            printf("Error: malloc failed in push\n");
            exit(EXIT_FAILURE);
    }
    newNode->data = newElement;
    newNode->next = my_stack->top;
    my_stack->top = newNode;
}
4

2 に答える 2

1

スタックのサイズを大きくしないため、コードはスタックのサイズに対してゼロを出力します。

また、データフィールドのタイプが宣言されているため、要素に0を出力しますがdouble、整数指定子で出力します。

変化:

printf("The value at the top of the stack is %d\n", my_stack->top->data);

printf("The value at the top of the stack is %lf\n", my_stack->top->data);

この問題を修正します。

于 2012-04-14T08:21:03.183 に答える
0

それはかなり明確です!

これをチェックして:

typedef struct Node_s {
  double data;
  struct Node_s* next;
}Node_s;

data は double として定義されます。

しかし、ここで...

push(my_stack, 100);

あなたはintをプッシュしようとします。

だから...多分あなたのプッシュ先push(my_stack, 100.00);またはへのチェックtypedef struct Node_s

typedef struct Node_s {
   int data;
   struct Node_s* next;
 }Node_s;
于 2012-04-14T08:19:45.863 に答える