カテゴリ
以前の記事
2009年 08月 2008年 11月 2008年 05月 2008年 02月 2007年 08月 2007年 07月 2007年 06月 2007年 05月 2007年 04月 2007年 03月 2007年 02月 2007年 01月 2006年 12月 2006年 11月 2006年 10月 2006年 09月 2006年 08月 2006年 07月 2006年 06月 2006年 05月 2006年 04月 2006年 03月 2006年 02月 2006年 01月 2005年 12月 2005年 11月 2005年 10月 2005年 09月 2005年 08月 2005年 07月 2005年 06月 フォロー中のブログ
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧
|
PUSH POPというスティック状のアメがある。 スティックのりのような形で、なめたい時に押し出して、飽きたら戻す。またなめたくなったら押し出して、飽きたら戻して・・・。そんなお菓子である。 このお菓子、とても不衛生じゃないか? 昨今一回口つけて飲んだペットボトル飲料はその日のうちに飲んでしまえ、なんていうのに、一回開封して、しかもべろべろなめたものをまたポケットにしまって、ポケットの熱でよく発酵させてからまた食べようなんてやばすぎる。 しかし、どうやら世界42カ国で売り出され、大人気だとか。 大人気であれ自分は食べないしどうにでもしてくれていいのだが、どうにも気になるのがCMのあの歌。PUSH!POP!PUSH!POP!などと連呼されると、スタックが頭に浮かんできてしょうがない。 スタックとはデータの格納方法の1つである。 LIFO(後入れ先出し)というデータ構造で、一端に空いた開口部からデータを詰め込んでいく。先に入れたものはどんどん下に堆積し、取り出すときは逆に最後に入れたものから順番に取り出してゆく。ちょうど古新聞ラックみたいなものだ(古新聞ラックがこんな構造をしているのはうちだけか?)。 スタックはこのような構造を持っているため、関数呼び出しの際のレジスタ退避、前置記法、後置記法などの演算をするのに都合がよい。 で、このスタックが件のスティック状アメとどう関係あるのか。 スタックに対する操作には2種類があって、ひとつがPUSH,もうひとつがPOPという。 PUSHはデータをスタックに格納する操作で、POPはスタックの一番上にあるデータを取り出す操作である。 例を挙げる(等幅フォントでないと絵がずれます)。 ①PUSH 4 (4がスタックに格納される) ②PUSH 1 (4の上に1が格納される) ③POP (最上段にある1が取り出される) | | | | |__| | | | | | | | 1 | | | | | ①|__| ②|__| ③|__| | | →| 4 | →| 4 | →| 4 | |__| |__| |__| |__| このように、データをどんどん積み上げてゆき、一番上から取り出してゆく、下のデータは自分より上のデータがなくならないと取り出せないというところがスタック構造の良いところなのである。 だのに。 CMの歌ときたら、「PUSH!POP!PUSH!POP!」と、入れては取り出し、入れては取り出しである。これではスタックのうまみがまったくない。 それどころか。 この世の中にはFIFO(先入れ先出し)の待ち行列構造や、ランダムアクセスが可能な配列構造など、複数のデータを効率的に扱う構造が多々あるが、このPUSH!POP!PUSH!POP!は、スタックどころか、待ち行列、配列である必要もない。 なぜならば、1つのデータしか格納していないからである。2つ目のデータが格納される前に入っているデータを取り出しているから、2つ以上のバッファが必要ないのである。 昨今記憶容量の大幅な拡大により、メモリを湯水のように使うことができるようになったが、それにしてもこのPUSH!POP!PUSH!POP!にスタック構造はあまりにももったいない! ・・・ という感想をいつも抱く。 まあ、PUSHPOPはタダのアメだから、データ構造とは何の関係もないのだけれど。
by u-seigo
| 2005-10-19 20:12
|
ファン申請 |
||