2017-04-11 17 views
0

私はノード構造体**ヴァル

struct NodeBucket { 
    char** val; 
    struct NodeBucket* next; 
}; 

として、以下の構造体を使用するバケット・スタックのようなものを実装しています方法は、各バケットは、値の指定された量を保持することができるということです、完全な新しいNodeBucketが作成され、前のノードにリンクされた後でいっぱいになるなど。 最初のバケットに2番目の値を追加しようとすると混乱しました。最初のバケットを作成する最初の値を追加するときは、temp->value = &valを使用して値を入力に設定します。残りの入力を追加する方法は不明です。私はインデックス(firstBucket-> val [1] = val)を使ってみましたが、これは正しい方法ではないようです。助けていただければ幸いです。はい、これは宿題で、私はPythonからやってくるCの初心者です。

EDIT

void push(char* val, struct Stack *stack){ 
    if (isEmpty(stack)){ 
      struct NodeBucket *temp =malloc(sizeof(struct NodeBucket)); 
      temp ->val = &val; 
      temp->next = NULL; 
      stack->firstBucket=temp; 
      stack->topElt++; 
    }else if(!isEmpty(stack)&& size(stack)!=stack->bucketSize){ 
      stack->firstBucket->val[stack->topElt] = val; 
      stack->topElt++; 
    } 
+0

あなたはいくつかのコードを表示し、どこが壊れているかを指摘する必要があります/あなたがついています – JeremyP

+0

は私のプッシュ機能を追加しました。ありがとう! – spaceinvaders101

+1

'temp - > val = &val;' ??一時変数のアドレスを格納することは間違いなく実行することです。 –

答えて

0

は、動作するようになっている方法は、各バケットは、値の指定された量を保持することができるということです、

だからあなたのバケツがstack->bucketSize値foは十分なストレージを持たなければなりません値は文字列であるため、タイプはchar*です。実際にはchar*へのポインタを作成して、valのスタック上のアドレスを割り当てます。このアドレスは、関数が戻るときに消えます。

struct NodeBucketは、格納しているアイテムの数を知る必要があります。

struct NodeBucket { 
    size_t numValues; 
    struct NodeBucket* next; 
    char** val; 
}; 

また、valの配列にスペースを割り当てる必要があります。これを次のように初期化します。

struct NodeBucket* temp = malloc(sizeof *temp); 
temp->val = malloc(sizeof(char*) * stack->bucketSize); 
temp->numValues = 0; 
temp->next = NULL; 

すべてを逆順にフリーにします。

flexible array member featureを利用して、malloc(および解放)を1に減らすことができるので、最後にvalを入れています。

次に、新しい文字列を追加するには、numValuesstack->bucketSizeより小さいかどうかがわかります。そうであれば、配列の最後に文字列を追加し(stack->firstBucket->val[numValues] = val)、numValuesをインクリメントします。そうでない場合は、新しいNodeBucketを作成してそこに追加します。

+0

非常に明確な答えをありがとう。初期化メモリは間違いなく忘れてしまったものです。今度はニッチな部分、私のストラットの定義は、最初に投稿した方法でのみ許可され、その順序で2つの値のみが使用されます。私のスタック構造体では、私は信じるnumValuesと本質的に同じint topEltを持っています – spaceinvaders101