// 課題16 単方向リスト ソート
/*
#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; // 自分自身の型へのポインタ変数
} 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;
}
}