C
ポインターを使用せずに整数を保持するための非常に基本的なスタック データ構造を実装する必要があります。これは配列のみを使用して可能ですか? シンプルな疑似コードは高く評価されます。
編集:の基本機能をサポートするUPPAALというモデル チェック ツールを使用していますが、サポートされていないC
再帰関数を使用する必要があります。ポインタをサポートしていないUPPAAL
ため、独自のスタックを使用して再帰を実装することを考えました。UPPAAL
より良いアイデアはありますか?
C
ポインターを使用せずに整数を保持するための非常に基本的なスタック データ構造を実装する必要があります。これは配列のみを使用して可能ですか? シンプルな疑似コードは高く評価されます。
編集:の基本機能をサポートするUPPAALというモデル チェック ツールを使用していますが、サポートされていないC
再帰関数を使用する必要があります。ポインタをサポートしていないUPPAAL
ため、独自のスタックを使用して再帰を実装することを考えました。UPPAAL
より良いアイデアはありますか?
構造体全体に対して 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);
このコードは説明用です。実装では、明らかにオーバーフローとアンダーフローをチェックします。