#include #include #include #define LIMIT_LOW 0 #define LIMIT_HIGH 25 /* 構造体の定義 */ typedef struct tag { int temp; /* 温度 */ struct tag *prev; /* 1つ前のデータへのポインタ変数 */ struct tag *next; /* 1つ後のデータへのポインタ変数 */ } tempData; /* 温度データ */ /* 新データ作成関数 */ tempData *makeNewNode(int t) { tempData *pNewNode; /*** tempData 型のメモリ領域確保 ***/ pNewNode = (tempData *)malloc(sizeof(tempData)); if (pNewNode != NULL) { /*** データ設定 ***/ pNewNode->temp = t; pNewNode->prev = NULL; pNewNode->next = NULL; } return pNewNode; } int main(void) { int temp; /* 温度入力用変数 */ tempData *pTop; /* 温度データリストのトップ */ tempData *pLast; /* 温度データリストの末尾 */ tempData *pNow; /* 温度データリスト内の現在位置 */ tempData *pNew; /* 温度データの新規データ */ /* 必要であれば,ここに変数を追加 */ /* 最初のデータは,必ず範囲内のデータであるとする */ scanf("%d", &temp); pTop = makeNewNode(temp); pLast = pTop; /* 次のデータを入力 */ scanf("%d", &temp); while ((LIMIT_LOW <= temp) && (temp <= LIMIT_HIGH)) { /* データ作成 */ pNew = makeNewNode(temp); /* 先頭データより小さいか? */ if (pNew->temp < pTop->temp) { /* 先頭の入れ替え */ pNew->next = pTop; pTop->prev = pNew; pTop = pNew; } else { /* 挿入する場所を探す */ pNow = pTop; /* 末尾に達するまで探す */ while (pNow != pLast) { /* 1つ先のデータが pNew より大きかったら,そこが挿入ポイント */ if (pNew->temp < pNow->next->temp) { /* 挿入処理 */ pNew->next = pNow->next; pNow->next->prev = pNew; pNow->next = pNew; pNew->prev = pNow; /* 探索終了 */ break; } pNow = pNow->next; } /* 探索が末尾に達して終了したら,末尾に追加 */ if (pNow == pLast) { /* 末尾に追加 */ pNow->next = pNew; pNew->prev = pNow; pLast = pNew; } } /* 次のデータを入力 */ scanf("%d", &temp); } /* 出力処理 */ pNow = pLast; while (pNow != NULL) { printf("%d\n", pNow->temp); pNow = pNow->prev; } return 0; }