Eukleides project

from http://d.hatena.ne.jp/u5_h/

FIFOリスト待ち行列(動作わざと不可、関数の参考程度に)

/*list queue(FIFO) buffer*/
#include

struct cell{
double data;
struct cell *next;
};

struct cell *qhead;
struct cell *qtail;
/*待ち行列end関数*/
void end(void)
{
qhead ='\0';
exit(1);
}
/*待ち行列enq関数*/
void enq(double x)
{
struct cell *p;
p=(struct cell *)malloc(sizeof(struct cell));
p->data=x;
p->next='\0';
if(qhead=='\0')
qhead=p;
else qtail->next=p;
qtail=p;
}
/*待ち行列deq関数*/
double deq(void)
{
struct cell *p;
double a;
if(qhead=='\0')
{
printf("取り除くデータがありません.\n");
exit(1);
}
a=qhead->data;
p=qhead;
qhead=qhead->next;
free((void*)p);
return a;
}
/*操作評価関数*/
int my_str_comp(char str1,char str2)
{
int j;

for(j=0;str1[j] == str2[j];j++)
{
if(str1[j] == '\0')
{
return 0;
}
}
return str1[j] - str2[j];
}
int main(void)
{
double a;
char b[3];
struct cell *p;
printf("操作を選択してください (enq/deq/end)==>");
scanf("%s",b);
while(my_str_comp(b,"enq")==0)
{
printf("enqする値を入力してください==>\n");
scanf("%lf",&a);
enq(a);
for(p=qhead;p!='\0';p=p->next)
printf("->%f",p->data);
printf("\n");
printf("操作を選択して下さい (enq/deq/end)==>");
scanf("%s",b);

while(my_str_comp(b,"deq")==0)
{
a=deq();
printf("deqされたデータは%fです.\n",a);
for(p=qhead;p!='\0';p=p->next)
printf("->%f",p->data);
printf("\n");

printf("操作を選択して下さい(enq/deq/end)==>");
scanf("%s",b);

while(my_str_comp(b,"end")==0)
{
end();
}
}

}
return 0;
}