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; }