プロが教える店舗&オフィスのセキュリティ対策術

以下のプログラムで、スタックに文字をpush-downする関数 void push(char c, char *s, int *top); を作りたいのですが・・・。

・作成した関数pushが正しく動作しpush-downの動作の前と後、それぞれの内容をprint_stack_ary関数を用いて確認するプログラムを書きたいのですが、関数の中身をどう書けばいいのかを教えてください。



#include <stdio.h>
#define MAX 30

void print_stack_ary(char* s, int top);

void push(char c, char *s, int *top); 


int main(void) {
char s[MAX] = "abcd";
print_stack_ary(s, 4);
return 0;
}

void print_stack_ary(char* s, int top) {
if(top==4)
printf("<---TOP=%d\n",top);
printf("%c\n", s[--top]);
if (top > 0) {
print_stack_ary(s, top);
}
}

void push(char c, char *s, int *top); 
{

}

A 回答 (2件)

こんな感じですかね。


最初に、<--TOP=xx と印字してますが、それを実現するために
static int deep = 0;を定義しています。(感心したことではありませんが・・・)
------------------------------------
#include <stdio.h>
#define MAX 30

void print_stack_ary(char* s, int top);

void push(char c, char *s, int *top);


int main(void) {
int top = 0;
char s[MAX] = "";
print_stack_ary(s,top);
push('a',s,&top);
push('b',s,&top);
push('c',s,&top);
print_stack_ary(s,top);
push('d',s,&top);
push('e',s,&top);
print_stack_ary(s,top);
return 0;
}

void print_stack_ary(char* s, int top) {
static int deep = 0;
if(deep == 0)
printf("<---TOP=%d\n",top);
if(top <= 0) return;
printf("%c\n", s[--top]);
if (top > 0) {
deep++;
print_stack_ary(s, top);
}
if (top <= 0) deep = 0;
}

void push(char c, char *s, int *top)
{
if (*top >= MAX) return;
s[*top] = c;
(*top)++;
}
--------------------------------------
以下、実行結果です。
<---TOP=0
<---TOP=3
c
b
a
<---TOP=5
e
d
c
b
a
ーーーーーーーーーーーーーーーーーー
    • good
    • 0

「関数の中身をどう書けばいいのか」の前に「どのような動作をするのか」が必要.

    • good
    • 0
この回答へのお礼

加えて、説明すると、topの値はpush関数内で1増えることです

お礼日時:2016/11/09 17:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!