ページ 11

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

Posted: 2016年1月20日(水) 23:52
by kanaya
件名通り連結リストを用いて、要素数を宣言せずにスタックを実装させたいのですが、全くわかりません。
配列を用いるプログラムを参考にし、変更すべきだと考えた箇所をかっこ(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)
{
	(  )
}
どのように変更すべきか教えてください。よろしくお願いします。

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

Posted: 2016年1月21日(木) 00:07
by box
kanaya さんが書きました:

コード:

typedef struct {
(  )
} STACK;
ここが空欄になってるってことは、リスト構造(あるいはその前提となる自己参照型構造体)について
わかっていないように見えます。
実際、いかがですか?

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

Posted: 2016年1月21日(木) 00:21
by kanaya
以下のように書き加えましたが、合っているのでしょうか。

コード:

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

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

Posted: 2016年1月21日(木) 09:33
by non
検索したら参考になるページが出そうです。
例えば、
https://teratail.com/questions/17221

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

Posted: 2016年1月21日(木) 23:30
by box
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は別の概念であることに留意。

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

Posted: 2016年1月22日(金) 22:36
by kanaya
ありがとうございます
自力で頑張ってみます