2017-11-02 26 views
-5
typedef int Element; 

typedef struct { 
    Element *stack; 
    int max_size; 
    int top; 
} Stack; 

//I added more codes.. 
Stack *CreateStack(int size) 
{ 
    Stack *pStack = (Stack *)malloc(sizeof(Stack)); 
    if(pStack == NULL) 
     return NULL; 

    pStack->stack = (Element *)malloc(size * sizeof(Element)); 
    if(pStack->stack == NULL){ 
     free(pStack); 
     return NULL; 
    } 

    pStack->max_size = size; 
    pStack->top = -1; 

    return pStack; 

} 


//this for linked list 
typedef struct tStackNode{ 
    Element data; 
    struct tStackNode *next; 
} StackNode; 

typedef struct { 
    int count; 
    StackNode *top; 
} StackHead; 

StackHead* CreateStack(int size) 
//size is not used in linked list implmentation 
{ 
    StackHead *pStack = (StackHead *) malloc(sizeof(StackHead)); 
    if(pStack == NULL) 
     return NULL; 
    pStack->count = 0; 
    pStack->top = NULL; 

    return pStack; 
} 

最初のものは配列のもので、2番目のものはリンクされたリストのものです。スタックのC:配列実装とスタックのリンクリスト実装で、この2つのコードの違いがなぜ発生するのですか?

「スタックの作成」のコードを追加しました。でしょう最初のものは、整数ポインタ値を使用して2つ目は、int型の値を必要とするのはなぜ

....

どうもありがとうございました。

+0

リストの各ノードは*単一*値を表します。したがって、ノードには1つの「要素」値しか含まれていないことが理にかなっています。スタックの場合、 'stack'は配列の最初の要素へのポインタです。 –

+1

いくつかの情報がありません、より多くのコードを表示します。 –

+0

これは実装が異なるためですか?最初の要素は動的に要素を割り当て、スタックの先頭にフックし、2番目の要素は動的にノードを割り当てます。 –

答えて

1

リンクリストでは、データ要素は各リストノードに格納されます。

配列の実装では、*スタックポインタが指す配列にデータが格納されます。これを使用するには、適切なサイズのスタックを割り当ててスタックポインタに割り当てる必要があります。

+0

ああ、配列の実装は、実際のデータを配置するために他のメモリが必要ですか? –

+0

はい、モジュールで使用可能なmallocまたは静的/大域配列のいずれかです。 –

関連する問題