連結リストによるスタックの実装

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kanaya
記事: 5
登録日時: 9年前

連結リストによるスタックの実装

#1

投稿記事 by kanaya » 9年前

件名通り連結リストを用いて、要素数を宣言せずにスタックを実装させたいのですが、全くわかりません。
配列を用いるプログラムを参考にし、変更すべきだと考えた箇所をかっこ(5、14、32,36,40行目)で置いたプログラムが以下のとおりです。

コード:

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

typedef struct {
(  )
} STACK;
void push(STACK*, int);
int pop(STACK*);
void printSTACK(STACK*);

int main(int argc, char* argv[])
{
	int i,n;
	(  )
	srand(time(NULL));
	for(i=0;i<5;i++)
	{
		n=rand()%100;
		printf("push %d\n", n);
		push(&s, n);
		printSTACK(&s);
	}
	for(i=0;i<5;i++)
	{
		printf("pop %d\n", pop(&s));
		printSTACK(&s);
	}
	return 0;
}
void push(STACK* s, int m)
{
	(  )
}
int pop(STACK* s)
{
	(  )
}
void printSTACK(STACK* s)
{
	(  )
}
どのように変更すべきか教えてください。よろしくお願いします。

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

Re: 連結リストによるスタックの実装

#2

投稿記事 by box » 9年前

kanaya さんが書きました:

コード:

typedef struct {
(  )
} STACK;
ここが空欄になってるってことは、リスト構造(あるいはその前提となる自己参照型構造体)について
わかっていないように見えます。
実際、いかがですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

kanaya
記事: 5
登録日時: 9年前

Re: 連結リストによるスタックの実装

#3

投稿記事 by kanaya » 9年前

以下のように書き加えましたが、合っているのでしょうか。

コード:

typedef struct {
 int data;
 struct STACK *next
} STACK;
おっしゃる通りでリスト構造について理解できていませんが、至急やらなければいけなくなったため、質問した次第です。

non
記事: 1097
登録日時: 14年前

Re: 連結リストによるスタックの実装

#4

投稿記事 by non » 9年前

検索したら参考になるページが出そうです。
例えば、
https://teratail.com/questions/17221
non

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

Re: 連結リストによるスタックの実装

#5

投稿記事 by box » 9年前

kanaya さんが書きました:以下のように書き加えましたが、合っているのでしょうか。

コード:

typedef struct {
 int data;
 struct STACK *next
} STACK;
合ってなさそうです。
STACKという名前の構造体が未定義の状態で
struct STACK *next;
とはできません。最後にセミコロンを付けてくださいね。

コード:

typedef struct STACK {
    int data;
    struct STACK *next;
} STACK;
とかだったらよさそうです。1行目のSTACKと4行目のSTACKは別の概念であることに留意。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

kanaya
記事: 5
登録日時: 9年前

Re: 連結リストによるスタックの実装

#6

投稿記事 by kanaya » 9年前

ありがとうございます
自力で頑張ってみます

閉鎖

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