Kの学習記録(東京通信大学)

東京通信大学に通うKのブログです。思ったこと感じたことをゆるく書いています。

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