C言語 リスト追加
C言語 リスト追加
情報マネジメント学部の名物科目、初級プログラミング。
初級と言っていますが、初級とは名ばかりの難しい科目と言われています。
2020年度から初学者コースという初心者向けクラスを
初めて導入した科目でもあるんですよね。
そんな科目を3学期に控えている今、
ちょっとでもC言語になじんでおかなければ!と思い、
隙を見てちょこちょこ事前学習をしています。
C言語自体得意ではないのですが
中でもリストが大の苦手です。
やってるうちに
この変数が何を指しているのか
自分が何してるのかわからなく・・・。
思えばはるか昔、C言語を初めて学ぼうとした時も
つまずいたのはポインタと構造体でした(遠い目
これがわかるようにならないとアルゴリズム云々の前に
スタートラインにも立ててないんですよね、きっと。
宣言して追加して表示するだけなのですが
動く最低ラインを何とかかけたので忘備録としておいておきます。
これが何も見ずに書けるように写コードガンバリマス。
//ライブラリ読込▽▽▽----------------------------------------------
#include <stdio.h>
#include <stdlib.h>
//ライブラリ読込△△△----------------------------------------------
//構造体作成▽▽▽----------------------------------------------
//typedefすると実際に使うときにlist_tで使えるようになる
typedef struct LIST{
int value;
struct LIST *prev;
struct LIST *next;
}list_t;
//構造体作成△△△----------------------------------------------
//事前準備▽▽▽----------------------------------------------
//先頭に配置するダミーデータ作成
list_t dummy;
//常に先頭を示すポインタ作成
list_t *head = &dummy;
//関数宣言
void insert(int);
//事前準備△△△----------------------------------------------
//メイン▽▽▽----------------------------------------------
int main(void){
int ans;
//入力データを最後まで追加
while( (scanf("%d",&ans)) != EOF ){
insert( ans );
}
//リストを表示
list_t *p = head -> next;
while( p != NULL ){
printf("%d\n",p->value);
p = p -> next;
}
}
//メイン△△△----------------------------------------------
//挿入部▽▽▽----------------------------------------------
void insert( int x ){
//探し始める位置用のポインタ
list_t *p = head;
//挿入データ格納用
list_t *new;
//最後まで探すか、現在地のの数より挿入数値が大きくなったら終了
while( p -> next != NULL && p-> next ->value < x ){
p = p -> next;
}
//挿入データ用のスペースを確保する
new = (list_t*)malloc(sizeof(list_t));
//値を入れる
new->value = x;
//ポインタ書き換え
new->next = p->next;
p->next = new;
return;
}
//挿入部△△△----------------------------------------------
参考にしたページ
第1回)リスト構造の概要
https://edu.clipper.co.jp/pg-2-40.html
第2回)リスト構造の構造体定義
https://edu.clipper.co.jp/pg-2-65.html
第3回)リストへの挿入
https://edu.clipper.co.jp/pg-2-66.html
第4回)リスト構造からの削除操作 delete
https://edu.clipper.co.jp/pg-2-67.html