ハッシュテーブルの実装めどい
「簡単なシェルプログラムをつくってレポートを提出しなさい。でも A4 4枚程度に収まる程度でよろしく」なんて講義がありまして。後ろの条件が無ければまた脳みそ熱くなって馬鹿かますところですけど、まあ適当に fork して exec する程度のプログラム書けばいいらしいです。まあはっちゃけ過ぎない程度には、面白い機能追加は加点対象ですよー、みたいな意味の文章も付記されてたんで、ほげほげな機能とかでも追加しよかなあと思った。まああとはふがふがとかよよよよとか。
で、まあそんなあれこれするには、やっぱりハッシュテーブルあった方が楽だなあというわけで、簡易的なハッシュテーブルでも実装しとこ思ったわけです。うろ覚えのままいいかげんに。
struct hnode{ char *key; hitem item; }; typedef struct hnode *htable[HTABLE_SIZE]; int insert(htable table, hnode *node){ int index = hash(node->key); while(1){ if(table[index]==NULL ||strcmp(table[index]->key, node->key)==0) break; index += h1(node->key); } table[index] = clone_node(node); } unsigned int hash(char *str){ unsigned int val; for(val=0;*str!='\0';++str){ val = val*256+*str; } return val; } unsigned int h1(char *str){ return 1; }
さてこれもコンパイルできる環境が手元に無いので、コンパイル通るかすら知らんけど。ハッシュテーブルの効率とか衝突をいかに少なくとかなんも考えてません。領域がいっぱいいっぱいになった場合とか、とにかく投げっぱなし。まあでもプログラミングの講義っつうわけでもない座学の講義の「てきとーにこんなプログラムつくってみ」的なレポート程度だったらこんなんでいいよなあ。っつうか、あんまし講義の内容と関係ない部分で頑張られたところで、講師の人も採点に困ろうが。
そこんところよく考えて、ヒューマンインターフェースの講義のちょっとしたプログラムの課題で、言語指定されなかったからと言ってなんかマイナーな言語で書こうと考えている阿呆は考えを改めるといいよ。そうっすね。Forth で書こうとかいう考えはあきらめて、おとなしく JavaScript あたりで書こうかと思います。
今ネカフェだけど、 JavaScript だったら、もう実行環境あるなあ。まあ他のだってインストールにそう時間かかるわけでもないけど。 Common Lisp なんて xyzzy ならすぐだなあ。まあそんなことより眠いんだけど、そろそろレポート書くかな。ネカフェだけど。なにその間違った勤勉学生風。勤勉学生はネットカフェなんて来ません。
っていうか俺は漫画喫茶に来たつもりであって、ネットカフェに来たわけではありません。たまたまネット環境もあったから、今ちょっと使ってるだけです。僕は思います、漫画っておもしろいなあと。