配列と二分探索木によって,記号表の実装をしました.
これを改変して,項目の挿入個所や、探索箇所の実行時間を計測するプログラムを作りたいと考えています.
以下に二つのコードを乗せるのですが,前者は変更せずに,後者のみを改良して実装したいです,
後者のSTsearchを改変して,以下のようにしたのですが.実行してもなにも変化がありませんでした.
include<stdio.h>やinclude<time.h>は後者のファイルに書いてあります.
なぜ計測できないのか.どこにいれれば計測できるようになるのかを教えていただきたいです.
よろしくお願いします.
C
1Item STsearch(Key v) 2{ start=clock(); 3 return searchR(head, v); 4 end=clock(); 5 printf("%fsec\n",(double)(end-start)/CLOCKS_PER_SEC); 6 7}
##以下,ファイル
C
1#include <stdio.h> 2#include <stdlib.h> 3#include "Item.h" 4#include "ST.h" 5 6int main(int argc, char *argv[]) 7{ int N, M, maxN = atoi(argv[1]), sw = atoi(argv[2]); 8 Key v; Item item; 9 STinit(maxN); srand(1); 10 for (M = 0, N = 0; N < maxN; N++) 11 { 12 if (sw == 1) v = ITEMrand(); 13 else if (sw == 2) v = N+1; 14 else if (ITEMscan(&v) == EOF) break; 15 item = STsearch(v); if (item.key != NULLitem.key) continue; 16 key(item) = v; 17 STinsert(item); M++; 18 } 19 STsort(ITEMshow); 20 printf("\n"); 21 printf("%d keys ", N); 22 printf("%d distinct keys\n", STcount()); 23 return 0; 24}
C
1#include <stdlib.h> 2#include "Item.h" 3typedef struct STnode* link; 4struct STnode { Item item; link l, r; int N; }; 5static link head, z; 6link NEW(Item item, link l, link r, int N) 7{ link x = malloc(sizeof *x); 8 x->item = item; x->l = l; x->r = r; x->N = N; 9 return x; 10} 11void STinit() 12{ head = (z = NEW(NULLitem, 0, 0, 0)); } 13int STcount(void) { return head->N; } 14Item searchR(link h, Key v) 15{ Key t = key(h->item); 16 if (h == z) return NULLitem; 17 if eq(v, t) return h->item; 18 if less(v, t) return searchR(h->l, v); 19 else return searchR(h->r, v); 20} 21Item STsearch(Key v) 22{ return searchR(head, v); } 23link insertR(link h, Item item) 24{ Key v = key(item), t = key(h->item); 25 if (h == z) return NEW(item, z, z, 1); 26 if less(v, t) 27 h->l = insertR(h->l, item); 28 else h->r = insertR(h->r, item); 29 (h->N)++; return h; 30} 31 32void STinsert(Item item) 33{ head = insertR(head, item); } 34void sortR(link h, void (*visit)(Item)) 35{ 36 if (h == z) return; 37 sortR(h->l, visit); 38 visit(h->item); 39 sortR(h->r, visit); 40} 41void STsort(void (*visit)(Item)) 42{ sortR(head, visit); } 43
回答1件
あなたの回答
tips
プレビュー