演習課題「間違い探し」
右のコードエリアには、スタックを実装したコードがあります。
このコードには間違いがあり、正しく動作しません。
pop 関数を修正して、正しい出力が得られるようにしてください。
期待する出力値
20
10
#03:スタックを実装しよう (2)
このチャプターでは、前回のチャプターに引き続き、スタックを実装します。
// スタックを実装しよう(1)
#include <stdio.h>
#define N 10
typedef int data_t;
data_t stack[N];
int size;
void init(void)
{
size = 0;
}
int main(void)
{
}
スタックにデータを追加する push 関数は、次のように定義できます。void push(data_t x)
{
if (size >= N) {
printf("stack overflow\n");
return;
}
stack[size] = x;
size++;
}
size 変数の値が N 以上のときは、それ以上データを追加できないので、
「stack overflow」と出力して、return で処理を終了させます。
スタックからデータを取り出す pop 関数は、次のように定義できます。void pop(data_t *x)
{
if (size <= 0) {
printf("stack underflow\n");
return;
}
*x = stack[size - 1];
size--;
}
size 変数の値が 0 以下であるときは、それ以上データを取り出せないので、
「stack underflow」と出力して、return で処理を終了させます。
このチャプターで作成したコードです。// スタックを実装しよう(2)
#include <stdio.h>
#define N 10
typedef int data_t;
data_t stack[N];
int size;
void init(void)
{
size = 0;
}
void push(data_t x)
{
if (size >= N) {
printf("stack overflow\n");
return;
}
stack[size] = x;
size++;
}
void pop(data_t *x)
{
if (size <= 0) {
printf("stack underflow\n");
return;
}
*x = stack[size - 1];
size--;
}
int main(void)
{
// スタックの初期化
init();
// スタックに値を追加
push(10);
push(20);
// スタックから値を取り出す
int x;
pop(&x);
printf("%d\n", x);
pop(&x);
printf("%d\n", x);
}
スタックの実装 - C言語/C++入門講座 ツナサーモン
https://tunasalmon.com/2017/09/24/スタックの実装/