#include <stdio.h>
#include <stdlib.h>
/*構造体の定義*/
struct node {
int num;
struct node *next;
};
typedef struct node NODE;
NODE *start = NULL;
/*リストにデータを追加する関数(並べ替えつき)*/
void addList(int data)
{
NODE *p = start, *pend = NULL, *new;
/*リストの末尾のノードを求める処理*/
while(p != NULL && p->num < data){
pend = p;
p = p->next;
}
/*新しいノードを作成する*/
new = (NODE *)malloc(sizeof(NODE));
if(new == NULL){
printf("mallocに失敗しました。\n");
exit(1);
}
/*ノードにデータを格納する*/
new->num = data;
new->next = p;
if(pend == NULL)
start = new;
else
pend->next = new;
}
/*リストの内容を表示する関数*/
void printList(void)
{
NODE *p;
printf("START ");
for(p = start; p != NULL; p = p->next)
printf("--> %d ", p->num);
printf("\n");
}
/*リストのメモリーを解放する関数*/
void delList(void)
{
NODE *p = start, *next;
while(p != NULL){
next = p->next;
free(p);
p = next;
}
}
int main()
{
int d;
while(1){
printf("数値を入力してください(0で終了): ");
scanf("%d", &d);
if(d == 0) break;
addList(d);
printList();
}
delList();
return 0;
}
実行結果
数値を入力してください(0で終了): 5
START --> 5
数値を入力してください(0で終了): 3
START --> 3 --> 5
数値を入力してください(0で終了): 2
START --> 2 --> 3 --> 5
数値を入力してください(0で終了): 8
START --> 2 --> 3 --> 5 --> 8
数値を入力してください(0で終了): 4
START --> 2 --> 3 --> 4 --> 5 --> 8
数値を入力してください(0で終了): 12
START --> 2 --> 3 --> 4 --> 5 --> 8 --> 12
数値を入力してください(0で終了): 6
START --> 2 --> 3 --> 4 --> 5 --> 6 --> 8 --> 12
数値を入力してください(0で終了): 0