prg-lang-2 / week09 / task16.c
task16.c
Raw
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LIMIT_LOW 0
#define LIMIT_HIGH 25

/* 構造体の定義 */
typedef struct tag
{
    int temp;         /* 温度 */
    struct tag *next; /* 自分自身の型へのポインタ変数 */
} tempData;           /* 温度データ */

/* 新データ作成関数 */
tempData *makeNewNode(int t)
{
    tempData *pNewNode;
    /*** person 型のメモリ領域確保 ***/
    pNewNode = (tempData *)malloc(sizeof(tempData));
    if (pNewNode != NULL)
    {
        /*** データ設定 ***/
        pNewNode->temp = t;
        pNewNode->next = NULL;
    }
    return pNewNode;
}

int main(void)
{
    int temp;       /* 温度入力用変数 */
    tempData *pTop; /* 温度データリストのトップ */
    tempData *pNow; /* 温度データリスト内の現在位置 */
    tempData *pNew; /* 温度データの新規データ */
    /* 必要であれば,ここに変数を追加 */

    /* 最初のデータは,必ず範囲内のデータであるとする */
    scanf("%d", &temp);
    pTop = makeNewNode(temp);
    pNow = pTop;
    /* 次のデータを入力 */
    scanf("%d", &temp);

    while ((LIMIT_LOW <= temp) && (temp <= LIMIT_HIGH))
    {
        /* ここにリスト作成処理を記述 */
        /* 新しいデータの生成 */
        pNew = makeNewNode(temp);

        /* 先頭入れ替えかチェック */
        if (pNew->temp < pTop->temp)
        {
            /* 先頭入れ替え */
            pNew->next = pTop;
            pTop = pNew;
        }
        else
        {
            /* 挿入位置の検索 */
            pNow = pTop;
            /* リストを末尾まで検索 */
            while (pNow != NULL)
            {
                /* 末尾に追加? */
                if (pNow->next == NULL)
                {
                    /* 末尾に追加 */
                    pNow->next = pNew;
                    break;
                }
                else if ((pNow->temp < pNew->temp) && (pNew->temp <= pNow->next->temp))
                {
                    /* ここに挿入する */
                    pNew->next = pNow->next;
                    pNow->next = pNew;
                    break;
                }
                pNow = pNow->next;
            }
        }

        /* 次のデータを入力 */
        scanf("%d", &temp);
    }

    /* 出力 */
    pNow = pTop;
    while (pNow != NULL)
    {
        printf("%d\n", pNow->temp);
        pNow = pNow->next;
    }

    return 0;
}