ページ 11

アルゴリズム 線形リスト

Posted: 2013年4月30日(火) 18:37
by king
線形リストの勉強をしているんですが全く分かりません。
ですが丸投げはダメなのでどのようにかいていったらいいか手順を教えてくれませんか?
次の関数を動かすためにおのおの定義していく問題

void delete( Node *p )
p で指定された要素の次の要素を削除する手続き.

Node* first( Node *head )
head で指定されるリストの最初の要素を指すポインタを返す.リストが空ならば NULL を返す.

Node* last( Node *head )
head で指定されるリストの最後の要素を指すポインタを返す.リストが空ならば NULL を返す.

Node* next( Node *p, Node *head )
p で指定される次の要素を指すポインタを返す.p がリストの最後尾であれば NULL を返すこと

Node* prev( Node *p, Node *head )
head で指されるリスト中の内,p で指定される前の要素を指すポインタを返す. p がリストの先頭であれば NULL を返す.

Node* locate( int i, Node *head )
head で指定されるリストの先頭から i 番目の要素のポインタを返す.存在しない場合は NULL を返す.

Re: アルゴリズム 線形リスト

Posted: 2013年4月30日(火) 18:40
by みけCAT
1.開発環境をダウンロードします。http://orwelldevcpp.blogspot.jp/
2.開発環境をインストールします。
3.開発環境を起動します。
4.ファイルを新規作成します。
5.コードを打ち込みます。
6.コードを保存します。
7.コードをコンパイルします。
8.プログラムを実行してテストします。
9.必要に応じてデバッグします。

Re: アルゴリズム 線形リスト

Posted: 2013年4月30日(火) 18:58
by softya(ソフト屋)
線形リストですよね?
1)C言語の関数・ポインタは理解出来ていて、自分でコードが書けるか?
2)線形リストのアルゴリズムは理解できているか?
3)ネット上で検索できる線形リストのソースコードは理解できるか?
この3つについてご自身では、何処で躓いていると思いますでしょうか。

Re: アルゴリズム 線形リスト

Posted: 2013年5月01日(水) 08:39
by non
まず、Nodeの構造体を書いてみてください。
次に、単方向か双方向か、番兵はあるかないかを教えてください。

Re: アルゴリズム 線形リスト

Posted: 2013年5月01日(水) 09:47
by usao
(1)~(6)までの関数の型(引数の種類とか個数とか)は
ご自身で決められたのでしょうか,それとも課題とか問題集とかから与えられているものなのでしょうか.

#"リストに要素を追加する" ための関数も欲しいような…?


>どのようにかいていったらいいか
各々の関数の動作確認をするためには,当然,それらの関数に引数として渡す何らかのデータ(リスト)を用意する必要があると思います.
まずは,(1)~(6)の関数云々以前に,リストデータを実際に用意してみるところから始められてはいかがでしょうか.
(必然的に,この段階でNode型の定義とかが定まりますよね.)
 ↓
次に,あるリストの内容(リストが持つ要素群)を任意の時点で確認できないとやはり動作確認できないでしょうから,
リストの内容をprintf()か何かで出力する関数を用意し,前記用意したリストの内容を出力できる ところまでを
コーディングしてみるべきと思います.
 ↓
ここまでができる段階にあれば,(1)~(6)の関数の実装は朝飯前かと思います.