ビデオ: 【Python】英単語テストを自動で作るプログラム!! 2024
Cプログラミングで、すでに作成したコードに2番目の構造を追加する場合は、相互にポインタを含む一連の構造体を作成します。構造体の基本データに加えて、構造体には、リスト内の次の構造体のアドレスを含むポインタが含まれています。
ポインタ名のいくつかの巧妙なジャグリングと、リストの最後を覆うためのNULLを加えれば、Aプリミティブリンクリストの例のソースコードに似たものになるかもしれません。
<! #include #include #include int main(){構造体{char symbol [5];} int量;浮動価格;構造体ストック* next;};構造体在庫*最初に;構造体在庫*現在;構造体在庫*新規; / *メモリ内の構造体を作成する* / first =(struct stock * *)malloc(sizeof(struct stock)); if(first == NULL){puts( "ある種のmalloc()エラー"); exit(1);} / *構造体データの割り当て* / current = first; strcpy(current-> symbol、 "GOOG"); current-> quantity = 100;現在の価格= 801。 19; current-> next = NULL; new =(struct stock *)malloc(sizeof(struct stock)); if(new == NULL){puts( "別のmalloc()エラー"); exit(1);} current-> next = new;現在の=新しい; strcpy(現在のシンボル、 "MSFT"); current-> quantity = 100;現在の価格= 28。 77; current-> next = NULL; / *データベースを表示する* / puts( "投資ポートフォリオ"); printf( "SymboltSharestPricetValuen");現在の=最初;現行 - >数量、現在 - >価格、現在 - >数量*現在 - >価格); current = current-> next;現行 - >数量、現在 - >価格、現在 - >数量*現在 - >価格); return(0);}このソースコードはかなり長いですが、最初の構造にリンクされた2番目の構造を作成するだけです。ソースコードの長さがあなたを脅かさないようにしてください。
<! - 2 - >
13行目から15行目では、リンクリストのダンスに必要な標準の3つの構造ポインタが宣言されています。伝統的に、彼らは最初、現在、そして新しい名前が付けられています。構造体の4番目のメンバに挿入され、次に構造体ポインタである11行目に配置されます。
typedefを使用して、リンクリストを作成するときに新しい構造変数を定義しないでください。 Primitive Linked-Listの例ではtypedefを使用していないので、コードに問題はありませんが、多くのCプログラマーは構造体でtypedefを使用しています。注意してください!<! - 3 - >
Line 15で使用されているnewという変数名はC ++の予約語なので、バイリンガルにするには変数名をnew_structまたはnew以外の変数に変更します。
最初の構造体が塗りつぶされると、行30はNULLポインタを次の要素に代入します。そのNULL値はリンクされたリストの終わりを覆います。32行目は構造体を作成し、そのアドレスを新しいポインタ変数に配置します。アドレスは、38行目の最初の構造体に保存されます。これは、2番目の構造体の位置が保持される方法です。
40行目から43行目は、2行目のポインタの情報を埋め、行43の次の要素にNULL値を代入します。
リンクは構造体の内容が表示されるときに行われます。 48行目は最初の構造体のアドレスを取得します。次に、ライン54は、第1の構造内から次の構造のアドレスを取り込む。
演習1
:
プリミティブリンクリストの例からエディタにソースコードを入力します。それは長いですが、後でもう一度編集する必要があるので入力してください(これまで慣れていない場合)。ビルドして実行します。 配列とは異なり、リンクリストの構造体には番号が付けられません。代わりに、各構造はリストの次の構造にリンクされます。最初の構造体のアドレスを知っている限り、NULLでマークされている最後までリストを処理できます。 プリミティブ・リンク・リストの例は、繰り返しコードがたくさんあるちょっとしたソースコードを示しています。あなたのコードでこのような複数のステートメントが表示されたら、すぐに "関数"と考えるべきです。 "
より良いリンクリストの例
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include# int量;浮動価格;構造体ストック* next;};構造体在庫*最初に;構造体在庫*現在;構造体在庫*新規;構造体ストック* make_structure(void); void fill_structure(構造体のストック* a、int c); void show_structure(struct stock * struct); int main(){int x; / *データベースを表示する* / puts( "投資ポートフォリオ"); printf( "SymboltSharestPricetValuen(" SymboltSharestPricetValuen構造体ストック*構造体*構造体* a; a =(構造体のストック*構造体* ); void fill_structure(struct stock *); void fill_structure(struct malloc(););} void fill_structure(構造体在庫) printf( "Item Symbol:"); scanf( "%s"、a-> symbol); printf( "Number(%s、a - > symbol) ); showf( "%d"、&a-> quantity); printf( "株価:"); scanf( "%f"、&a-> price);} void show_structure(struct stock *
最も関連性の高いリスト(
最初に常にアドレスを含むリストの最初の構造体の常に。
currentには、作業中の構造体のアドレス、データの埋め込み、または表示された構造体のアドレスが含まれます。
-
newは、malloc()関数を使用して作成された新しい構造体のアドレスです。
-
7行目は、株式構造をグローバルとして宣言します。これにより、さまざまな機能からアクセスできます。
-
行25と行39の間のforループは、それらを結ぶ新しい構造を作成します。初期構造は特別なので、そのアドレスは30行目に保存されます。それ以外の場合は、make_structure()関数のおかげで新しい構造体が割り当てられます。行35では、前の構造が更新されます。現在の値は36行目まで変更されません。その前に、現在の構造体のポインタが次の構造体newのアドレスで更新されます。行40では、最後の構造体の新しいポインタをNULLにリセットすることによって、リンクされたリストの終わりがマークされます。
46行目のwhileループは、リンクされたリスト内のすべての構造体を表示します。ループの条件は、現在のポインタの値です。 NULLが検出されると、ループは停止します。
より良いリンクリストの例に示されているコードの残りの部分は、わかりやすい関数で構成されています。
演習2
:
より良いリンクリストの例のコードをエディタにコピーします。ビルドして実行します。
fill_structure()関数内のscanf()ステートメントに注意してください。 - >はポインタの "peeker"表記であることに注意してください。アドレスを取得するには、変数にscanf()関数の&の接頭辞を付ける必要があります。