始めたての初心者です。
名簿番号と名前を木構造で、左の木が小さな名簿番号になるように収納して、名簿番号順に表示させるプログラムです。本などを参考にしながら自分で作ってみました。
C
1#include "pch.h" 2#include <iostream> 3#include<stdio.h> 4#include<malloc.h> 5 6#define LENGTH 20 7 8struct person *talloc(); 9int genlist(); 10void displist(struct person *); 11 12struct person 13{ 14 struct person *right; 15 int num; 16 char name[LENGTH]; 17 struct person *left; 18 19}; 20 21int main() 22{ 23 genlist(); 24 25 displist(head); 26 27 return 0; 28} 29 30int genlist() { 31 32 struct person *n,*old = talloc(); 33 int again = 0; 34 35 old = n = talloc(); 36 n->left = n->right = NULL; 37 38 printf("name = "); 39 scanf_s("%s", n->name,LENGTH); 40 41 printf("\nnum = "); 42 scanf_s("%d", &n->num); 43 printf("\n"); 44 45 printf("Finish?-> 0 \n"); 46 scanf_s("%d", &again); 47 printf("\n"); 48 if (again == 0) 49 return 0; 50 51 while (n = talloc(),printf("\nname = "),scanf_s("%s",n->name, LENGTH),printf("\nnum = "),scanf_s("%d",&n->num),printf("\n") != EOF)//New data 52 { 53 //search for prepared location 54 while (true) 55 { 56 57 if (old->num > n->num && old->left == NULL) { 58 old->left = n; 59 n->right = n->left = NULL; 60 break; 61 } 62 else if(old->num < n->num && old->right == NULL){ 63 old->right = n; 64 n->right = n->left = NULL; 65 break; 66 } 67 else if (old->num > n->num) 68 old = old->left; 69 else if (old->num < n->num) 70 old = old->right; 71 else 72 printf("something wrong\n"); 73 74 } 75 76 printf("Finish?-> 0 \n"); 77 scanf_s("%d", &again); 78 printf("\n"); 79 if (again == 0) 80 return 0; 81 82 } 83 84 return 0; 85} 86 87void displist(struct person *root) {//再帰を使って表示 88 if (root != NULL) { 89 displist(root->left); 90 printf("%d : %s\n", root->num, root->name); 91 displist(root->right); 92 } 93} 94 95 96struct person *talloc() { 97 return (struct person *)malloc(sizeof(struct person)); 98} 99 100
質問を書きましょう。
えと、このコードについて、今何が問題で、何を解決したいのでしょうか?タイトルにある「効率」の一言でも、速度をあげる、メモリ使用量を減らす、コードを読みやすくする、汎用性を高める、と言った複数の要素があり、それによって具体的にどのような方法があるのかは全く異なる場合があります。効率化したい部分の対象によっては、Cではない他の言語を採用すると言うことも考慮する必要があり、このままでは「より効率よく素早くコーディングしたいなら、CではなくてPythonやRubyを使った方がいい」という回答もあり得てしまいます。より具体的になにをどうしたいのかの要件を書いてください。
質問とは関係ないですが、amazonのロゴはやばいでしょう・・・訴えられますよ^^;