ACHIYAMA BLOG

Microsoft製品に関する備忘録

C言語でキューを表現

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

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

int main(void) {
    struct cell *listhead = NULL;
    struct cell *listtail = NULL;
    struct cell *p, *q;
    char str[128];

    while (1) {
        printf("操作を選択してください (enq/deq/end) ==> ");
        scanf("%s", str);

        if (strcmp(str, "enq") == 0) {
            p = (struct cell *)malloc(sizeof(struct cell));

            printf("追加する値を入力してください ==> ");
            scanf("%lf", &(p->num));

            p->next = NULL;

            if (listhead == NULL) {
                listhead = listtail = p;

            } else {
                listtail->next = p;
                listtail = p;

            }

            p = listhead;
            while (p != NULL) {
                printf("->%f", p->num);
                p = p->next;

            }

            printf("\n");

        } else if (strcmp(str, "deq") == 0) {
            if (listhead == NULL) {
                printf("キューにデータがありません。\nプログラムを終了します。\n");
                break;

            } else {
                p = listhead;
                listhead = listhead->next;

                printf("%fを削除しました。\n", p->num);
                free(p);

                p = listhead;
                while (p != NULL) {
                    printf("->%f", p->num);
                    p = p->next;

                }

                printf("\n");

            }

        } else if (strcmp(str, "end") == 0) {
            printf("プログラムを終了します。\n");

            p = listhead;
            while (p != NULL) {
                q = p->next;
                free(p);
                p = q;

            }

            break;

        }

    }

    return 0;
}

テスト記事です

#include<stdio.h>
#include<math.h>

double max_for(double max_for[])
{
	int i;
	double max;

	max = max_for[0];

	for(i = 1; i < 10; i++) {

		if (max_for[i] > max)
			max = max_for[i];
	}

	return max;
}

double min_for(double min_for[])
{
	int i;
	double min;

	min = min_for[0];

	for(i = 1; i < 10; i++) {

		if (min_for[i] < min)
			min = min_for[i];
	}

	return min;

}

double ave_for(double ave_for[])
{
	int i;
	double sum = 0;
	double ave;

	for (i = 0; i < 10; i++) {
		sum += ave_for[i];
	}

	ave = sum / 10;

	return ave;
}

double dis_for(double dis_for[], double ave)
{
	int i;
	double dis;
	double sum = 0;

	for (i = 0; i < 10; i++) {
		sum += (dis_for[i] - ave) * (dis_for[i] - ave);
	}

	dis = sum /10;

	return dis;


}

double sqrt(double div)
{
	return div;
}

int main(void)
{
	int i;
	double data[10];
	double tmp;

	double max;
	double min;
	double ave;
	double dis;
	double div;
	

	/*データの入力*/
	for (i = 0; i < 10; i++) {
		printf("第%d番目のデータを入力 : ", i);
		scanf("%lf", &data[i]);
	}

	max = max_for(data);
	min = min_for(data);
	ave = ave_for(data);
	dis = dis_for(data, ave);
	div = sqrt(dis);




	/*画面表示*/
	printf("入力データ : ");

	printf("最大値 : %f\n", max);
	printf("最小値 : %f\n", min);
	printf("平均値 : %f\n", ave);
	printf("分散値 : %f\n", dis);
	printf("標準偏差  : %f\n", div);

	return 0;
}