0

Cポインターを使用せずに整数を保持するための非常に基本的なスタック データ構造を実装する必要があります。これは配列のみを使用して可能ですか? シンプルな疑似コードは高く評価されます。

編集:の基本機能をサポートするUPPAALというモデル チェック ツールを使用していますが、サポートされていないC再帰関数を使用する必要があります。ポインタをサポートしていないUPPAALため、独自のスタックを使用して再帰を実装することを考えました。UPPAALより良いアイデアはありますか?

4

1 に答える 1

3

構造体全体に対して 1 つの動的割り当てを行うことが許可されていると仮定すると (何らかの方法でこれを行う必要があります)、オフセットに整数を使用できます。

unsigned int capacity = 100;
unsigned int top      = 0;

int * buf = malloc(sizeof(int) * capacity);

// push:
buf[top++] = n;

// pop:
int value = buf[--top];

// empty:
int is_empty = (top == 0);

// increase capacity:
if (top == capacity)
{
    int * tmp = realloc(buf, capacity * 2 * sizeof(int));
    if (!tmp) { /* out of memory, die */ }
    buf = tmp;
    capacity *= 2;
}

// destroy
free(buf);

このコードは説明用です。実装では、明らかにオーバーフローとアンダーフローをチェックします。

于 2012-07-28T18:57:53.053 に答える