// 課題16 単方向リスト ソート /* #include #include #include #define LIMIT_LOW 0 #define LIMIT_HIGH 25 // 構造体の定義 typedef struct tag { int temp; // 温度 struct tag *next; // 自分自身の型へのポインタ変数 } TempData16; // 温度データ // 新データ作成関数 TempData16* makeNewNode(int t) { TempData16* pNewNode; //** person 型のメモリ領域確保 ** pNewNode = (TempData16*)malloc(sizeof(TempData16)); if (pNewNode != NULL) { //** データ設定 ** pNewNode->temp= t; pNewNode->next = NULL; } return pNewNode ; } int main(void) { int temp; // 温度入力用変数 TempData16 *pTop; // 温度データリストのトップ TempData16 *pNow; // 温度データリスト内の現在位置 TempData16 *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) { // 先頭入れ替え } else { // 挿入位置の検索 pNow = pTop ; // リストを末尾まで検索 while (pNow != NULL) { // 末尾に追加? if (pNow->next == NULL) { // 末尾に追加 break; } else if ( (pNow->temp < pNew->temp) && (pNew->temp <= pNow->next->temp) ) { // ここに挿入する break; } pNow = pNow->next; } } // 次のデータを入力 scanf("%d", &temp); } // 出力 pNow = pTop ; while (pNow != NULL) { printf("%d\n", pNow->temp); pNow = pNow->next; } return 0 ; } */ import java.util.Scanner; public class Exer16 { public static final int LIMIT_LOW = 0; public static final int LIMIT_HIGH = 25; public static void main(String[] args) { int temp; // 温度入力用変数 TempData16 pTop; // 温度データリストのトップ TempData16 pNow; // 温度データリスト内の現在位置 TempData16 pNew; // 温度データの新規データ // 必要であれば,ここに変数を追加 // 最初のデータは,必ず範囲内のデータであるとする Scanner scanner = new Scanner(System.in); temp = scanner.nextInt(); pTop = new TempData16(temp); pNow = pTop; // 次のデータを入力 temp = scanner.nextInt(); while ((LIMIT_LOW <= temp) && (temp <= LIMIT_HIGH)) { // ここにリスト作成処理を記述 // 新しいデータの生成 pNew = new TempData16(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; } } // 次のデータを入力 temp = scanner.nextInt(); } scanner.close(); // ここに逆順に表示する処理 pNow = pTop; while (pNow != null) { System.out.printf("%d\n", pNow.temp); pNow = pNow.next; } } } class TempData16 { public int temp; // 温度 public TempData16 next; // 次のデータ public TempData16(int t) { temp = t; next = null; } }