pushとpopを用いたリストによるスタック実現

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sie

pushとpopを用いたリストによるスタック実現

#1

投稿記事 by sie » 9年前

C言語での出題で■■■の部分を埋めろと言う問題です
この問題の考え方、もしくは答えを教えていただけないでしょうか?
イマイチ内容が(特にWhile部が)つかめないので…


#include <stdio.h>
#include <stdlib.h>

// ノードの構造体
struct tfield {
int data;
struct tfield *pointer;
};

// ノード型(NODE)の型定義
typedef struct tfield NODE;

NODE *talloc(void);
void disp(NODE *p);
void push(int, NODE **);
int pop(int *, NODE **);

int main(int argc, char *argv[])
{
NODE *head = NULL;
int n;
char command[256];

while (1) {
printf("Command: ");
scanf("%s", command);
switch(command[0]) {
case 'i': case 'I':
printf("Data: ");
scanf("%d", &n);
push(n, &head);
break;
case 'o': case 'O':
if (pop(&n, &head) == -1)
printf("Stack: Empty\n");
else
printf("%d\n", n);
break;
case 'd': case 'D':
disp(head);
break;
}
if ((command[0] == 'q') ||
(command[0] == 'Q'))
break;
printf("\n");
}
}

// ノード新規生成
NODE *talloc(void)
{
NODE *p;

p = (NODE *)malloc(sizeof(NODE));
if (p == NULL) {
fprintf(stderr, "malloc() failed.\n");
exit(EXIT_FAILURE);
}
return p;
}

// リスト内容表示
void disp(NODE *p)
{
printf("Stack: ");
if (p == NULL)
printf("Empty\n");
else {
while (p != NULL) {
printf("%d ", p->data);
p = p->pointer;
}
printf("\n");
}
}

// データ入力
void push(int n, NODE **head)
{
■■■
}

// データ出力
int pop(int *n, NODE **head)
{
■■■
}

box
記事: 2002
登録日時: 14年前

Re: pushとpopを用いたリストによるスタック実現

#2

投稿記事 by box » 9年前

そもそもの話として
1)リスト構造に関する知識を持っていますか?
2)スタックに関する知識を持っていますか?キューとの違いを説明できますか?配列によるスタックを実装できますか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

sie

Re: pushとpopを用いたリストによるスタック実現

#3

投稿記事 by sie » 9年前

正確に言いますと、それぞれの要素をすっかり忘れてしまいました。
授業の内容なのですが、それぞれノートをとっておらず(学校のプレゼンを参考すればよいのですが現在参照する術がなく)、また前回の授業からかれこれ20日ほどたち多忙だったのもあって覚えていないのです
再度勉強はしようとは思いますが、如何せん明日に授業があるのでそれに備えるために質問した次第です
今後はこのようなことがないように復習していこうとは思いますが…

閉鎖

“C言語何でも質問掲示板” へ戻る