/* list3.c データ構造(単方向リスト):整列入力、ダミーノードなし */
/*問題
ダミーノードを持たないリスト
入力されたデータの値によってリストは整列させてリンクする。
前回はダミーノードを予め設定してリスト処理を考えてきたが、
ダミーノードを持たない単方向リストを考える方がより一般的である。

void display(void)を部分を埋めて動作を可能にせよ。
*/
#include<stdio.h>
#include<stdlib.h>
struct list{
    float element;
	struct list *next;
};

struct list *head;
struct list *newlist(void)
{
	return (struct list *)malloc(sizeof(struct list));
}

void insert(float val)
{
	struct list *p,*q,*r;
	p=head;
	r=newlist(); r->element=val;
	if(p==NULL) {r->next=p; head=r; }
	else if(p->element>=val { r->next=p; head=r; }
	else {
		for(q=p; p!=NULL&&p->element<val;p=p->next) q=p;
		r->next=p; q->next=r;
	}
}

void delete(float val)
{
	struct list *p,*q,*r;
	p=head;
	if(p==NULL) return;
	else if(p->element==val) { head=p->next; free(p); }
	else {
		for(q=p;p!=NULL&&p->element<val; p=p->next) q=p;
		if(p!=NULL&&p->element==val) { q->next=p->next; free(p); }
	}
}

void initialize(void)
{
	head=NULL;
}

void display(void){ここを埋めよ}

void main(void){
	struct list *q,*r;
	int i,c=0;
		for(r=head;r!=NULL;r=r->next){
			c++;
		}
		q=head;
		for(i=0;i<c-2;i++){
			q=q->next;
			printf("%4x:%f\n",q,q->element);
		}
}